68 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|