using AgroBase.Models; using AgroBase.Services; using OperationControl.ViewModels; using OperationControl.Windows; using static AgroBase.Models.Enums; namespace OperationControl.Models { public class AppShell { 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(); } 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); })); } } }