agrobot_base/AgroBase/AgroBase/Services/OAKCameraService.cs

68 lines
2.0 KiB
C#

using AgroBase.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AgroBase.Services
{
public class OAKCameraService
{
public static List<OAKCameraModel> CamerasConectadas = new List<OAKCameraModel>();
private static readonly object Cameras_Lock = new object();
private static AsyncTaskTimerModel tmrAtualizacao = new AsyncTaskTimerModel("tmrAtualizacao_OAK", async () => { AtualizarListaCameras(); }, 5000);
public static void IniciarRotinas()
{
tmrAtualizacao?.Stop();
tmrAtualizacao?.Start();
}
private static void AtualizarListaCameras()
{
var cameras = new List<OAKCameraModel>()
{
new OAKCameraModel()
{
Id = "Sem video",
Index = -1
}
};
try
{
string output = PythonService.RunScriptWithCallback(PythonService.ScriptListOAK, new string[] { });
if (string.IsNullOrWhiteSpace(output))
{
Console.WriteLine("Nenhuma saída do script Python.");
}
// Converte o JSON para uma lista de objetos OakCamera
List<OAKCameraModel> _cameras = JsonConvert.DeserializeObject<OAKCameraModel[]>(output).ToList();
cameras.AddRange(_cameras);
lock (Cameras_Lock)
{
CamerasConectadas = new List<OAKCameraModel>(cameras);
}
Console.WriteLine("Lista de cameras atualizadas: " + cameras.Count);
}
catch (Exception ex)
{
Console.WriteLine($"Erro ao executar script Python: {ex.Message}");
}
}
public static List<OAKCameraModel> GetListaCameras()
{
lock (Cameras_Lock)
{
return new List<OAKCameraModel>(CamerasConectadas);
}
}
}
}