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++;
}
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++; }
}
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