using DataEntity.Share; using DataEntity.Sockets.Base; using HxEnum; using HxSocketImplement.Sockets.HxService; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using XCommon.Event; using XCommon.Log; using XImagingXhandler.XDAL; using static HxEnum.OperationTypeEnum; using static HxEnum.SocketS.InfoTypeEnum; using static HxEnum.StateEnum; namespace HxSocketImplement.Sockets { /// /// 内部服务Socket 服务端 /// public class SocketInteriorService { #region 默认参数 private static Thread threadReceive = null; // 接收客户端发送消息的线程 private static Thread threadWatch = null; // 负责监听客户端的线程 public static Socket socketWatch = null; // 负责监听客户端的套接字 public static Socket clientConnection = null; // 负责和客户端通信的套接字 // 使用令牌取消线程: 从.NET 5 开始,以下 API(Thread.Abort) 被标记为过时 使用CancellationToken中止工作单元的处理,而不是调用Thread.Abort static CancellationTokenSource cts = null; // wdy //public static System.Windows.Forms.ListView listView = new System.Windows.Forms.ListView(); /// /// 实验状态 key:实验ID,value:线程启停控制 /// public static Dictionary dicManualResetEvent = new Dictionary(); #endregion #region 开启服务端监听 /// /// 开启服务端监听 /// public static void OpenService() { cts = new CancellationTokenSource(); socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // AddressFamily地址类型,SocketType套接字类型,ProtocolType协议类型; IPAddress iP = IPAddress.Parse(Shared.SoftwareInformation.ip); // 创建对象端口 (这里为ip类型地址) IPEndPoint point = new IPEndPoint(iP, Convert.ToInt32(Shared.SoftwareInformation.port)); // 初始化IP及端口号 socketWatch.Bind(point); // 绑定端口 socketWatch.Listen(20); // 开启监听(参数代表排队等待连接的最大数量,不包含已连接数量)0表示无限 threadWatch = new Thread(Listen); //创建监听线程 threadWatch.IsBackground = true; threadWatch.Start(); } #endregion #region 监听 /// /// 监听 /// public static void Listen() { try { // 持续不断监听客户端发来的请求 while (!cts.IsCancellationRequested) { clientConnection = socketWatch.Accept(); // wdy //AddListView(new ListViewModel //{ // Type = "客-》连接", // Port = clientConnection.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = "", // createtime = DateTime.Now.ToString() //}); // 创建一个通信线程 ParameterizedThreadStart pts = new ParameterizedThreadStart(Received); threadReceive = new Thread(pts); threadReceive.IsBackground = true; threadReceive.Start(clientConnection); } } catch (Exception ex) { LoggerSocketHelper.ErrorLog($"监听Listen失败:{ex.Message}"); } } #endregion #region 服务器端不停的接收客户端发来的消息 /// /// 服务器端不停的接收客户端发来的消息 /// /// public static void Received(object socket) { try { //客户端连接服务器成功后,服务器接收客户端发送的消息 Socket socketSend = socket as Socket; while (!cts.IsCancellationRequested) { object lockObject = new object(); lock (lockObject) { //创建一个内存缓冲区 其大小为1024*1024字节 即3M byte[] buffer = new byte[1024 * 1024 * 3]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer); if (len == 0) { // wdy //AddListView(new ListViewModel //{ // Type = "客-》断开", // Port = socketSend.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = "", // createtime = DateTime.Now.ToString() //}); break; } string msg = Encoding.UTF8.GetString(buffer, 0, len); if (!string.IsNullOrWhiteSpace(msg)) { var msgList = msg.Split(new string[] { CommonParameter.SpecifiedDisplay }, StringSplitOptions.None); foreach (var item in msgList) { var receiveData = JsonConvert.DeserializeObject(item); if (receiveData != null && !string.IsNullOrWhiteSpace(receiveData.method)) { #region Del //AddListView(new ListViewModel //{ // Type = "接收-》客-》消息", // Port = socketSend.RemoteEndPoint.ToString(), // receive_parameter = msg, // send_parameter = "", // createtime = DateTime.Now.ToString() //}); #endregion //HxClientResponseObject hxClientResponseObject = new HxClientResponseObject(); //hxClientResponseObject.ResponseBase = new HxResponseBase //{ // message_id = receiveData.message_id, // message_type = receiveData.message_type, // method = receiveData.method, // equipment_id = receiveData.equipment_id, // workflow_id = receiveData.workflow_id, // experiment_id = receiveData.experiment_id, // data = null, // method_status = EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed), // timestamp = DateTime.Now.ToString(), // error = null, //}; LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(receiveData.method)}指令【开始执行】------"); #region Del //switch (EnumManagement.ToEnum(receiveData.method)) //{ // case InfoTypeEnum_Enum.SendHeartbeatConnect: //发送心跳连接(接收到客户端发来的消息) // #region 回复消息 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // Task.Run(() => // // { // // //to do // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.SendHeartbeatConnect)}指令【成功】------"); // // }); // //} // #endregion // break; // case InfoTypeEnum_Enum.SendServiceData: //客户端向服务端发送数据(接收到客户端发来的消息) // #region 回复消息+处理逻辑 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // Task.Run(() => // // { // // //to do // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.SendServiceData)}指令【成功】------"); // // }); // //} // #endregion // break; // case InfoTypeEnum_Enum.SuspendExperiment: //暂停实验(接收到客户端发来的消息) // #region 回复消息+暂停实验 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // //Task.Run(() => // // //{ // // // ResultHandle.instructCommonMethodSendModelByError = new InstructCommonMethodSendModel(); // // // ResultHandle.instructCommonMethodSendModelByError.SendData = new HxSendBase(); // // // EventBind.OperMark = new NodeOperationTypeEnum();// ExpOperationTypeEnum.ExpOperationTypeBEnum; // // // Upt_DicTestState(scfm.SendData.experiment_id, ProcessTypeColorEnum_Equipment.OrangeColor, InfoTypeEnum_Enum.SuspendExperiment, ProcessLogicTypeEnum_Equipment.NoType); // // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.SuspendExperiment)}指令【成功】------"); // // //}); // //} // #endregion // break; // case InfoTypeEnum_Enum.ContinueExperiment: //继续(跳过)实验 // #region 回复消息+继续实验 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // //Task.Run(() => // // //{ // // // ResultHandle.instructCommonMethodSendModelByError = new InstructCommonMethodSendModel(); // // // ResultHandle.instructCommonMethodSendModelByError.SendData = new HxSendBase(); // // // EventBind.OperMark = new NodeOperationTypeEnum();// ExpOperationTypeEnum.ExpOperationTypeBEnum; // // // ErrorStateDB.Continue(scfm.SendData.experiment_id, StatusEnum.StatusCEnum, NodeOperationTypeEnum.Continue); // // // Upt_DicTestState(scfm.SendData.experiment_id, ProcessTypeColorEnum_Equipment.GreenColor, InfoTypeEnum_Enum.ContinueExperiment, ProcessLogicTypeEnum_Equipment.NoType); // // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.ContinueExperiment)}指令【成功】------"); // // //}); // //} // #endregion // break; // case InfoTypeEnum_Enum.SysErrorRetry: //系统报错后重试 // #region 系统报错后重试 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // //Task.Run(() => // // //{ // // // //新的参数重新赋值 // // // ResultHandle.instructCommonMethodSendModelByError = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(scfm.SendData.parameters)); // // // EventBind.OperMark = NodeOperationTypeEnum.Retry; // // // ErrorStateDB.Continue(scfm.SendData.experiment_id, StatusEnum.StatusCEnum, NodeOperationTypeEnum.Retry); // // // LoggerSocketHelper.DebugLog("运行方法【InfoTypeEnum_Enum.SysErrorRetry】重试参数" + JsonConvert.SerializeObject(scfm.SendData.parameters)); // // // Upt_DicTestState(scfm.SendData.experiment_id, ProcessTypeColorEnum_Equipment.GreenColor, InfoTypeEnum_Enum.ContinueExperiment, ProcessLogicTypeEnum_Equipment.NoType); // // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.SysErrorRetry)}指令【成功】------"); // // //}); // //} // #endregion // break; // case InfoTypeEnum_Enum.TerminationExperiment: //终止实验 // #region 回复消息+终止实验 // //if (ReplyClientMsg(socketSend, hxClientResponseObject)) // //{ // // //Task.Run(() => // // //{ // // // ResultHandle.instructCommonMethodSendModelByError = new InstructCommonMethodSendModel(); // // // ResultHandle.instructCommonMethodSendModelByError.SendData = new HxSendBase(); // // // EventBind.OperMark = new NodeOperationTypeEnum();// ExpOperationTypeEnum.ExpOperationTypeBEnum; // // // ErrorStateDB.Continue(scfm.SendData.experiment_id, StatusEnum.StatusFEnum, NodeOperationTypeEnum.Cancel); // // // Upt_DicTestState(scfm.SendData.experiment_id, ProcessTypeColorEnum_Equipment.BlueColor, InfoTypeEnum_Enum.TerminationExperiment, ProcessLogicTypeEnum_Equipment.NoType); // // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.TerminationExperiment)}指令【成功】------"); // // //}); // //} // #endregion // break; // case InfoTypeEnum_Enum.StartExperiment: //启动实验(接收到客户端发来的消息) // #region 回复消息+启动实验 // //int count = dicManualResetEvent.Where(m => m.Key == scfm.SendData.experiment_id).Count(); // //if (count == 0) // //{ // // Task.Run(() => // // { // // dicManualResetEvent.Add(scfm.SendData.experiment_id, new ManualResetEvent(true)); // // var resultExp = InstructMethod.ImplementFlow(scfm.SendData.experiment_id); // // if (resultExp) // // { // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.StartExperiment)}指令【成功】------"); // // ReplyClientMsg(socketSend, hxClientResponseObject); // // } // // else // // { // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.StartExperiment)}指令【失败】------"); // // } // // }); // //} // //else // //{ // // Upt_DicTestState(scfm.SendData.experiment_id, ProcessTypeColorEnum_Equipment.GreenColor, InfoTypeEnum_Enum.ContinueExperiment, ProcessLogicTypeEnum_Equipment.NoType); // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.StartExperiment)}指令(统计为0)【成功】------"); // //} // #endregion // break; // case InfoTypeEnum_Enum.DebuggingBySocket: //客户端Socket调试 // #region 客户端Socket调试 // //Task.Run(() => // //{ // // var model = JsonConvert.DeserializeObject(scfm.SendData.parameters.ToString()); // // var resultInstructCommonMethod = ResultHandle.InstructCommonMethod(model); // // string debuggingMsg = $"{EnumManagement.GetFieldText(InfoTypeEnum_Enum.DebuggingBySocket)}指令"; // // if (resultInstructCommonMethod != null && resultInstructCommonMethod.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【成功】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // else // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【失败】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // ReplyClientMsg(socketSend, hxClientResponseObject); // //}); // #endregion // break; // case InfoTypeEnum_Enum.DebuggingByModbus: //客户端Modbus调试 // #region 客户端Modbus调试 // //Task.Run(() => // //{ // // var model = JsonConvert.DeserializeObject(scfm.SendData.parameters.ToString()); // // int countDebuggingByModbus = dicManualResetEvent.Where(m => m.Key == scfm.SendData.experiment_id).Count(); // // if (countDebuggingByModbus == 0) // // { // // dicManualResetEvent.Add(scfm.SendData.experiment_id, new ManualResetEvent(true)); // // } // // var resultInstructCommonMethod = ResultHandle.InstructCommonMethod(model); // // string debuggingMsg = $"{EnumManagement.GetFieldText(InfoTypeEnum_Enum.DebuggingByModbus)}指令"; // // if (resultInstructCommonMethod != null && resultInstructCommonMethod.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【成功】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // else // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【失败】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // ReplyClientMsg(socketSend, hxClientResponseObject); // //}); // #endregion // break; // case InfoTypeEnum_Enum.DebuggingBySocketNonstandard: //客户端SocketNonstandard调试 // #region 客户端SocketNonstandard调试 // //Task.Run(() => // //{ // // var model = JsonConvert.DeserializeObject(scfm.SendData.parameters.ToString()); // // var resultInstructCommonMethod = ResultHandle.InstructCommonMethod(model); // // string debuggingMsg = $"{EnumManagement.GetFieldText(InfoTypeEnum_Enum.DebuggingBySocketNonstandard)}指令"; // // if (resultInstructCommonMethod != null && resultInstructCommonMethod.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【成功】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // else // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【失败】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // ReplyClientMsg(socketSend, hxClientResponseObject); // //}); // #endregion // break; // case InfoTypeEnum_Enum.DebuggingBySerialPort: //客户端DebuggingBySerialPort调试 // #region 客户端DebuggingBySerialPort调试 // //Task.Run(() => // //{ // // var model = JsonConvert.DeserializeObject(scfm.SendData.parameters.ToString()); // // var resultInstructCommonMethod = ResultHandle.InstructCommonMethod(model); // // string debuggingMsg = $"{EnumManagement.GetFieldText(InfoTypeEnum_Enum.DebuggingBySerialPort)}指令"; // // if (resultInstructCommonMethod != null && resultInstructCommonMethod.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【成功】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // else // // { // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(resultInstructCommonMethod.msg) }; // // LoggerSocketHelper.DebugLog($"------{debuggingMsg}【失败】,返回内容:{JsonConvert.SerializeObject(resultInstructCommonMethod)}{",发送参数:" + JsonConvert.SerializeObject(scfm)}------"); // // } // // ReplyClientMsg(socketSend, hxClientResponseObject); // //}); // #endregion // break; // case InfoTypeEnum_Enum.CheckDeviceConnectState: //检查设备连接状态 // #region 检查设备连接状态 // //Task.Run(() => // //{ // // var getCheckDeviceConnectStateModel = EquConnect.GetCheckDeviceConnectState(); // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(getCheckDeviceConnectStateModel) }; // // if (ReplyClientMsg(socketSend, hxClientResponseObject)) // // { // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.CheckDeviceConnectState)}指令【成功】------"); // // } // //}); // #endregion // break; // case InfoTypeEnum_Enum.EquipmentStatus: //设备状态(是否忙碌 1空闲、2忙碌) // #region 检查设备连接状态 // //Task.Run(() => // //{ // // var getEquipmentStatus = SocketParameterModel.Dic_EquipmentStatus; // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(getEquipmentStatus) }; // // if (ReplyClientMsg(socketSend, hxClientResponseObject)) // // { // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.EquipmentStatus)}指令【成功】------"); // // } // //}); // #endregion // break; // case InfoTypeEnum_Enum.ServiceConnect: //服务连接 // #region 服务连接 // //Task.Run(() => // //{ // // var getServiceConnect = EquConnect.ConnectService(); // // hxClientResponseObject.ResponseBase.dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(getServiceConnect) }; // // if (ReplyClientMsg(socketSend, hxClientResponseObject)) // // { // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.ServiceConnect)}指令【成功】------"); // // } // //}); // #endregion // break; // case InfoTypeEnum_Enum.EquipmentPointSyncData: //设备点位数据同步 // #region 设备点位数据同步 // //Task.Run(() => // //{ // // if (ReplyClientMsg(socketSend, hxClientResponseObject)) // // { // // #region 执行命令 // // if (!string.IsNullOrWhiteSpace(scfm.SendData.experiment_id)) // // { // // var deviceConfigModel = new DeviceConfigBLL().GetInfodById(scfm.SendData.experiment_id); // // if (deviceConfigModel != null) // // { // // //InstructCommonMethodSendModel instructCommonMethodSendModel = HxSocketParameterService.GetInstructCommonMethodSendModel(new InstructCommonMethodSendModel() // // //{ // // // EquipmentType = deviceConfigModel.Type, // // // Ip = deviceConfigModel.Ip, // // // Port = Convert.ToInt32(deviceConfigModel.Port), // // // EquipmentId = deviceConfigModel.EquipmentId, // // // SendData = new HxSendBase { experiment_id = HxSockServiceExecute.InstrunctionId(), parameters = "{}", method = "TrySyncAreas" }, //这个方法要写死,不然,前端也不知道传哪个。这个驱动接口他们都是写死的。 // // //}); // // //var resultEquipmentPointSyncData = ResultHandle.InstructCommonMethod(instructCommonMethodSendModel); // // //if (resultEquipmentPointSyncData != null && resultEquipmentPointSyncData.status == EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed)) // // { // // var areasList = new Robot_AreasBLL().GetAreasALL(); // // if (areasList != null && areasList.Count > 0) // // { // // foreach (var m in areasList) // // { // // var deviceconfigPointList = new DeviceConfigPointBLL().GetDeviceconfigPoint(new DeviceconfigPointModelSearchModel { DeviceconfigId = deviceConfigModel.Id, PointName = m.AreaName }); // // if (deviceconfigPointList == null || deviceconfigPointList.Count <= 0) // // { // // DeviceconfigPointModel deviceconfigPointModel = new DeviceconfigPointModel(); // // deviceconfigPointModel.Id = Guid.NewGuid().ToString(); // // deviceconfigPointModel.ProjectId = SharedServiceModel.ServiceConfigModel.Id; // // deviceconfigPointModel.DeviceconfigId = deviceConfigModel.Id; // // deviceconfigPointModel.Name = m.Description; // // deviceconfigPointModel.PointName = m.AreaName; // // deviceconfigPointModel.Remark = "数据同步" + DateTime.Now; // // deviceconfigPointModel.CreateTime = DateTime.Now; // // deviceconfigPointModel.CreatName = "系统同步"; // // var addResult = new DeviceConfigPointBLL().Add(deviceconfigPointModel); // // LoggerSocketHelper.DebugLog($"------{EnumManagement.GetFieldText(InfoTypeEnum_Enum.EquipmentPointSyncData)}指令【成功】------"); // // } // // } // // } // // } // // } // // } // // #endregion // // } // //}); // #endregion // break; // default: // break; //} #endregion } } } } } } catch (Exception ex) { LoggerSocketHelper.ErrorLog($"Received 出错:{ex.Message}" + ex); } } #endregion #region 修改实验状态字典 /// /// 修改实验状态字典 /// /// 实验ID /// 处理类型颜色枚举(0不处理,1橙色,2蓝色,3绿色,4红色) /// 实验状态 /// 处理类型(0不处理,1处理) public static void Upt_DicTestState(string expId, ProcessTypeColorEnum_Equipment processType, InfoTypeEnum_Enum infotypeEnumType, ProcessLogicTypeEnum_Equipment processLogicType) { LoggerSocketHelper.DebugLog($"========================== 实验ID:{expId}状态更改:{EnumManagement.GetFieldText(infotypeEnumType)}, 处理类型颜色枚举={EnumManagement.GetFieldText(processType)}, 处理类型={EnumManagement.GetFieldText(processLogicType)} ========================== "); int count = dicManualResetEvent.Where(m => m.Key == expId).Count(); if (count == 0) { dicManualResetEvent.Add(expId, new ManualResetEvent(true)); } #region 三色灯 ProcessTypeColorSet(processType); #endregion if (EnumManagement.GetEnumValue(infotypeEnumType) == EnumManagement.GetEnumValue(InfoTypeEnum_Enum.SuspendExperiment) || EnumManagement.GetEnumValue(infotypeEnumType) == EnumManagement.GetEnumValue(InfoTypeEnum_Enum.TerminationExperiment)) //暂停+终止 { if (EnumManagement.GetEnumValue(infotypeEnumType) == EnumManagement.GetEnumValue(InfoTypeEnum_Enum.SuspendExperiment)) //暂停 { if (processLogicType == ProcessLogicTypeEnum_Equipment.YesType) { //暂停 业务逻辑(比如蜂鸣器开打,业务逻辑也可以写在三色灯里面) } } else if (EnumManagement.GetEnumValue(infotypeEnumType) == EnumManagement.GetEnumValue(InfoTypeEnum_Enum.TerminationExperiment)) //终止 { if (processLogicType == ProcessLogicTypeEnum_Equipment.YesType) { //终止 业务逻辑(比如蜂鸣器开打,业务逻辑也可以写在三色灯里面) } } dicManualResetEvent[expId].Reset(); //堵塞线程 } else if (EnumManagement.GetEnumValue(infotypeEnumType) == EnumManagement.GetEnumValue(InfoTypeEnum_Enum.ContinueExperiment)) //继续 { if (processLogicType == ProcessLogicTypeEnum_Equipment.YesType) { //继续 业务逻辑(比如蜂鸣器关闭,业务逻辑也可以写在三色灯里面) } dicManualResetEvent[expId].Set(); //继续线程 } } /// /// 处理类型颜色枚举 /// /// 颜色枚举(0不处理,1橙色,2蓝色,3绿色,4红色) private static void ProcessTypeColorSet(ProcessTypeColorEnum_Equipment processType) { //#region 调用底层控制(DEMO) //InstructCommonMethodSendModel instructCommonMethodSendModel = HxSocketParameterService.GetInstructCommonMethodSendModel(new InstructCommonMethodSendModel() //{ // EquipmentType = getDeviceConfigModel.Type.Trim(), // Ip = getDeviceConfigModel.Ip.Trim(), // Port = Convert.ToInt32(getDeviceConfigModel.Port.Trim()), // EquipmentId = getDeviceConfigModel.EquipmentId.Trim(), // VirtualConnectionState = getDeviceConfigModel.VirtualConnectionState, // CommunicateType = getDeviceConfigModel.CommunicateType, // SendData = new HxSendBase { experiment_id = HxSockServiceExecute.InstrunctionId(), parameters = dictionaryList, method = getDeviceConfigMethod.ParameterName }, //}); ////var model = JsonConvert.DeserializeObject(scfm.SendData.parameters.ToString()); //var resultInstructCommonMethod = ResultHandle.InstructCommonMethod(instructCommonMethodSendModel); //#endregion #region 三色灯 switch (EnumManagement.ToEnum(processType.ToString())) { case ProcessTypeColorEnum_Equipment.OrangeColor: // 状态5 暂停 黄色 //MethodAction.Instance.StatusLamp(5); //CommonBll.StatusLamp(5, isSimulator); break; case ProcessTypeColorEnum_Equipment.BlueColor: // 状态1 链接成功 蓝亮 //MethodAction.Instance.StatusLamp(1); break; case ProcessTypeColorEnum_Equipment.GreenColor: // 状态4 运行 绿色 //MethodAction.Instance.StatusLamp(4); break; case ProcessTypeColorEnum_Equipment.RedColor: // 状态6 报错/急停 红闪/蜂鸣5S //MethodAction.Instance.StatusLamp(6); break; default: break; } #endregion } #endregion #region 发送信息 /// /// 发送信息 /// /// 内容 /// public static bool SendMessage(HxClientResponseObject model) { if (clientConnection != null && clientConnection.Connected) { byte[] sendMsg = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(model.ResponseBase) + CommonParameter.SpecifiedDisplay); var result = clientConnection.Send(sendMsg); if (result > 0) { // wdy //AddListView(new ListViewModel //{ // Type = "服-》发送信息", // Port = clientConnection.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = JsonConvert.SerializeObject(model), // createtime = DateTime.Now.ToString() //}); LoggerSocketHelper.DebugLog("运行方法【SendMessage】消息送出成功"); return true; } else { // wdy //AddListView(new ListViewModel //{ // Type = "服-》发送信息失败", // Port = clientConnection.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = JsonConvert.SerializeObject(model), // createtime = DateTime.Now.ToString() //}); LoggerSocketHelper.DebugLog("运行方法【SendMessage】消息未送出"); return false; } } else { LoggerSocketHelper.DebugLog("运行方法【SendMessage】断开"); return false; } } #endregion #region 停止服务端监听 /// /// 停止服务端监听 /// /// public static bool BreakConnect() { if (socketWatch != null) { // wdy //AddListView(new ListViewModel //{ // Type = "服-》停止监听", // Port = $"{SharedServiceModel.ServiceConfigModel.Ip}:{SharedServiceModel.ServiceConfigModel.Port}", // receive_parameter = "", // send_parameter = "", // createtime = DateTime.Now.ToString() //}); cts.Cancel();//终止线程 if (clientConnection != null && clientConnection.Connected) { clientConnection.Shutdown(SocketShutdown.Both); // 禁用发送和接收 clientConnection.Close(); // 关闭同客户端的连接 } socketWatch.Close(); // 关闭监听套节字 return true; } else { // wdy //AddListView(new ListViewModel //{ // Type = "服-》停止监听", // Port = clientConnection.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = "网络未连接", // createtime = DateTime.Now.ToString() //}); } return false; } #endregion #region 添加列表数据 /// /// 添加列表数据 wdy /// /// /// //public static void AddListView(ListViewModel lvm) //{ // int noCount = listView.Items.Count; // ListViewItem lvi = new ListViewItem((noCount <= 0 ? noCount + 1 : noCount + 1).ToString()); // lvi.SubItems.Add(lvm.Type); // lvi.SubItems.Add(lvm.Port); // lvi.SubItems.Add(lvm.receive_parameter); // lvi.SubItems.Add(lvm.send_parameter); // lvi.SubItems.Add(lvm.createtime); // listView.Items.Add(lvi); // LoggerSocketHelper.DebugLog("服务端日志,添加显示到列表数据:" + JsonConvert.SerializeObject(lvm)); //} #endregion #region 回复客户端信息 /// /// 回复客户端信息 /// /// socket /// 返回数据 /// public static bool ReplyClientMsg(Socket socketSend, HxClientResponseObject hxClientResponseObject) { #region 回复消息 string sendStr = JsonConvert.SerializeObject(hxClientResponseObject.ResponseBase) + CommonParameter.SpecifiedDisplay; byte[] sendMsg = Encoding.UTF8.GetBytes(sendStr); int result = socketSend.Send(sendMsg); if (result > 0) { // wdy //SocketInteriorService.AddListView(new ListViewModel //{ // Type = "发送-》服-》消息", // Port = socketSend.RemoteEndPoint.ToString(), // receive_parameter = "", // send_parameter = sendStr, // createtime = DateTime.Now.ToString() //}); return true; } #endregion return false; } #endregion #region 发送前端信息提示 /// /// 发送前端信息提示 /// /// 流程ID /// 方法名称 /// 方法状态 /// 消息内容 /// public static bool SendMessagePrompt(string expId, string methodName, StateEnum_Equipment methodStatus, DealWithType_Enum dealwithtype, string msgContent) { InstructCommonMethodSendModel instructCommonMethodSendModel = new InstructCommonMethodSendModel(); instructCommonMethodSendModel.SendData = new HxSendBase { experiment_id = expId }; HxClientResponseObject hxClientResponseObject = new HxClientResponseObject(); hxClientResponseObject.ResponseBase = new HxResponseBase { message_id = expId, message_type = 2, method = methodName, equipment_id = "", workflow_id = "workflow_id_" + expId + "_" + methodName, experiment_id = "experiment_id_" + expId, dataResult = new DataResult { ResultJson = JsonConvert.SerializeObject(instructCommonMethodSendModel) }, method_status = EnumManagement.GetEnumValue(methodStatus),// EnumManagement.GetEnumValue(StateEnum.StateEnum_Equipment.Completed), timestamp = DateTime.Now.ToString(), error = new ErrorResult { error_text = msgContent, dealwithtype = EnumManagement.GetEnumValue(dealwithtype).ToString() }, }; var sendData = SocketInteriorService.SendMessage(hxClientResponseObject); return sendData; } #endregion } }