agrobot_base/AgroBase/OperationControl/Models/AppShell.cs

165 lines
7.0 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
{
2026-03-12 01:00:21 +00:00
public static readonly bool Mock = true;
2025-11-14 17:11:58 +00:00
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();
2026-03-12 01:00:21 +00:00
if (Mock && false)
2026-03-12 01:00:21 +00:00
{
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<AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel>()
{
new AgroBase.Models.Operacoes.OperacaoParametrosDadosBombaModel()
{
ComandoEstado = true,
LeituraEstado = true,
ID = "BOMBA",
ID_Num = 10,
Inicializado = true,
Potencia = 50,
TempoAtuado = 3000
}
},
Bicos = new List<AgroBase.Models.Operacoes.OperacaoParametrosDadosBicoModel>()
{
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
},
}
}
};
});
}
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
}
}