agrobot_base/AgroBase/AgroBase/Forms/frmInstancial.cs

135 lines
3.5 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);
APIService.IniciarRotinas();
GeneralJoystick.IniciarRotinas();
VersionamentoService.IniciarRotinas();
PythonService.EncerrarProcessos();
RedisService.Iniciar();
RedisService.LimparDadosIniciais();
Task.Run(async () =>
{
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
});
}
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.MqttService.ConnectAsync();
}
public static async Task EncerrarProcessos()
{
Variaveis.Fechando = true;
AsyncTaskTimerModel.PararTimers();
foreach (var Disp in Variaveis.DispositivosConectados)
{
Disp.EnviarProtocolosConfiguracao(false);
Disp.SalvarParametros(Disp.Dados);
}
while (!FilaService.Liberado)
{
await Task.Delay(500);
}
PythonService.EncerrarProcessos();
Environment.Exit(0);
}
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();
}
}
}