From e53a1951d6aa07ad22aad9816da4703496fcbccd Mon Sep 17 00:00:00 2001 From: wei <kaede@kaededeMacBook-Air.local> Date: 星期五, 27 十一月 2020 14:27:16 +0800 Subject: [PATCH] 1127最新合并代码,合并嘉乐更新 --- HDL_ON/DAL/DriverLayer/Control.cs | 185 +++++++++++++++++++++++++++++++++++---------- 1 files changed, 142 insertions(+), 43 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 743e402..7f51627 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -1,15 +1,16 @@ using System; using System.Collections.Generic; +using System.Text; using HDL_ON.Entity; namespace HDL_ON.DriverLayer { - /// <summary> /// 閫氳鏂瑰紡 /// </summary> public enum CommunicationMode { + none, /// <summary> /// 鏈湴udp /// </summary> @@ -20,12 +21,10 @@ tcp_local_client, } - - public class Control { static Control _control; - public static Control ins + public static Control Ins { get { @@ -36,10 +35,38 @@ return _control; } } + int _msg_id = 1; + /// <summary> + /// 閫氳ID + /// </summary> + public int msg_id + { + get + { + return _msg_id++; + } + } + + bool _gatewayOnline = false; /// <summary> /// 缃戝叧鏄惁鍦ㄧ嚎 /// </summary> - public bool gatewayOnline = false; + public bool GatewayOnline { + get + { + return _gatewayOnline; + } + set + { + _gatewayOnline = value; + //淇敼涓婚〉杩炴帴鐘舵�� + UI.HomePage.LoadEvent_CheckLinkStatus(); + } + } + /// <summary> + /// 鏄惁涓鸿繙绋嬭繛鎺� + /// </summary> + public bool IsRemote = false; /// <summary> /// 閫氳鍦板潃IP /// </summary> @@ -55,7 +82,7 @@ /// <summary> /// 鏈湴udp /// </summary> - public Control_Udp_Bus myUdp = null; + public Control_Udp myUdp = null; /// <summary> /// 閫氳鏂瑰紡 @@ -72,63 +99,50 @@ } /// <summary> - /// 鏀瑰彉閫氳鏂瑰紡 + /// 鎵撳紑Udp /// </summary> - public void ChangeCommunicationMode(CommunicationMode communicationMode) + public void OpenUdp(int port) { - if (this.communicationMode == communicationMode) + if (myUdp == null) { - return; + myUdp = new Control_Udp(); } - this.communicationMode = communicationMode; - - - switch (this.communicationMode) + UdpSocket._BusSocket.Start(port); + } + /// <summary> + /// 鎵撳紑tcp瀹㈡湇绔� + /// </summary> + public void OpenTcpClent() + { + if (myTcpClient == null) { - case CommunicationMode.local_BusUdp: - if (myUdp == null) - { - myUdp = new Control_Udp_Bus(); - } - UdpSocket._BusSocket.Start(); - if (myTcpClient != null) - { - myTcpClient.Close(); - myTcpClient = null; - } - break; - case CommunicationMode.tcp_local_client: - if (myTcpClient == null) - { - myTcpClient = new Control_TcpClient(reportIp); - myTcpClient.Connect(); - } - if (myUdp != null) - { - UdpSocket._BusSocket.Stop(); - myUdp = null; - } - break; + myTcpClient = new Control_TcpClient(reportIp); + myTcpClient.Connect(); } } + + ///// <summary> + ///// 鏀瑰彉閫氳鏂瑰紡 + ///// </summary> + //public void ChangeCommunicationMode(CommunicationMode communicationMode) + //{ + // this.communicationMode = communicationMode; + //} /// <summary> /// 鎼滅储鏈湴缃戝叧鍒楄〃 /// </summary> public void SearchLoaclGateway() { - ChangeCommunicationMode(CommunicationMode.local_BusUdp); + OpenUdp(DB_ResidenceData.residenceData.GatewayType == 0 ? 6000 : 8585); + if (DB_ResidenceData.residenceData.GatewayType == 0) { myUdp.ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); } else if (DB_ResidenceData.residenceData.GatewayType == 1) { - UdpSocket._BusSocket.SearchNetDeviceAction = (revIp) => - { - MainPage.Log($"鎼滅储鍒扮綉缁滆澶囷細{revIp}"); - }; myUdp.SearchLocalGateway(); } } @@ -224,6 +238,91 @@ sendSidObj.type = "device_sid"; sendSidObj.command = "get_list_response"; } + /// <summary> + /// 杞崲閫氳鏁版嵁 + /// </summary> + public byte[] ConvertSendBodyData(string topic, string bodyDataString) + { + string topicString = "Topic:" + topic + "\r\n"; + byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString); + string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n"; + + string sendDataString = topicString + lengthString + bodyDataString; + byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString); + + return sendDataBytes; + } + /// <summary> + /// 杞崲鎺ユ敹鍒扮殑鏁版嵁 + /// </summary> + /// <returns></returns> + public void ConvertReceiveData(byte[] receiveBytes) + { + var reString = Encoding.UTF8.GetString(receiveBytes); + AnalysisReceiveData(reString); + } + /// <summary> + /// 杞崲鎺ユ敹鍒扮殑鏁版嵁 + /// </summary> + /// <returns></returns> + public LocalCommunicationData AnalysisReceiveData(string receiveString) + { + LocalCommunicationData receiveObj = new LocalCommunicationData(); + + var res = receiveString.Split("\r\n\r\n"); + + if (res.Length == 2) + { + var topics = res[0].Split("\r\n"); + MainPage.Log(res[1]); + foreach (var ts in topics) + { + var key = ts.Split(":"); + switch (key[0]) + { + case "Topic": + receiveObj.Topic = key[1]; + break; + case "Length": + receiveObj.Length = Convert.ToInt32(key[1]); + break; + } + } + + //楠岃瘉鏈夋晥鏁版嵁闀垮害 + if (res[1].Length != receiveObj.Length) + { + MainPage.Log($"鏀跺埌鏁版嵁鍖呴暱搴︿笉澶�"); + return receiveObj; + } + receiveObj.BodyDataString = res[1]; + + var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); + if (bodyJObj == null) + { + return receiveObj; + } + switch (receiveObj.Topic) + { + case CommunicationTopic.SearchLoaclGateway: + var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); +#if DEBUG + if (UserInfo.Current.AccountString == "464027401@qq.com") + { + DB_ResidenceData.residenceData.residenceGatewayMAC = "0000000000000000"; + } +#endif + if (device.device_mac == DB_ResidenceData.residenceData.residenceGatewayMAC) + { + Control.Ins.GatewayOnline = true; + } + break; + } + } + return receiveObj; + + } + } } \ No newline at end of file -- Gitblit v1.8.0