agrobot_base/AgroBase/AgroBase/Forms/frmInstancial.cs

146 lines
3.9 KiB
C#

using AgroBase.Forms.IHM;
using AgroBase.Models;
using AgroBase.Services;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AgroBase.Forms
{
public partial class frmInstancial : Form
{
public static AsyncTaskTimerModel tmrVarreduraDispositivos;
public static frmPrincipal frmPrincipal = new frmPrincipal();
public static frmJoystick frmJoystick = new frmJoystick();
public static frmIHM frmIHM = new frmIHM()
{
FormBorderStyle = FormBorderStyle.None,
//WindowState = FormWindowState.Maximized,
//TopMost = true
};
public frmInstancial()
{
InitializeComponent();
ThreadPool.SetMinThreads(workerThreads: 50, completionPortThreads: 50);
Variaveis.IniciarMQTT();
//Variaveis.IniciarUDP();
APIService.IniciarRotinas();
GeneralJoystick.IniciarRotinas();
VersionamentoService.IniciarRotinas();
PythonService.EncerrarProcessos();
RedisService.Iniciar();
RedisService.LimparDadosIniciais();
LivoxManagerProcess.Start();
Task.Run(async () =>
{
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
});
AudioAlertaService.SelecionarVoz(VariaveisEquipamento.VozAlerta);
}
private void frmInstancial_Shown(object sender, EventArgs e)
{
if (!Variaveis.Producao)
{
frmIHM.FormClosing += FrmIHM_FormClosing;
frmPrincipal.FormClosing += frmPrincipal_FormClosing;
frmPrincipal.Show();
}
else
{
frmIHM.FormClosing += frmPrincipal_FormClosing;
frmIHM.Show();
}
this.Hide();
}
private void frmInstancial_Load(object sender, EventArgs e)
{
FuncoesGlobais.AddApplicationToStartup();
IniciarConexaoMqtt();
Control control = new Control();
if (!Variaveis.Producao)
{
control = frmPrincipal;
}
else
{
control = frmIHM;
}
tmrVarreduraDispositivos = new AsyncTaskTimerModel("tmrVarreduraDispositivos", tmrVarreduraDispositivos_Tick, SerialService.InteraloVerificacao, null, 15000);
tmrVarreduraDispositivos.Start();
}
private static async Task tmrVarreduraDispositivos_Tick()
{
await SerialService.RealizarVarreduraPortasUSB();
}
private async void IniciarConexaoMqtt()
{
await Variaveis.MqttServiceLocal.ConnectAsync();
}
public static async Task EncerrarProcessos()
{
Variaveis.Fechando = true;
LivoxManagerProcess.Dispose();
PythonService.EncerrarProcessos();
foreach (var Disp in Variaveis.DispositivosConectados)
{
Disp.EnviarProtocolosConfiguracao(false);
Disp.SalvarParametros(Disp.Dados);
}
var timeout = DateTime.Now.AddSeconds(10);
while (!CanManager.CanService.FilaLiberada && DateTime.Now < timeout)
{
await Task.Delay(200);
}
AsyncTaskTimerModel.PararTimers();
try { Environment.Exit(0); } catch { }
}
private async void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
await EncerrarProcessos();
e.Cancel = true;
}
private void FrmIHM_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
frmIHM.Hide();
}
}
}