using DyeingComputer.UserClass; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Reflection.Emit; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using TouchSocket.Core; using TouchSocket.Sockets; using DyeingComputer.ViewModel; using System.Runtime.InteropServices; using ScottPlot.Colormaps; using static System.Windows.Forms.AxHost; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using Newtonsoft.Json; using static DyeingComputer.UserClass.SqliteHelper; using DyeingComputer.View; using System.Windows; using System.Windows.Controls; using static System.Net.WebRequestMethods; using System.Collections; namespace DyeingComputer.UserClass {/// /// 异步TCP服务器 /// public class AsyncTcpServer { //设置系统时间的API函数 [DllImport("kernel32.dll")] private static extern bool SetLocalTime(ref SYSTEMTIME time); [StructLayout(LayoutKind.Sequential)] private struct SYSTEMTIME { public short year; public short month; public short dayOfWeek; public short day; public short hour; public short minute; public short second; public short milliseconds; } /// /// 设置系统时间 /// /// 需要设置的时间 /// 返回系统时间设置状态,true为成功,false为失败 private static bool SetLocalDateTime(DateTime dt) { SYSTEMTIME st; st.year = (short)dt.Year; st.month = (short)dt.Month; st.dayOfWeek = (short)dt.DayOfWeek; st.day = (short)dt.Day; st.hour = (short)dt.Hour; st.minute = (short)dt.Minute; st.second = (short)dt.Second; st.milliseconds = (short)dt.Millisecond; bool rt = SetLocalTime(ref st); return rt; } public static string[] Prohibit = new string[10] { "S01", "S02", "S03", "S05", "S06", "S07", "SL1", "SL2", "SL3", ""};//禁止操作的指令 public static SQLiteHelper SQLiteHelpers = null; //定义数据库 public static readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\800COMPUTER.db"; //数据库路径 public static async Task Main() { NetFwManger.AllowPort(7790,"TCP");//开放7790端口 TcpService service = new TcpService(); service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接 service.Connected = (client, e) => { return EasyTask.CompletedTask; };//有客户端成功连接 service.Closing = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。 service.Closed = (client, e) => { return EasyTask.CompletedTask; };//有客户端断开连接 service.Received = (client, e) => { MainWindowViewModel.RX++; string SYSAPI = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(0,5); string DAT = e.ByteBlock.Span.ToString(Encoding.UTF8).Substring(5); string SYSDAT ="";// = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(5); string SYSKEY =""; if (DAT.Length >= 16) SYSKEY = DAT.Substring(0,16); if (DAT.Length > 16) SYSDAT = DAT.Substring(16); //LogGing.LogSQLDATA("800", "TcpServer", "API:"+ SYSAPI); if (SYSAPI == "SC800") { Dictionary Chart_new = new Dictionary();//缓存函数 Chart_new.Add("MACHINE", MainWindowViewModel.S01); Chart_new.Add("GROUP", MainWindowViewModel.S05); Chart_new.Add("SYSKEY", MainWindowViewModel.SYSKEY); Chart_new.Add("TIME", MainWindowViewModel.SYSTime); client.SendAsync("SC800" + "[" + MainWindowViewModel.S01 + "]" + Chart_new.ToJsonString()); MainWindowViewModel.TX++; APILog.DBlog(client.IP,SYSKEY,SYSAPI,SYSDAT);//记录指令 } else if (SYSAPI == "SC810") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary WorkOrder_dat; WorkOrder_dat = SerializeConvert.JsonDeserializeFromString>(SYSDAT); //WorkOrder_dat.GetValue("WorkOrder"); bool dat_w = SQLDATA.WorkOrder( WorkOrder_dat.GetValue("WorkOrder").ToString(), WorkOrder_dat.GetValue("ProgramName").ToString(), WorkOrder_dat.GetValue("StartTime").ToString(), WorkOrder_dat.GetValue("EndTime").ToString(), WorkOrder_dat.GetValue("Time").ToString(), WorkOrder_dat.GetValue("Remark").ToString(), WorkOrder_dat.GetValue("lock").ToString(), WorkOrder_dat.GetValue("State").ToString(), WorkOrder_dat.GetValue("ProgramID").ToString(), WorkOrder_dat.GetValue("color").ToString(), WorkOrder_dat.GetValue("Dyelot").ToString()); if (!dat_w) { client.SendAsync("SC910" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.GetValue("WorkOrder").ToString()); } else { client.SendAsync("SC810" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.GetValue("WorkOrder").ToString()); MainWindowViewModel.TX++; } APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC990" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//WorkOrder表信息检查写入 else if (SYSAPI == "SC811") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { DataTable WorkOrder_dat; WorkOrder_dat = SerializeConvert.JsonDeserializeFromString(SYSDAT); bool dat_w = SQLDATA.WorkOderStep(WorkOrder_dat); if (!dat_w) { client.SendAsync("SC911" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.Select().First().Field("WorkOrder")); } else { client.SendAsync("SC811" + "[" + MainWindowViewModel.S01 + "]" + WorkOrder_dat.Select().First().Field("WorkOrder")); MainWindowViewModel.TX++; } APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC991" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//WorkOrderstep表信息检查写入 else if (SYSAPI == "SC813") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { DataTable Dyelot_dat; Dyelot_dat = SerializeConvert.JsonDeserializeFromString(SYSDAT); bool dat_w = SQLDATA.Dyelot(Dyelot_dat); if (!dat_w) { client.SendAsync("SC913" + "[" + MainWindowViewModel.S01 + "]" + Dyelot_dat.Select().First().Field("Dyelot")); } else { client.SendAsync("SC813" + "[" + MainWindowViewModel.S01 + "]" + Dyelot_dat.Select().First().Field("Dyelot")); MainWindowViewModel.TX++; } APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC991" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//写入领料单 else if (SYSAPI == "SC820") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { if (SYSDAT.Length == 21) { SYSDAT = SYSDAT.Substring(1, 19); DateTime dt; if (DateTime.TryParse(SYSDAT, out dt)) SetLocalDateTime(dt); } client.SendAsync("SC820" + "[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "]"); MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC920" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//设置系统时间 else if (SYSAPI == "SC821") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_821; dat_821 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (dat_821.GetValue("INSTRUCTION").ToString() == "START") { SQLDATA.TechnologicalProcess_START(dat_821.GetValue("ProgramID").ToString()); client.SendAsync("SC821" + SYSKEY + SYSDAT); } else if (dat_821.GetValue("INSTRUCTION").ToString() == "STOP") { MainWindowViewModel.WORK_RUN = 0;//停止 MainWindowViewModel.DIDETime = 0; client.SendAsync("SC821" + SYSKEY + SYSDAT); } else if (dat_821.GetValue("INSTRUCTION").ToString() == "PAUSE") { MainWindowViewModel.WORK_RUN = 1;//暂停 client.SendAsync("SC821" + SYSKEY + SYSDAT); } else if (dat_821.GetValue("INSTRUCTION").ToString() == "CONTINUE") { MainWindowViewModel.WORK_RUN = 2;// // client.SendAsync("SC821" + SYSKEY + SYSDAT); }//运行 else if (dat_821.GetValue("INSTRUCTION").ToString() == "JUMP") { MainWindowViewModel.RUN_DATATABLE = MainWindowViewModel.dt_TP;//缓存表 MainWindowViewModel.RUN_STEPID = Convert.ToInt16(dat_821.GetValue("ID").ToString());//插入步骤号 MainWindowViewModel.STEP_START(dat_821.GetValue("Numder").ToString(), Convert.ToDouble(dat_821.GetValue("P1")), Convert.ToDouble(dat_821.GetValue("P2")), Convert.ToDouble(dat_821.GetValue("P3")), Convert.ToDouble(dat_821.GetValue("P4")), Convert.ToDouble(dat_821.GetValue("P5"))); }//跳步 else if (dat_821.GetValue("INSTRUCTION").ToString() == "INSERT") { int d = Convert.ToInt16(dat_821.GetValue("ID")); SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 /**插入行**/ string ProgramID = SQLiteHelpers.ExecuteScalar("select ProgramID from RUN where Step = '1'", null).ToString(); string ProgramNAME = SQLiteHelpers.ExecuteScalar("select Program from RUN where Step = '1'", null).ToString(); // TechnologicalProcessView.SQLiteHelpers.Close(); DataRow dr = MainWindowViewModel.dt_TP.NewRow();//添加表数据 dr["ProgramID"] = ProgramID; dr["Program"] = ProgramNAME; MainWindowViewModel.dt_TP.Rows.InsertAt(dr, d - 1); /**编辑行号**/ TechnologicalProcessView.Dat(); /**编辑行信息**/ DataRow drtt = MainWindowViewModel.dt_TP.Rows[d - 1]; drtt.BeginEdit(); drtt["StepID"] = dat_821.GetValue("StepID").ToString(); drtt["StepName"] = dat_821.GetValue("StepName").ToString(); drtt["ParameterName"] = dat_821.GetValue("ParameterName").ToString(); drtt["Parameter1"] = dat_821.GetValue("Parameter1").ToString(); drtt["Parameter2"] = dat_821.GetValue("Parameter2").ToString(); drtt["Parameter3"] = dat_821.GetValue("Parameter3").ToString(); drtt["Parameter4"] = dat_821.GetValue("Parameter4").ToString(); drtt["Parameter5"] = dat_821.GetValue("Parameter5").ToString(); drtt["RUN"] = "0"; drtt["DYELOT"] = MainWindowViewModel.WorkNumder; drtt.EndEdit(); // var _TechnologicalProcessView = Application.Current.Windows.Cast().FirstOrDefault(window => window is TechnologicalProcessView) as TechnologicalProcessView;//跨页面 // _TechnologicalProcessView.Grid.ItemsSource = TechnologicalProcessView.sql.Tables[0].DefaultView; //_TechnologicalProcessView.Grid.SelectedIndex = -1; /**存入信息**/ /**存入信息**/ // SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 // SQLiteHelpers.Open(); //打开数据库 SQLiteHelpers.Delete("RUN", null, null); DataTable data_t = MainWindowViewModel.dt_TP.Clone(); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { data_t.Clear();//清空 DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 DataRow drT = data_t.NewRow(); drT.ItemArray = dt.ItemArray; data_t.Rows.InsertAt(drT, 0); drT.BeginEdit(); //添加订单号 drT["DYELOT"] = MainWindowViewModel.WorkNumder; drT.EndEdit(); SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入 } SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); MainWindowViewModel.TX++; }//插入 else if (dat_821.GetValue("INSTRUCTION").ToString() == "EDIT") { int n = Convert.ToInt16(dat_821.GetValue("ID").ToString()); /**编辑行信息**/ DataRow dr = MainWindowViewModel.dt_TP.Rows[n - 1]; dr.BeginEdit(); dr["StepID"] = dat_821.GetValue("StepID").ToString(); dr["StepName"] = dat_821.GetValue("StepName").ToString(); dr["ParameterName"] = dat_821.GetValue("ParameterName").ToString(); dr["Parameter1"] = dat_821.GetValue("Parameter1").ToString(); dr["Parameter2"] = dat_821.GetValue("Parameter2").ToString(); dr["Parameter3"] = dat_821.GetValue("Parameter3").ToString(); dr["Parameter4"] = dat_821.GetValue("Parameter4").ToString(); dr["Parameter5"] = dat_821.GetValue("Parameter5").ToString(); dr.EndEdit(); var _TechnologicalProcessView = Application.Current.Windows.Cast().FirstOrDefault(window => window is TechnologicalProcessView) as TechnologicalProcessView;//跨页面 // _TechnologicalProcessView.Grid.ItemsSource = TechnologicalProcessView.sql.Tables[0].DefaultView; _TechnologicalProcessView.GridSTEP.SelectedIndex = -1; /**存入信息**/ SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 SQLiteHelpers.Delete("RUN", null, null); DataTable data_t = MainWindowViewModel.dt_TP.Clone(); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { data_t.Clear();//清空 DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 DataRow drT = data_t.NewRow(); drT.ItemArray = dt.ItemArray; data_t.Rows.InsertAt(drT, 0); drT.BeginEdit(); //添加订单号 drT["DYELOT"] = MainWindowViewModel.WorkNumder; drT.EndEdit(); SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入 } SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); MainWindowViewModel.TX++; }//编辑 else if (dat_821.GetValue("INSTRUCTION").ToString() == "DELETE") { int d = Convert.ToInt16(dat_821.GetValue("ID")); MainWindowViewModel.dt_TP.Rows.RemoveAt(d - 1); TechnologicalProcessView.Dat(); /**存入信息**/ SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 SQLiteHelpers.Delete("RUN", null, null); DataTable data_t = MainWindowViewModel.dt_TP.Clone(); for (int i = 0; i < MainWindowViewModel.dt_TP.Rows.Count; i++) { data_t.Clear();//清空 DataRow dt = MainWindowViewModel.dt_TP.Rows[i];//行转换 DataRow drT = data_t.NewRow(); drT.ItemArray = dt.ItemArray; data_t.Rows.InsertAt(drT, 0); drT.BeginEdit(); //添加订单号 drT["DYELOT"] = MainWindowViewModel.WorkNumder; drT.EndEdit(); SQLiteHelpers.InsertData("RUN", SQLiteHelpers.DataTableToDictionary(data_t));//行插入 } SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); MainWindowViewModel.TX++; }//删除 else { client.SendAsync("SC821" + SYSKEY + SYSDAT); } APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC921" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//启停跳步指令 else if (SYSAPI == "SC828") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { DataTable Dyelot_dat; Dyelot_dat = SerializeConvert.JsonDeserializeFromString(SYSDAT); SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 Dictionary Product_data = new Dictionary();//缓存函数 for (int i=0;i<=Dyelot_dat.Rows.Count;i++) { DataRow drEmployee = Dyelot_dat.Rows[i]; Product_data.Add("State", drEmployee.Field("State")); Product_data.Add("Amount", drEmployee.Field("Amount")); Product_data.Add("DispenseEndTime", drEmployee.Field("DispenseEndTime")); SQLiteHelpers.Update("Dyelot", Product_data, "Dyelot ='" + drEmployee.Field("Dyelot") + "' AND Step ='"+ drEmployee.Field("Step") + "' AND ProductCode='"+ drEmployee.Field("ProductCode") + "'", null); Product_data.Clear(); } SQLiteHelpers.Close(); //关闭连接 MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC928" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//输送信息指令 else if (SYSAPI == "SC829") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_829; dat_829 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (dat_829.GetValue("LOCK").ToString() == "True") { MainWindowViewModel._Lock_bool = true; client.SendAsync("SC829" + SYSKEY + SYSDAT); } else { MainWindowViewModel._Lock_bool = false; client.SendAsync("SC829" + SYSKEY + SYSDAT); } MainWindowViewModel.TX++; APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC929" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//锁指令 else if (SYSAPI == "SC830") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary Chart_new = new Dictionary();//缓存函数 Chart_new.Add("ERR", MainWindowViewModel.ERR_JOG); Chart_new.Add("UserButton", MainWindowViewModel._UserButton); Chart_new.Add("WORK_RUN", MainWindowViewModel.WORK_RUN); Chart_new.Add("RUN_STEPID", MainWindowViewModel.RUN_STEPID); Chart_new.Add("LOCK", MainWindowViewModel._Lock_bool); Chart_new.Add("CALL", MainWindowViewModel.CALL_FR); Chart_new.Add("Status", MainWindowViewModel.StatusStr); Chart_new.Add("Machine", MainWindowViewModel.S01); Chart_new.Add("WorkNumder", MainWindowViewModel.WorkNumder); Chart_new.Add("Time", MainWindowViewModel.SYSTime); Chart_new.Add("Process", MainWindowViewModel.ProgramName); Chart_new.Add("Step", MainWindowViewModel.Process_step); Chart_new.Add("MST", MainWindowViewModel.TEMP_co); Chart_new.Add("MTT", MainWindowViewModel.Selet_dtm("1010")); Chart_new.Add("MTL", MainWindowViewModel.Selet_dtm("1015")); Chart_new.Add("MTH", MainWindowViewModel.Selet_dtm("1009")); Chart_new.Add("MUT", MainWindowViewModel.Selet_dtm("1011")); Chart_new.Add("STTA", MainWindowViewModel.Selet_dtm("1012")); Chart_new.Add("STLA", MainWindowViewModel.Selet_dtm("1017")); Chart_new.Add("STTB", MainWindowViewModel.Selet_dtm("1013")); Chart_new.Add("STLB", MainWindowViewModel.Selet_dtm("1018")); Chart_new.Add("STTC", MainWindowViewModel.Selet_dtm("1014")); Chart_new.Add("STLC", MainWindowViewModel.Selet_dtm("1019")); client.SendAsync("SC830" + "[" + MainWindowViewModel.S01 + "]" + Chart_new.ToJsonString()); MainWindowViewModel.TX++; } catch (Exception ex) { client.SendAsync("SC931" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//当前信息 else if (SYSAPI == "SC831") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC831" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_TP.ToJsonString()); MainWindowViewModel.TX++; } catch (Exception ex) { client.SendAsync("SC931" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//当前工作表 else if (SYSAPI == "SC832") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC832" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.SYSlog); MainWindowViewModel.TX++; } catch (Exception ex) { client.SendAsync("SC932" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//当前细节信息 else if (SYSAPI == "SC833") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 string sql_script = "select * from Dyelot where WorkOrder = '" + MainWindowViewModel.WorkNumder + "'"; DataTable dt = SQLiteHelpers.ExecuteDataSet(sql_script, null).Tables[0]; //转换 SQLiteHelpers.Close(); //关闭连接 client.SendAsync("SC833" + "[" + MainWindowViewModel.S01 + "]" + dt.ToJsonString()); MainWindowViewModel.TX++; } catch (Exception ex) { client.SendAsync("SC933" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//当前领料单 else if (SYSAPI == "SC851") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC851" + "[" + MainWindowViewModel.S01 + "]" + JsonConvert.SerializeObject(MainWindowViewModel.dt_d));//数字开关信息 } catch (Exception ex) { client.SendAsync("SC951" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//数字开关表 else if (SYSAPI == "SC852") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC852" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_a.ToJsonString());//寄存器信息 } catch (Exception ex) { client.SendAsync("SC952" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//寄存器表 else if (SYSAPI == "SC853") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC853" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_m.ToJsonString());//缓存信息 } catch (Exception ex) { client.SendAsync("SC953" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//缓存表 else if (SYSAPI == "SC854") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC854" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_ParameterSet.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC954" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//程序设置表 else if (SYSAPI == "SC855") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { client.SendAsync("SC855" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_SysSet.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC955" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//系统设置表 else if (SYSAPI == "SC861") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_861; dat_861 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); Dictionary datagrid_v = new Dictionary();//缓存函数 datagrid_v.Add("Value", dat_861.GetValue("Value")); SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 SQLiteHelpers.Update("Parameters", datagrid_v, "ParameterID ='" + dat_861.GetValue("ID") + "'", null);//更新 MainWindowViewModel.dt_ParameterSet = SQLiteHelpers.ExecuteDataSet("select * from Parameters order by ParameterID asc", null).Tables[0]; SQLiteHelpers.Close();//关闭数据库 client.SendAsync("SC854" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_ParameterSet.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } catch (Exception ex) { client.SendAsync("SC961" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//修改软件设置 else if (SYSAPI == "SC862") { if (SYSKEY == MainWindowViewModel.SYSKEY) { try { Dictionary dat_862; dat_862 = SerializeConvert.JsonDeserializeFromString>(SYSDAT); if (((IList)Prohibit).Contains(dat_862.GetValue("ID")))//是否允许操作 { client.SendAsync("SC980" + "[" + MainWindowViewModel.S01 + "]" + "Settings that are not allowed to be modified remotely"); } else { Dictionary datagrid_v = new Dictionary();//缓存函数 datagrid_v.Add("Value", dat_862.GetValue("Value")); SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 SQLiteHelpers.Update("System", datagrid_v, "ParameterID ='" + dat_862.GetValue("ID") + "'", null);//更新 MainWindowViewModel.dt_SysSet = SQLiteHelpers.ExecuteDataSet("select * from System order by ParameterID asc", null).Tables[0]; SQLiteHelpers.Close();//关闭数据库 client.SendAsync("SC855" + "[" + MainWindowViewModel.S01 + "]" + MainWindowViewModel.dt_SysSet.ToJsonString());//缓存信息 APILog.DBlog(client.IP, SYSKEY, SYSAPI, SYSDAT);//记录指令 } } catch (Exception ex) { client.SendAsync("SC962" + "[" + MainWindowViewModel.S01 + "]" + ex); } } else { client.SendAsync("SC999"); } }//修改系统 return EasyTask.CompletedTask; }; await service.SetupAsync(new TouchSocketConfig()//载入配置 .SetMaxBufferSize(1024 * 1024) .SetMinBufferSize(1024 * 64) .SetListenIPHosts(new IPHost[] { new IPHost("tcp://127.0.0.1:7789"), new IPHost(7790) })//同时监听两个地址 .ConfigureContainer(a =>//容器的配置顺序应该在最前面 { //a.AddConsoleLogger();//添加一个控制台日志注入(注意:在maui中控制台日志不可用) }) .ConfigurePlugins(a => { //a.Add(); }) ); await service.StartAsync();//启动 LogGing.LogGingDATA("800SREVER:START"); } } class MyTcpService : TcpService { protected override MyTcpSessionClient NewClient() { return new MyTcpSessionClient(); } } class MyTcpSessionClient : TcpSessionClient { internal void SetDataHandlingAdapter(SingleStreamDataHandlingAdapter adapter) { base.SetAdapter(adapter); } } /// /// 此插件实现,按照不同端口,使用不同适配器。 /// /// 7789端口:使用"**"结尾的数据 /// 7790端口:使用"##"结尾的数据 /// /// internal class DifferentProtocolPlugin : PluginBase, ITcpConnectingPlugin, ITcpReceivedPlugin { public async Task OnTcpConnecting(ITcpSession client, ConnectingEventArgs e) { if (client is MyTcpSessionClient sessionClient) { if (sessionClient.ServicePort == 7789) { sessionClient.SetDataHandlingAdapter(new TerminatorPackageAdapter("**")); } else { sessionClient.SetDataHandlingAdapter(new TerminatorPackageAdapter("##")); } } await e.InvokeNext(); } public async Task OnTcpReceived(ITcpSession client, ReceivedDataEventArgs e) { //如果是自定义适配器,此处解析时,可以判断e.RequestInfo的类型 if (client is ITcpSessionClient sessionClient) { sessionClient.Logger.Info($"{sessionClient.GetIPPort()}收到数据,服务器端口:{sessionClient.ServicePort},数据:{e.ByteBlock}"); } await e.InvokeNext(); } } }