agrobot_base/AgroBase/OperationControl/Models/AppShell.cs

76 lines
2.5 KiB
C#
Raw Normal View History

2025-11-14 17:11:58 +00:00
using AgroBase.Models;
using AgroBase.Services;
using OperationControl.ViewModels;
2025-11-14 17:11:58 +00:00
using OperationControl.Windows;
using static AgroBase.Models.Enums;
2025-11-14 17:11:58 +00:00
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; }
2025-11-14 17:11:58 +00:00
public void Inicializar()
{
2025-11-24 16:05:50 +00:00
Show();
2025-11-14 17:11:58 +00:00
APIService.IniciarRotinas();
Variaveis.IniciarMQTT();
2026-03-05 02:03:31 +00:00
Variaveis.IniciarUDP();
2025-11-14 17:11:58 +00:00
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();
2025-11-14 17:11:58 +00:00
}
private void tmrComunicacao_Elapsed()
{
if (tmrComunicacaoTicking) return;
tmrComunicacaoTicking = true;
2025-11-24 16:05:50 +00:00
try
{
if (tmrComunicacaoTicks % (VariaveisEquipamento.TempoEntrePingsConexao / 1000) == 0 && Variaveis.GpsService != null)
{
VariaveisControleOperacao.EnviarDadosPosicao(Variaveis.GpsService.UltimaLeitura);
}
VariaveisControleOperacao.EnviarDadosHeartbeat();
VariaveisControleOperacao.AtualizarListaRoversNaRede();
}
finally
2025-11-14 17:11:58 +00:00
{
2025-11-24 16:05:50 +00:00
tmrComunicacaoTicks++;
tmrComunicacaoTicking = false;
2025-11-14 17:11:58 +00:00
}
}
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);
}));
}
2025-11-14 17:11:58 +00:00
}
}