using AgroBase.Models; using AgroBase.Services; using OperationControl.ViewModels; using OperationControl.Windows; using static AgroBase.Models.Enums; namespace OperationControl.Models { public class AppShell { public static readonly bool Mock = true; private readonly System.Timers.Timer tmrComunicacao = new(1000) { AutoReset = true }; private int tmrComunicacaoTicks = 0; private bool tmrComunicacaoTicking = false; public MainWindow Main { get; private set; } public DockWindow Dock { get; private set; } public void Inicializar() { Show(); APIService.IniciarRotinas(); Variaveis.IniciarMQTT(); Variaveis.IniciarUDP(); tmrComunicacao.Elapsed += (_, __) => tmrComunicacao_Elapsed(); tmrComunicacao.Start(); } private void Show() { // Aqui você decide qual janela é a inicial de fato Main = new MainWindow(); Dock = new DockWindow(); Dock.Show(); if (Mock && false) { Task.Run(async () => { await Task.Delay(1000); VariaveisControleOperacao.AdicionarNovoRoverNaRede("01", "192.168.1.100"); VariaveisControleOperacao.RoversNaRede.FirstOrDefault().DadosLeitura = new AgroBase.Models.Operacoes.OperacaoParametrosDadosModel() { StatusRover = StatusModulo.Operante, Operacao = new AgroBase.Models.Operacoes.OperacaoParametrosDadosOperacaoModel() { Status = StatusOperacao.Parametrizando }, Atuador = new AgroBase.Models.Operacoes.OperacaoParametrosDadosAtuadorModel() { Bombas = new List() { new AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel() { ComandoEstado = true, LeituraEstado = true, ID = "BOMBA", ID_Num = 10, Inicializado = true, Potencia = 50, TempoAtuado = 3000 } }, Bicos = new List() { new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel() { AnguloAbertura = 30, ComandoAngulo = 0, ComandoEstado = true, ID = "B01", ID_Num = 1, Inicializado = true, LeituraAngulo = 0, LeituraEstado = true, Posicao = 1, QtdAtuacoes = 5, TempoAtuado = 300, VazaoInstantaneaMLs = 15, VazaoMediaMLs = 30, VolumeVazadoML = 325 }, new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel() { AnguloAbertura = 30, ComandoAngulo = 0, ComandoEstado = true, ID = "B02", ID_Num = 2, Inicializado = true, LeituraAngulo = 0, LeituraEstado = false, Posicao = 1, QtdAtuacoes = 5, TempoAtuado = 300, VazaoInstantaneaMLs = 15, VazaoMediaMLs = 30, VolumeVazadoML = 325 }, new AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel() { AnguloAbertura = 30, ComandoAngulo = 0, ComandoEstado = false, ID = "B03", ID_Num = 3, Inicializado = true, LeituraAngulo = 0, LeituraEstado = true, Posicao = 2, QtdAtuacoes = 5, TempoAtuado = 300, VazaoInstantaneaMLs = 15, VazaoMediaMLs = 30, VolumeVazadoML = 325 }, } } }; }); } } private void tmrComunicacao_Elapsed() { if (tmrComunicacaoTicking) return; tmrComunicacaoTicking = true; try { if (tmrComunicacaoTicks % (VariaveisEquipamento.TempoEntrePingsConexao / 1000) == 0 && Variaveis.GpsService != null) { VariaveisControleOperacao.EnviarDadosPosicao(Variaveis.GpsService.UltimaLeitura); } VariaveisControleOperacao.EnviarDadosHeartbeat(); VariaveisControleOperacao.AtualizarListaRoversNaRede(); } finally { tmrComunicacaoTicks++; tmrComunicacaoTicking = false; } } public void AdicionarAlertaDock(string roverId, T_Code modulo, SeveridadeAlerta severidade, string mensagem, string modId = null) { System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { (Dock?.DataContext as DockWindowViewModel)?.AdicionarAlerta(roverId, modulo, severidade, mensagem, modId); })); } public void RemoverAlertaDock(string roverId, T_Code modulo, SeveridadeAlerta? severidade = null, string modId = null) { System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { (Dock?.DataContext as DockWindowViewModel)?.RemoverAlerta(roverId, modulo, severidade, modId); })); } } }