using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Windows.Forms;
using StandardLibrary;
namespace MainForm
{
public delegate void SystemSetMessageHandler(LogType logType, string message);
public partial class Form_SystemSet : Form
{
private string FilePath = AppDomain.CurrentDomain.BaseDirectory + "Config.ini";
public event SystemSetMessageHandler MessageEvent;
private string currentRole = "";
#region 窗体事件
public Form_SystemSet()
{
InitializeComponent();
}
private void Form_SystemSet_Load(object sender, EventArgs e)
{
// 产品
txtProject_code.Text = IniFile.INIGetStringValue(FilePath, "Product", "ProjectCode", ""); // 项⽬编码
txtFactory_Code.Text = IniFile.INIGetStringValue(FilePath, "Product", "FactoryCode", ""); // ⼯⼚Id
txtProcess_Section_Code.Text = IniFile.INIGetStringValue(FilePath, "Product", "ProcessSectionCode", ""); // ⼯段编码
textBoxLineCode.Text = IniFile.INIGetStringValue(FilePath, "Product", "LineCode", ""); // 线体编码
textBoxLineName.Text = IniFile.INIGetStringValue(FilePath, "Product", "LineName", ""); // 线体名称
txtProgramName.Text = IniFile.INIGetStringValue(FilePath, "Product", "ProgramName", ""); // 程序名称
// MES API配置
chkIsUseMes.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsUseMES", "False"));
textBoxServerHost.Text = IniFile.INIGetStringValue(FilePath, "MES", "ServerHost", GlobalContext.ConstServerHost);
cbSendStationIn.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsSendStationIn", GlobalContext.ConstIsSend));
cbSendProcessData.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsSendProcessData", GlobalContext.ConstIsSend));
cbSendCheckOneData.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsSendCheckOneData", GlobalContext.ConstIsSend));
cbSendWorkingData.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsSendWorkingData", GlobalContext.ConstIsSend));
cbSendAlarmData.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsSendAlarmData", GlobalContext.ConstIsSend));
chkIsUseMESRoute.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "IsUseMESRoute", GlobalContext.ConstIsSend)); // 启用MES边线(RouteCommunication.dll)
// MQTT配置
chkIsUseIot.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsUseIot", "False"));
txtMqttIP.Text = IniFile.INIGetStringValue(FilePath, "MQTT", "MQTTServerHost", "127.0.0.1");
numMqttPort.Text = IniFile.INIGetStringValue(FilePath, "MQTT", "MQTTServerPort", "0");
chkMqttPassStation.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttSendProcessData", GlobalContext.ConstIsSend)); // 上传过站数据
chkMqttDeviceState.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttDeviceState", GlobalContext.ConstIsSend)); // 上传设备状态
chkMqttFaultLog.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttFaultLog", GlobalContext.ConstIsSend)); // 上传故障⽇志
chkMqttSensorData.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttSensorData", GlobalContext.ConstIsSend)); // 上传传感器数据
chkMqttStationInputBegin.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttStationInputBegin", GlobalContext.ConstIsSend)); ; // 上传节拍⽇志
chkMqttOperateLog.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttOperateLog", GlobalContext.ConstIsSend)); // 上传操作记录
chkMqttEquiConfig.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttEquiConfig", GlobalContext.ConstIsSend)); // 上传装备配置
chkMqttProcConfig.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "IsMqttProcConfig", GlobalContext.ConstIsSend)); // 上传⼯艺配置
// AGV配置
chkIsUseAGV.Checked = bool.Parse(IniFile.INIGetStringValue(FilePath, "AGV", "IsUseAGV", "False")); // 是否 启用AGV
txtAGVHttpIP.Text = IniFile.INIGetStringValue(FilePath, "AGV", "AGVHttpHost", ""); // Http IP地址
txtAGVMQTTIP.Text = IniFile.INIGetStringValue(FilePath, "AGV", "AGVMQTTHost", ""); // MQTT IP地址
numAGVMQTTPort.Text = IniFile.INIGetStringValue(FilePath, "AGV", "AGVMQTTPort", ""); // MQTT端口
txtTPortCode.Text = IniFile.INIGetStringValue(FilePath, "AGV", "AGVMQTTDeviceCode", ""); // MQTT PortCode
// 机器IP配置
bool boolS1 = bool.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "IsUsePLC1", "false"));
bool boolS2 = bool.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "IsUsePLC2", "false"));
bool boolS3 = bool.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "IsUsePLC3", "false"));
bool boolS4 = bool.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "IsUsePLC4", "false"));
bool boolS5 = bool.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "IsUsePLC5", "false"));
rdbS1.Checked = boolS1;
rdbS2.Checked = boolS2;
rdbS3.Checked = boolS3;
rdbS4.Checked = boolS4;
rdbS5.Checked = boolS5;
txtPLCAddress1.Text = IniFile.INIGetStringValue(FilePath, "Machine", "Machine1Address", GlobalContext.ConstMachine1Address);
txtPLCAddress2.Text = IniFile.INIGetStringValue(FilePath, "Machine", "Machine2Address", GlobalContext.ConstMachine2Address);
txtPLCAddress3.Text = IniFile.INIGetStringValue(FilePath, "Machine", "Machine3Address", GlobalContext.ConstMachine3Address);
txtPLCAddress4.Text = IniFile.INIGetStringValue(FilePath, "Machine", "Machine4Address", GlobalContext.ConstMachine4Address);
txtPLCAddress5.Text = IniFile.INIGetStringValue(FilePath, "Machine", "Machine5Address", GlobalContext.ConstMachine5Address);
numPLCPort.Value = int.Parse(IniFile.INIGetStringValue(FilePath, "Machine", "MachinePort", "0"));
// 产品2
if (boolS1)
{
txtWorkStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s1_work_station", "");
txtDeviceCode.Text = IniFile.INIGetStringValue(FilePath, "Station", "s1_device_code", "");
txtStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s1_station", "");
}
else if (boolS2)
{
txtWorkStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s2_work_station", "");
txtDeviceCode.Text = IniFile.INIGetStringValue(FilePath, "Station", "s2_device_code", "");
txtStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s3_station", "");
}
else if (boolS3)
{
txtWorkStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s3_work_station", "");
txtDeviceCode.Text = IniFile.INIGetStringValue(FilePath, "Station", "s3_device_code", "");
txtStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s3_station", "");
}
else if (boolS4)
{
txtWorkStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s4_work_station", "");
txtDeviceCode.Text = IniFile.INIGetStringValue(FilePath, "Station", "s4_device_code", "");
txtStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s4_station", "");
}
else if (boolS5)
{
txtWorkStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s5_work_station", "");
txtDeviceCode.Text = IniFile.INIGetStringValue(FilePath, "Station", "s5_device_code", "");
txtStation.Text = IniFile.INIGetStringValue(FilePath, "Station", "s5_station", "");
}
}
#endregion 窗体事件
///
/// 改变用户时更新页面
///
///
public void ForUserChangeToUpdate(User user)
{
currentRole = user.ToString();
//switch (user.ToString())
//{
// case "Operator":
// groupBox2.Enabled = false;
// groupBox3.Enabled = false;
// break;
// case "Admin":
// groupBox2.Enabled = true;
// groupBox3.Enabled = false;
// break;
// case "SuperAdmin":
// groupBox2.Enabled = true;
// groupBox3.Enabled = true;
// break;
// default:
// groupBox2.Enabled = true;
// groupBox3.Enabled = true;
// break;
//}
}
///
/// 保存产线信息
///
private void buttonConfirm_Click(object sender, EventArgs e)
{
try
{
IniFile.INIWriteValue(FilePath, "Product", "ProjectCode", txtProject_code.Text.Trim());
IniFile.INIWriteValue(FilePath, "Product", "FactoryCode", txtFactory_Code.Text.Trim());
IniFile.INIWriteValue(FilePath, "Product", "ProcessSectionCode", txtProcess_Section_Code.Text.Trim());
IniFile.INIWriteValue(FilePath, "Product", "LineCode", textBoxLineCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Product", "LineName", textBoxLineName.Text.Trim());
IniFile.INIWriteValue(FilePath, "Product", "ProgramName", txtProgramName.Text.Trim());
// 产品2
if (rdbS1.Checked)
{
IniFile.INIWriteValue(FilePath, "Station", "s1_work_station", txtWorkStation.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s1_device_code", txtDeviceCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s1_station", txtStation.Text.Trim());
}
else if (rdbS2.Checked)
{
IniFile.INIWriteValue(FilePath, "Station", "s2_work_station", txtWorkStation.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s2_device_code", txtDeviceCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s2_station", txtStation.Text.Trim());
}
else if (rdbS3.Checked)
{
IniFile.INIWriteValue(FilePath, "Station", "s3_work_station", txtWorkStation.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s3_device_code", txtDeviceCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s3_station", txtStation.Text.Trim());
}
else if (rdbS4.Checked)
{
IniFile.INIWriteValue(FilePath, "Station", "s4_work_station", txtWorkStation.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s4_device_code", txtDeviceCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s4_station", txtStation.Text.Trim());
}
else if (rdbS5.Checked)
{
IniFile.INIWriteValue(FilePath, "Station", "s5_work_station", txtWorkStation.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s5_device_code", txtDeviceCode.Text.Trim());
IniFile.INIWriteValue(FilePath, "Station", "s5_station", txtStation.Text.Trim());
}
MessageBox.Show("参数保存成功!");
GlobalContext.UpdateData();
//记录修改日志
List productSetVlaue = new List();
productSetVlaue.Add(txtProject_code.Text.Trim());
productSetVlaue.Add(txtFactory_Code.Text.Trim());
productSetVlaue.Add(txtProcess_Section_Code.Text.Trim());
productSetVlaue.Add(textBoxLineCode.Text.Trim());
productSetVlaue.Add(textBoxLineName.Text.Trim());
productSetVlaue.Add(txtProgramName.Text.Trim());
productSetVlaue.Add(txtWorkStation.Text.Trim());
productSetVlaue.Add(txtDeviceCode.Text.Trim());
productSetVlaue.Add(txtStation.Text.Trim());
String.Join(";", productSetVlaue);
OnMessage(LogType.Info, currentRole + "修改系统值[产线信息]为[" + String.Join(";", productSetVlaue) + "]");
}
catch (Exception ex)
{
string str = ex.StackTrace;
OnMessage(LogType.Info, "保存产线信息出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 保存MES配置
///
private void button2_Click(object sender, EventArgs e)
{
try
{
// 是否 启用MES
IniFile.INIWriteValue(FilePath, "MES", "IsUseMES", chkIsUseMes.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "ServerHost", textBoxServerHost.Text.Trim().ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsSendStationIn", cbSendStationIn.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsSendProcessData", cbSendProcessData.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsSendCheckOneData", cbSendCheckOneData.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsSendWorkingData", cbSendWorkingData.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsSendAlarmData", cbSendAlarmData.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MES", "IsUseMESRoute", chkIsUseMESRoute.Checked.ToString()); // 启用MES边线(RouteCommunication.dll)
MessageBox.Show("参数保存成功!");
GlobalContext.UpdateData();
//记录修改日志
List mesSetVlaue = new List();
mesSetVlaue.Add(chkIsUseMes.Checked.ToString());
mesSetVlaue.Add(textBoxServerHost.Text);
mesSetVlaue.Add(cbSendStationIn.Checked.ToString());
mesSetVlaue.Add(cbSendProcessData.Checked.ToString());
mesSetVlaue.Add(cbSendCheckOneData.Checked.ToString());
mesSetVlaue.Add(cbSendWorkingData.Checked.ToString());
mesSetVlaue.Add(cbSendAlarmData.Checked.ToString());
mesSetVlaue.Add(chkIsUseMESRoute.Checked.ToString()); // 启用MES边线(RouteCommunication.dll)
String.Join(";", mesSetVlaue);
OnMessage(LogType.Info, currentRole + "修改系统值[MES配置]为[" + String.Join(";", mesSetVlaue) + "]");
}
catch (Exception ex)
{
string str = ex.StackTrace;
OnMessage(LogType.Info, "保存MES配置出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 保存IOT配置
///
private void btnIOTData_Click(object sender, EventArgs e)
{
try
{
IniFile.INIWriteValue(FilePath, "MQTT", "IsUseIot", chkIsUseIot.Checked.ToString());
IniFile.INIWriteValue(FilePath, "MQTT", "MQTTServerHost", IPAddress.Parse(txtMqttIP.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "MQTT", "MQTTServerPort", numMqttPort.Value.ToString());
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttSendProcessData", chkMqttPassStation.Checked.ToString()); // 上传过站数据
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttDeviceState", chkMqttDeviceState.Checked.ToString()); // 上传设备状态
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttFaultLog", chkMqttFaultLog.Checked.ToString()); // 上传故障⽇志
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttSensorData", chkMqttSensorData.Checked.ToString()); // 上传传感器数据
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttStationInputBegin", chkMqttStationInputBegin.Checked.ToString()); // 上传节拍⽇志
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttOperateLog", chkMqttOperateLog.Checked.ToString()); // 上传操作记录
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttEquiConfig", chkMqttEquiConfig.Checked.ToString()); // 上传装备配置
IniFile.INIWriteValue(FilePath, "MQTT", "IsMqttProcConfig", chkMqttProcConfig.Checked.ToString()); // 上传⼯艺配置
MessageBox.Show("参数保存成功!");
GlobalContext.UpdateData();
//记录修改日志
List mesSetVlaue = new List();
mesSetVlaue.Add(chkIsUseIot.Checked.ToString());
mesSetVlaue.Add(txtMqttIP.Text.Trim());
mesSetVlaue.Add(numMqttPort.Value.ToString());
mesSetVlaue.Add(chkMqttPassStation.Checked.ToString());
mesSetVlaue.Add(chkMqttDeviceState.Checked.ToString());
mesSetVlaue.Add(chkMqttFaultLog.Checked.ToString());
mesSetVlaue.Add(chkMqttSensorData.Checked.ToString());
mesSetVlaue.Add(chkMqttStationInputBegin.Checked.ToString());
mesSetVlaue.Add(chkMqttOperateLog.Checked.ToString());
mesSetVlaue.Add(chkMqttEquiConfig.Checked.ToString());
mesSetVlaue.Add(chkMqttProcConfig.Checked.ToString());
String.Join(";", mesSetVlaue);
OnMessage(LogType.Info, currentRole + "修改系统值[IOT配置]为[" + String.Join(";", mesSetVlaue) + "]");
}
catch (Exception ex)
{
string str = ex.StackTrace;
OnMessage(LogType.Info, "保存IOT配置出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 保存AGV配置
///
private void btnAGV_Click(object sender, EventArgs e)
{
try
{
IniFile.INIWriteValue(FilePath, "AGV", "IsUseAGV", chkIsUseAGV.Checked.ToString()); // 是否 启用AGV
IniFile.INIWriteValue(FilePath, "AGV", "AGVHttpHost", IPAddress.Parse(txtAGVHttpIP.Text.Trim()).ToString()); // Http IP地址
IniFile.INIWriteValue(FilePath, "AGV", "AGVMQTTHost", IPAddress.Parse(txtAGVMQTTIP.Text.Trim()).ToString()); // MQTT IP地址
IniFile.INIWriteValue(FilePath, "AGV", "AGVMQTTPort", numAGVMQTTPort.Value.ToString()); // MQTT端口
IniFile.INIWriteValue(FilePath, "AGV", "AGVMQTTDeviceCode", txtTPortCode.Text.ToString()); // MQTT PortCode
MessageBox.Show("参数保存成功!");
GlobalContext.UpdateData();
//记录修改日志
List mesSetVlaue = new List();
mesSetVlaue.Add(chkIsUseAGV.Checked.ToString());
mesSetVlaue.Add(txtAGVHttpIP.Text.Trim());
mesSetVlaue.Add(txtAGVMQTTIP.Text.Trim());
mesSetVlaue.Add(numAGVMQTTPort.Text.Trim());
mesSetVlaue.Add(txtTPortCode.Text.Trim());
String.Join(";", mesSetVlaue);
OnMessage(LogType.Info, currentRole + "修改系统值[AGV配置]为[" + String.Join(";", mesSetVlaue) + "]");
}
catch (Exception ex)
{
string str = ex.StackTrace;
OnMessage(LogType.Error, "保存AGV配置出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 保存设备配置
///
private void button3_Click(object sender, EventArgs e)
{
try
{
IniFile.INIWriteValue(FilePath, "Machine", "IsUsePLC1", rdbS1.Checked.ToString());
IniFile.INIWriteValue(FilePath, "Machine", "IsUsePLC2", rdbS2.Checked.ToString());
IniFile.INIWriteValue(FilePath, "Machine", "IsUsePLC3", rdbS3.Checked.ToString());
IniFile.INIWriteValue(FilePath, "Machine", "IsUsePLC4", rdbS4.Checked.ToString());
IniFile.INIWriteValue(FilePath, "Machine", "IsUsePLC5", rdbS5.Checked.ToString());
IniFile.INIWriteValue(FilePath, "Machine", "Machine1Address", IPAddress.Parse(txtPLCAddress1.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "Machine", "Machine2Address", IPAddress.Parse(txtPLCAddress2.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "Machine", "Machine3Address", IPAddress.Parse(txtPLCAddress3.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "Machine", "Machine4Address", IPAddress.Parse(txtPLCAddress4.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "Machine", "Machine5Address", IPAddress.Parse(txtPLCAddress5.Text.Trim()).ToString());
IniFile.INIWriteValue(FilePath, "Machine", "MachinePort",numPLCPort.Value.ToString());
MessageBox.Show("参数保存成功!");
GlobalContext.UpdateData();
//记录修改日志
List machineSetVlaue = new List();
machineSetVlaue.Add(rdbS1.Checked.ToString());
machineSetVlaue.Add(rdbS2.Checked.ToString());
machineSetVlaue.Add(rdbS3.Checked.ToString());
machineSetVlaue.Add(rdbS4.Checked.ToString());
machineSetVlaue.Add(rdbS5.Checked.ToString());
machineSetVlaue.Add(txtPLCAddress1.Text.Trim());
machineSetVlaue.Add(txtPLCAddress2.Text.Trim());
machineSetVlaue.Add(txtPLCAddress3.Text.Trim());
machineSetVlaue.Add(txtPLCAddress4.Text.Trim());
machineSetVlaue.Add(txtPLCAddress5.Text.Trim());
machineSetVlaue.Add(numPLCPort.Value.ToString());
String.Join(";", machineSetVlaue);
OnMessage(LogType.Info, currentRole + "修改系统值[设备配置]为[" + String.Join(";", machineSetVlaue) + "]");
}
catch (Exception ex)
{
string str = ex.StackTrace;
OnMessage(LogType.Error, "保存设备配置出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
}
}
///
/// 获取订单信息
///
private void btnGetOrderInfo_Click(object sender, EventArgs e)
{
}
//private void textBoxWC_KeyPress(object sender, KeyPressEventArgs e)
//{
// if (e.KeyChar == 13)
// {
// WorkOrderInfo workOrderInfo;
// workOrderInfo = HttpUitls.GetWOData(textBoxWC.Text.Trim());
// if (workOrderInfo != null)
// {
// textBoxWC.Text = workOrderInfo.sono;
// textBoxBN.Text = workOrderInfo.splcode;
// comboBoxProductModel.Text = workOrderInfo.prtno;
// comboBoxKeyValue.Text = workOrderInfo.prodline;
// }
// else
// {
// textBoxWC.Text = string.Empty;
// }
// }
//}
///
/// 保存信息
///
///
///
private void OnMessage(LogType logType, string msg)
{
MessageEvent?.Invoke(logType, msg);
}
}
}