From 64dbbfe1d6488635e160189a704afccffc7d34d0 Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期一, 07 十二月 2020 11:33:06 +0800 Subject: [PATCH] Merge branch 'WJC' --- HDL_ON/DAL/DriverLayer/Control.cs | 209 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 153 insertions(+), 56 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 7f51627..80e292b 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -46,6 +46,15 @@ return _msg_id++; } } + /// <summary> + /// 鑾峰彇13浣嶆椂闂存埑 + /// </summary> + /// <returns></returns> + public string Get_TimeStamp() + { + long t = DateTime.Now.Ticks / 10000; + return t.ToString(); + } bool _gatewayOnline = false; /// <summary> @@ -61,12 +70,35 @@ _gatewayOnline = value; //淇敼涓婚〉杩炴帴鐘舵�� UI.HomePage.LoadEvent_CheckLinkStatus(); + FunctionList.List.ReadAllFunctionStatus(); } } /// <summary> + /// 缃戝叧閫氳ID + /// </summary> + public string GatewayId; + + bool _isRemote = false; + /// <summary> /// 鏄惁涓鸿繙绋嬭繛鎺� /// </summary> - public bool IsRemote = false; + public bool IsRemote { + get + { + return _isRemote; + } + set + { + _isRemote = value; + if(value) + { + DAL.Mqtt.MqttClient.InitState(); + }else + { + DAL.Mqtt.MqttClient.DisConnectRemote(); + } + } + } /// <summary> /// 閫氳鍦板潃IP /// </summary> @@ -111,6 +143,18 @@ UdpSocket._BusSocket.Start(port); } /// <summary> + /// 鍏抽棴udp + /// </summary> + public void CloseUdp() + { + if (myUdp != null) + { + myUdp = null; + } + UdpSocket._BusSocket.Stop(); + } + + /// <summary> /// 鎵撳紑tcp瀹㈡湇绔� /// </summary> public void OpenTcpClent() @@ -136,15 +180,24 @@ public void SearchLoaclGateway() { OpenUdp(DB_ResidenceData.residenceData.GatewayType == 0 ? 6000 : 8585); - - if (DB_ResidenceData.residenceData.GatewayType == 0) + new System.Threading.Thread(() => { - 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) - { - myUdp.SearchLocalGateway(); - } + for (int i = 0; i < 5; i++) + { + if (GatewayOnline) + break; + 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) + { + myUdp.SearchLocalGateway(); + } + System.Threading.Thread.Sleep(500); + } + }) + { IsBackground = true }.Start(); } /// <summary> @@ -174,28 +227,45 @@ { function.usageCount++; function.refreshTime = DateTime.Now; - if (DB_ResidenceData.residenceData.GatewayType == 0) + DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); + //杩滅▼閫氳 + if (Ins.IsRemote || true) { - try - { - if(myUdp != null) - { - myUdp.WriteBusData(function, commandDictionary); - } - } - catch (Exception ex) - { - MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); - } + //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋� + var apiControlData = function.GetApiControlData(commandDictionary); + var actionObjs = new List<ApiAlinkControlActionObj>(); + actionObjs.Add(apiControlData); + var pack = httpServer.ControlDevice(actionObjs); + MainPage.Log($"{pack.Code}:{pack.Data}"); } + //鏈湴閫氳 else { - if (myTcpClient != null) + //Bus鎺у埗 + if (DB_ResidenceData.residenceData.GatewayType == 0) { - var sendDataObj = function.GetControlSendData(commandDictionary); - var sendJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendDataObj); - var sendBytes = System.Text.Encoding.UTF8.GetBytes(sendJson); - myTcpClient.SendMessage(sendBytes); + try + { + if (myUdp != null) + { + myUdp.WriteBusData(function, commandDictionary); + } + } + catch (Exception ex) + { + MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + } + } + //ALink鎺у埗 + else + { + if (myUdp != null) + { + var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary); + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson); + myUdp.SendLocalHdlLinkData(sendBytes); + } } } } @@ -207,24 +277,57 @@ public void SendReadCommand(Function function) { function.refreshTime = DateTime.Now; - if (function.bus_Data != null) + if (Ins.IsRemote) { - try - { - //ReadBusData(function); - } - catch (Exception ex) - { - MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); - } + } else { - //var commandObj = function.GetSendJObject(CommandType_A.read); - //var commandString = Newtonsoft.Json.JsonConvert.SerializeObject(commandObj); - //var commandBytes = System.Text.Encoding.UTF8.GetBytes(commandString); - //MqttCommon.MqttRemoteSend(commandBytes); + if (function.bus_Data != null) + { + try + { + Ins.myUdp.ReadBusData(function); + } + catch (Exception ex) + { + MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}"); + } + } + else + { + var readKey = new Dictionary<string, string>(); + readKey.Add("sid", function.sid); + + var readDataObj = new GatewayAlinkReadObj() + { + id = Ins.msg_id.ToString(), + objects = new List<Dictionary<string, string>>() + { + readKey + }, + //time_stamp = + }; + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); + Ins.myUdp.SendLocalHdlLinkData(sendBytes); + } } + } + /// <summary> + /// 鍙戦�丄鍗忚璇诲彇鍛戒护 + /// </summary> + public void SendReadCommand(List<Dictionary<string, string>> keyValuePairs) + { + var readDataObj = new GatewayAlinkReadObj() + { + id = Ins.msg_id.ToString(), + objects = keyValuePairs, + //time_stamp = + }; + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); + Ins.myUdp.SendLocalHdlLinkData(sendBytes); } /// <summary> @@ -249,6 +352,7 @@ string sendDataString = topicString + lengthString + bodyDataString; byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString); + MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n"); return sendDataBytes; } @@ -288,13 +392,12 @@ break; } } - //楠岃瘉鏈夋晥鏁版嵁闀垮害 - if (res[1].Length != receiveObj.Length) - { - MainPage.Log($"鏀跺埌鏁版嵁鍖呴暱搴︿笉澶�"); - return receiveObj; - } + //if (res[1].Length != receiveObj.Length) + //{ + // MainPage.Log($"鏀跺埌鏁版嵁鍖呴暱搴︿笉澶�"); + // return receiveObj; + //} receiveObj.BodyDataString = res[1]; var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); @@ -304,25 +407,19 @@ } switch (receiveObj.Topic) { - case CommunicationTopic.SearchLoaclGateway: + case CommunicationTopic.SearchLoaclGatewayReply: 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; + Ins.GatewayOnline = true; + Ins.GatewayId = device.gatewayId; + reportIp = "239.0.168.188";// device.ip_address; + Ins.IsRemote = false; } break; } } return receiveObj; - } - - } } \ No newline at end of file -- Gitblit v1.8.0