using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; using HDL_ON.DAL; using HDL_ON.DAL.Net; using HDL_ON.Entity; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Shared; using Shared.Net; namespace HDL_ON { public partial class Control { public DateTime LatestDateTime = DateTime.Now; /// /// 控制失败次数 /// public static int controlLostCount = 0; /// /// 所有微信对一端口的控制都会放到这个集合里 /// private static List controlList = new List(50); /// /// 发送数据,不需要等待回复 /// public static void ControlBytesSend(Command command, byte subnetID, byte deviceID, byte[] gatewayBytes, int sendCount = 3, System.Net.IPEndPoint ipEndpoint = null) { Control control = new Control(); control.Send(new Target() { IPEndPoint = ipEndpoint == null ? CommonPage.EndPoint : ipEndpoint, Command = command, SubnetID = subnetID, DeviceID = deviceID, AddData = gatewayBytes, }, sendCount, false); } public static byte[] ReadGatewayIPAddress() { Control control = new Control(); control.ReadGatewayIP(); return control.UsefulBytes; } static DAL.Net.TcpListener tcpListener; /// /// 000E 搜索回复 /// /// static void ReceiveReadRemark(byte[] usefullBytes) { try { //账号没登录不回复 if (MainPage.LoginUser == null || !MainPage.LoginUser.IsLogin) { return; } if (tcpListener == null) { tcpListener = new DAL.Net.TcpListener(); tcpListener.OpenServer(8586); } //if (!CommonPage.isHttpListenerStart) //{ // //数据接收端口没打开,不回复 // CommonPage.InitHttpListener(); //} var sendStr = MainPage.LoginUser.accountString; if (usefullBytes.Length == 0) { SenRemark(sendStr); } else { bool isExit = false; for (int i = 0, len = usefullBytes.Length; i < len; i++) { if (i % 2 == 0) { if ((usefullBytes[i] & 0xFF) == 252 && (usefullBytes[i + 1] & 0xFF) == 252) { isExit = true; break; } } } if (!isExit) { //不存在,代表没收到本机的发送,继续回复 SenRemark(sendStr); } } } catch (Exception ex) { Console.WriteLine($"回复bus搜索异常 : {ex.Message}"); } } /// /// 000F回复备注 /// /// static void SenRemark(string sendStr) { byte[] sendBytes = new byte[20]; byte[] b1 = CommonPage.MyEncodingGB2312.GetBytes(sendStr); //Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1); Array.Copy(b1, 0, sendBytes, 0, 20 < b1.Length ? 20 : b1.Length); var control = new Control(); control.Send(new Target() { IPEndPoint = CommonPage.EndPoint, Command = Command.ReadRemarkACK, SubnetID = 0xFF, DeviceID = 0xFF, AddData = sendBytes, }, 0, false); //设置当前发送指令方式为:任何情况下本地发送、不限制、不加密明文发送 } /// /// 处理接收回来的数据 /// /// 源子网号 /// 源设备号 /// 操作码 /// 有用的数据 /// 源网络套接字 public static void ManagerReceive(byte subnetID, byte deviceID, Command command, byte targetSubnetID, byte targetDeviceID, byte[] usefulBytes, System.Net.EndPoint remoteEndPoint) { if (((System.Net.IPEndPoint)remoteEndPoint).Port == 6688) { for (int i = 0; i < controlList.Count; i++) { try { var control = controlList[i]; control.LatestDateTime = DateTime.Now; control.UsefulBytes = usefulBytes;// control.run(); } catch (Exception ex) { Console.WriteLine($"control error : {ex.Message}"); } } } try { string receiveFlag = string.Format("{0},{1},{2},", subnetID, deviceID, (int)command); switch (command) { case Command.SetSingleLightACK: receiveFlag += string.Format("{0}", usefulBytes[0]); break; case Command.SetLogicLoopColorACK: receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]); break; case Command.ReadLogicLoopColorACK: case Command.ReadACModeACK: case Command.SetACModeACK: case Command.ReadFloorHeatACK: case Command.SetFloorHeatACK: receiveFlag += string.Format("{0}", usefulBytes[0]); break; case Command.ReadRemark: //buspro 读备注回复 Console.WriteLine("buspro 读备注回复"); ReceiveReadRemark(usefulBytes); break; case Command.ReadLightAllLoopBrightnessACK: receiveFlag += ""; break; //case Command.YIPanelDeviceInofACK: // for (int i = 0; i < 4; i++) // { // receiveFlag += string.Format("{0}", usefulBytes[i]); // } // break; //case Command.ReadDoorLockSceneObjACK: // receiveFlag += string.Format("{0},{1},{2},{3},{4}", usefulBytes[0], usefulBytes[1], usefulBytes[2], usefulBytes[3], usefulBytes[4]); // break; //case Command.ReadDoorLockClockACK: //case Command.CreatConnectionACK: // receiveFlag += string.Format("{0}", usefulBytes[0]); // break; ////门锁,BroadcastDoorLockStateAndAlarm ////广播门锁状态和报警, //case Command.BroadcastDoorLockStateAndAlarm://广播门锁状态和报警 // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.ReadDoorLockUseRemarkACK: //case Command.ReadSensorPushMessageACK: //case Command.SetSensorPushMessageACK: //case Command.ReadSensorScenceACK: //case Command.ReadAnalogACK: // receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]); // break; //case Command.SetSensorScenceACK: // receiveFlag += string.Format("{0},{1},{2}", usefulBytes[1], usefulBytes[2], usefulBytes[3]); // break; //case Command.SendRemoteInfoToServerACK: // for (int i = 1; i < 9; i++) // { // receiveFlag += string.Format("{0}", usefulBytes[i]); // } // break; //case Command.BroadcastDryContactStatus://由干接点广播出来的数据,程序不做回复。 // receiveFlag += string.Format("{0}", usefulBytes[0]); // break; //case Command.SetSceneACK: // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.SetSeriesACK: // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.SetCurtainModelStutasACK: //case Command.SetHotelCurtainACK: //case Command.DownloadInfraredACK: //case Command.SetSensorPushValuesACK: //case Command.ReadSensorPushValuesACK: // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.UpLoadInfraredACK: // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.SetCommonACK: //case Command.InfraredChannelControlACK: //case Command.Serverx_FH_CMD_ACK: //case Command.ReadSensorHistoryACK: //case Command.SetSensorAutomationTargetLevelEnableACK: //case Command.ReadSensorAutomationLevelTargetEnableACK: // receiveFlag += string.Format("{0}", usefulBytes[0]); // break; //case Command.ReadFoolHeatACK: //case Command.SetFoolHeatACK: //case Command.SetArmACK: //case Command.ReadArmACK: // receiveFlag += string.Format("{0}", usefulBytes[0]); // break; //case Command.ReadDeviceModulACK: //case Command.ReadGatewayACK: //case Command.ReadSecurityStatusACK: // receiveFlag = string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); // break; //case Command.UpdataLightDimmingTheLargestLevelACK: //case Command.UpdataLightDimmingMaximumOrMinimumACK: //case Command.WriteManageWirelessNetACK: //case Command.ReadGateWayModelInfoACK: //case Command.ReadGatewayServerIPACK: //case Command.SetGateWayModelInfoACK: //case Command.SetGateWayModelInternetInfoACK: //case Command.ReadDeviceMacACK: //case Command.SetDeviceSubnetIDACK: //case Command.PositioningEquipmentACK: //case Command.PositioningPanelACK: //case Command.GotoConfigModeACK: //case Command.CheckConfigSuccessACK: //case Command.SetACPanelACK: //case Command.ReadACPanelACK: //case Command.ReadTerrestriaHeatRemarkACK: //case Command.UpdateGatewayIpACK: //case Command.ReadWirelessPanelModeACK: //case Command.ReadDrycontactModeACK: //case Command.ReadACFloorHeatingSettingEquipmentACK: //case Command.SetACFloorHeatingSettingEquipmentACK: //case Command.Read43FloorHeatingSettingEquipmentACK: //case Command.Set43FloorHeatingSettingEquipmentACK: //case Command.READ_AIR_ALL_Parameter_ack: //case Command.Set_AIR_ALL_Parameter_ack: //case Command.ReadFloorHeatProbeACK: //case Command.ReadButtonKeyEnableACK: //case Command.UpdateLightDimmingLoopRemakeACK: //case Command.ReadMusicPanelSettingACK: //case Command.ReadMusicPanelEnableACK: //case Command.SetMusicPanelEnableACK: //case Command.SetMusicPanelSettingACK: //case Command.SetGatewayACK: //case Command.ReadGatewayProgrammingModeACK: //case Command.RED_HSFH_TOTAL_ACK: //case Command.RED_HSFH_INFORMATION_ACK: //case Command.RED_HSRM_TOTAL_ACK: //case Command.RED_HSRM_INFORMATION_ACK: //case Command.CLEAR_SYSTEM_HISTORY_ACK: //case Command.SetSensorTargetRemarkACK: //case Command.ReadSensorAutomationEnableListACK: //case Command.SetSensorAutomationEnableListACK: //case Command.SetSensorAutomationListIDACK: //case Command.ReadSensorAutomationListIDACK: //case Command.ReadSensorAutomationNameACK: //case Command.SetSensorAutomationNameACK: //case Command.Set_Floor_Heat_State_ack: //case Command.Read_Floor_Heat_State_ack: //case Command.Read_Air_Condition_Set_ack: //case Command.HornAlarmBroadcast: //case Command.ReadHornLoopCountACK: //case Command.UpdateHornLoopRemakeACK: //case Command.ReadPanelTempTypeACK: // receiveFlag += ""; // break; //case Command.ControlMusicModel1ACK: // receiveFlag += ""; // break; //case Command.ControlMusicModel2ACK: // for (int i = 1; i < usefulBytes.Length; i++) // { // if (usefulBytes[i + 1] == 44) // { // break; // } // receiveFlag += string.Format("{0},", usefulBytes[i]); // } // break; //case Command.Remote3thACK: // receiveFlag = string.Format("{0},", (int)command); // break; case Command.ReadDeviceLoopInfoACK: if (usefulBytes[0] == 1) { receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[2]); ; } else receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]); break; //case Command.SetDeviceLoopInfoACK: //case Command.InfraredControlACK: //case Command.SetSecurityByPassACK: //case Command.SetSensorAutomationDateTimeCycleACK: //case Command.ReadSensorAutomationDateTimeCycleACK: // receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]); // break; //case Command.UpdataRemakeACK: // break; //case Command.ReadWirelessPanelButtonKeyACK: //case Command.WriteWirelessPanelButtonKeyACK: //case Command.ReadDryContactStatusACK: case Command.InstructionPanelKeyACK: case Command.ReadInstructionPanelKeyACK: //case Command.ReadAnalogValueACK: //case Command.ReadSensorTargetRemarkACK: //case Command.SetHornTargetStateACK: //case Command.ReadHornTargetStateACK: receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[1]); break; //case Command.AssignedAddressACK: //case Command.UpdataCurtainModelRunTimeACK: //case Command.ReadCurtainStutasACK: //case Command.ReadPanleTempACK: //case Command.FreshAirReadACK: //case Command.FreshAirControlACK: //case Command.Set_Air_State_New_ack: //case Command.ReadHornHistoryACK: //case Command.ReadHornLoopsStatusACK: //case Command.ReadHornPushACK: //case Command.SetHornPushACK: //case Command.ReadHornLoopAlarmACK: //case Command.SetHornTargetEnableACK: //case Command.ReadHornTargetEnableACK: // receiveFlag += string.Format("{0}", usefulBytes[0]); // break; //case Command.RemoteFirstACK: // for (int i = 1; i < 1 + 28; i++) // { // receiveFlag += string.Format("{0}", usefulBytes[i]); // } // break; //case Command.RemoteSecoudACK: // for (int i = 0; i < 7; i++) // { // receiveFlag += string.Format("{0}", usefulBytes[i]); // } // break; default: break; } //System.MainPage.WriteLog ("接收到数据:" + receiveFlag); for (int i = 0; i < controlList.Count; i++) { try { var control = controlList[i]; if (control.SendFlag == receiveFlag) { control.LatestDateTime = System.DateTime.Now; control.UsefulBytes = usefulBytes;// control.run(); } } catch (Exception ex) { Console.WriteLine($"control error : {ex.Message}"); } } } catch (Exception ex) { MainPage.Log("ManagerReceive抛出异常:" + ex.ToString()); } } /// /// 添加到内存数组里面 /// void add() { /// /// 达到50条数据后就清理一下 /// if (50 < controlList.Count) { lock (controlList) { for (int i = 0; i < controlList.Count;) { if (controlList[i] == null || 3 <= controlList[i].Packet.HaveSendCount) { controlList.RemoveAt(i); } else { i++; } } } //System.MainPage.WriteLog ("++++++++"+controlList.Count.ToString ()); } controlList.Add(this); } //当前数据的关键数据 string sendFlag = string.Empty; protected string SendFlag { get { return sendFlag; } set { sendFlag = value; usefulBytes = null; } } private byte[] usefulBytes; /// /// 获取回来的有用信息,如果获取回来的数据为null,就会抛出异常信息 /// public byte[] UsefulBytes { get { if (null == usefulBytes) { // throw new Exception("不好意思,网络不稳定或者远程设备不在线,请稍候再试!"); } return this.usefulBytes; } set { usefulBytes = value; } } //发送数据了之后当前线程等待或者运行的信号 System.Threading.ManualResetEvent allDone = new System.Threading.ManualResetEvent(false); /// /// 发送了数据后,线程就是等待状态,直到接收到反馈或者超时后退出 /// void wait() { allDone.Reset(); allDone.WaitOne(); } /// /// 让当前线程继续执行 /// void run() { allDone.Set(); Packet.HaveSendCount = 4; } //数据重发处理 void managerSendCount(object o) { add(); if (MainPage.IsRemote) { System.Console.WriteLine("远程发送数据:" + SendFlag); Mqtt_Cloud.MqttRemoteSend(Packet.Bytes); Packet.FlagDateTime = DateTime.Now; Packet.HaveSendCount--; //这里是重发两次 while (Packet.HaveSendCount < 3) { if (Packet.FlagDateTime.AddMilliseconds(1000).Ticks <= System.DateTime.Now.Ticks) { Mqtt_Cloud.MqttRemoteSend(Packet.Bytes); System.Console.WriteLine("重发远程发送数据:" + SendFlag); Packet.FlagDateTime = DateTime.Now; Packet.HaveSendCount++; } System.Threading.Thread.Sleep(100); }
 allDone.Set();
 } else { //Bus socket无法控制,重启机制 if (controlLostCount > 10) { BusSocket.Stop(); new System.Threading.Thread(() => { System.Threading.Thread.Sleep(1000); BusSocket.Start(6000); controlLostCount = 0; }) { IsBackground = true }.Start(); } try { MainPage.Log("发送数据:" + SendFlag); BusSocket.AsyncBeginSend(Packet); Packet.HaveSendCount--; //这里是重发两次 while (Packet.HaveSendCount < 3) { if (Packet.FlagDateTime.AddMilliseconds(1000).Ticks <= DateTime.Now.Ticks) { MainPage.Log("重发数据:" + SendFlag); BusSocket.AsyncBeginSend(Packet); controlLostCount++; } System.Threading.Thread.Sleep(100); } } catch (Exception ex) { MainPage.Log("managerSendCount:" + ex.ToString()); } finally { allDone.Set(); } } } /// /// 当前数据包 /// Packet Packet; private void ini(Target target) { this.SendFlag = string.Format("{0},{1},{2},", target.SubnetID, target.DeviceID, (int)target.Command + 1); switch (target.Command) { case Command.SetSingleLight: case Command.ReadLogicLoopColor: case Command.ReadACMode: case Command.SetACMode: case Command.ReadFloorHeat: case Command.SetFloorHeat: this.sendFlag += string.Format("{0}", target.AddData[0]); break; case Command.SetLogicLoopColor: this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]); break; case Command.ReadLightAllLoopBrightness: this.SendFlag += ""; break; //case Command.YIPanelDeviceInof: // for (int i = 0; i < 4; i++) // { // this.sendFlag += string.Format("{0}", target.AddData[i]); // } // break; //case Command.ReadDoorLockSceneObj: // this.SendFlag += string.Format("{0},{1},{2},{3},{4}", target.AddData[0], target.AddData[1], target.AddData[2], target.AddData[3], target.AddData[4]); // break; //case Command.ReadDoorLockClock: //case Command.CreatConnection: // this.SendFlag += string.Format("{0}", target.AddData[0]); // break; //case Command.ReadDoorLockUseRemark: //case Command.ReadSensorPushMessage: //case Command.SetSensorPushMessage: //case Command.SetSensorScence: //case Command.ReadAnalog: // this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]); // break; //case Command.ReadSensorScence: // this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]); // break; //case Command.SendRemoteInfoToServer: // for (int i = 40; i < 48; i++) // { // this.sendFlag += string.Format("{0}", target.AddData[i]); // } // break; //case Command.SetCommonSwitch: //case Command.InfraredChannelControl: //case Command.ReadFoolHeat: //case Command.SetFoolHeat: //case Command.Serverx_FH_CMD: //case Command.SetArm: //case Command.ReadArm: //case Command.ReadSensorHistory: //case Command.SetSensorAutomationTargetLevelEnable: //case Command.ReadSensorAutomationLevelTargetEnable: // this.SendFlag += string.Format("{0}", target.AddData[0]); // break; //case Command.ReadDeviceModul: //case Command.ReadGateway: //case Command.ReadSecurityStatus: //case Command.ReadHornTargetState: // this.SendFlag = string.Format("{0},{1}", target.AddData[0], target.AddData[1]); // break; //case Command.SetScene: //case Command.SetSeries: //case Command.SetHotelCurtain: //case Command.ReadAnalogValue: //case Command.SetSensorPushValues: //case Command.ReadSensorPushValues: // this.SendFlag += string.Format("{0},{1}", target.AddData[0], target.AddData[1]); // break; ////case Command.ReadOnePortWirelessFROtherInfo: //case Command.UpdataRemake: //case Command.WriteManageWirelessNet: //case Command.UpdataLightDimmingTheLargestLevel: //case Command.UpdataLightDimmingMaximumOrMinimum: //case Command.ReadGateWayModelInfo: //case Command.ReadGatewayServerIP: //case Command.SetGateWayModelInfo: //case Command.SetGateWayModelInternetInfo: //case Command.ReadDeviceMac: //case Command.SetDeviceSubnetID: //case Command.PositioningEquipment: //case Command.PositioningPanel: //case Command.CheckConfigSuccess: //case Command.GotoConfigMode: //case Command.ReadACPanel: //case Command.SetACPanel: //case Command.ReadTerrestriaHeatRemark: //case Command.UpdateGatewayIp: //case Command.ReadWirelessPanelMode: //case Command.ReadDrycontactMode: //case Command.ReadACFloorHeatingSettingEquipment: //case Command.SetACFloorHeatingSettingEquipment: //case Command.Read43FloorHeatingSettingEquipment: //case Command.Set43FloorHeatingSettingEquipment: //case Command.READ_AIR_ALL_Parameter: //case Command.Set_AIR_ALL_Parameter: //case Command.ReadFloorHeatProbe: //case Command.ControlMusicModel: //case Command.ReadButtonKeyEnable: //case Command.UpdateEquipmentLoopRemake: //case Command.SetGateway: //case Command.ReadMusicPanelSetting: //case Command.ReadMusicPanelEnable: //case Command.SetMusicPanelEnable: //case Command.SetMusicPanelSetting: //case Command.ReadGatewayProgrammingMode: //case Command.RED_HSFH_TOTAL: //case Command.RED_HSFH_INFORMATION: //case Command.RED_HSRM_TOTAL: //case Command.RED_HSRM_INFORMATION: //case Command.CLEAR_SYSTEM_HISTORY: //case Command.SetSensorTargetRemark: //case Command.ReadSensorAutomationEnableList: //case Command.SetSensorAutomationEnableList: //case Command.SetSensorAutomationListID: //case Command.ReadSensorAutomationListID: //case Command.SetSensorAutomationName: //case Command.ReadSensorAutomationName: //case Command.Set_Floor_Heat_State: //case Command.Read_Floor_Heat_State: //case Command.Read_Air_Condition_Set: //case Command.UpdateHornLoopRemake: //case Command.ReadHornLoopCount: //case Command.ReadPanelTempType: // this.SendFlag += ""; // break; //case Command.ControlMusicModel2: // for (int i = 1; i < target.AddData.Length; i++) // { // if (target.AddData[i + 1] == 0x0D) // { // break; // } // this.sendFlag += string.Format("{0},", target.AddData[i]); // } // break; //case Command.Remote3th: // this.SendFlag = string.Format("{0},", (int)target.Command + 1); // break; case Command.ReadDeviceLoopInfo: if (target.AddData[0] == 1)//特殊处理灯光类,DMX模块每一个回路不固定小类,根据具体设置来回复 this.sendFlag += string.Format("{0},{1}", target.AddData[0], target.AddData[2]); else this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]); break; //case Command.SetDeviceLoopInfo: //case Command.InfraredControl: //case Command.SetSecurityByPass: //case Command.SetSensorAutomationDateTimeCycle: //case Command.ReadSensorAutomationDateTimeCycle: // this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]); // break; //case Command.ReadWirelessPanelButtonKey: //case Command.WriteWirelessPanelButtonKey: //case Command.ReadDryContactStatus: //case Command.SetCurtainModelStutas: //case Command.DownloadInfrared: //case Command.UpLoadInfrared: case Command.InstructionPanelKey: case Command.ReadInstructionPanelKey: //case Command.ReadSensorTargetRemark: //case Command.SetHornTargetState: this.sendFlag += string.Format("{0},{1}", target.AddData[0], target.AddData[1]); break; //case Command.AssignedAddress: //case Command.UpdataCurtainModelRunTime: //case Command.ReadCurtainStatus: //case Command.ReadPanleTemp: //case Command.FreshAirRead: //case Command.FreshAirControl: //case Command.Set_Air_State_New: //case Command.ReadHornTargetEnable: //case Command.SetHornTargetEnable: //case Command.ReadHornLoopAlarm: //case Command.SetHornPush: //case Command.ReadHornPush: //case Command.ReadHornHistory: //case Command.ReadHornLoopsStatus: // this.sendFlag += string.Format("{0}", target.AddData[0]); // break; //case Command.RemoteFirst: // for (int i = 0; i < 28; i++) // { // this.sendFlag += string.Format("{0}", target.AddData[i]); // } // break; //case Command.RemoteSecoud: // for (int i = 0; i < 7; i++) // { // this.sendFlag += string.Format("{0}", target.AddData[i]); // } // break; default: //return; break; } System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount)); thread.IsBackground = true; thread.Start(Packet); } /// /// 发送Bus数据,发送了不需要等待 /// /// 发送对象 /// 重发次数 void Send(Target target, int sendCount, bool isWait) { try { Packet = new Packet(target.SendBytes, target.IPEndPoint); Packet.HaveSendCount = 3 - sendCount; ini(target); if (isWait) { this.wait(); } } catch(Exception ex) { MainPage.Log($"Send bus data error {ex.Message}"); } } /// /// 读取网关IP /// void ReadGatewayIP() { try { var sendJob = new JObject {{ "command", "search" } }; var SearchGateway = JsonConvert.SerializeObject(sendJob); var SearchGatewayPayload = Encoding.ASCII.GetBytes(SearchGateway); Packet = new Packet(SearchGatewayPayload, CommonPage.GetGatewayIP_EndPoint); System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount)); thread.IsBackground = true; thread.Start(Packet); wait(); } catch (Exception ex) { MainPage.Log($"Send bus data error {ex.Message}"); } } } }