From 5eeafe3af80bfd88306bd8ad9e76c8f4b51ca35f Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 17 十二月 2020 14:16:20 +0800 Subject: [PATCH] 增加本地发送的重发机制 --- HDL_ON/DAL/DriverLayer/Control.cs | 128 ++++++++++++++++++++++++------------------ 1 files changed, 74 insertions(+), 54 deletions(-) diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs index 5f3c63b..13996e8 100644 --- a/HDL_ON/DAL/DriverLayer/Control.cs +++ b/HDL_ON/DAL/DriverLayer/Control.cs @@ -77,7 +77,12 @@ if (value) { MainPage.Log($"缃戝叧鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�"); - FunctionList.List.ReadAllFunctionStatus(); + new System.Threading.Thread(() => + { + System.Threading.Thread.Sleep(1000); + FunctionList.List.ReadAllFunctionStatus(); + }) + { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start(); } } } @@ -85,7 +90,7 @@ /// <summary> /// 缃戝叧閫氳ID /// </summary> - public string GatewayId; + public string GatewayId =""; bool _isRemote = false; /// <summary> @@ -118,7 +123,7 @@ /// <summary> /// 鏈湴udp /// </summary> - public Control_Udp myUdp = null; + public Control_Udp myUdp1 = null; /// <summary> /// 閫氳鏂瑰紡 @@ -139,11 +144,6 @@ /// </summary> public void OpenUdp(int port) { - if (myUdp == null) - { - myUdp = new Control_Udp(); - } - UdpSocket._BusSocket.Start(port); } /// <summary> @@ -151,10 +151,6 @@ /// </summary> public void CloseUdp() { - if (myUdp != null) - { - myUdp = null; - } UdpSocket._BusSocket.Stop(); } @@ -183,20 +179,20 @@ /// </summary> public void SearchLoaclGateway() { - OpenUdp(DB_ResidenceData.residenceData.GatewayType == 0 ? 6000 : 8585); + OpenUdp(DB_ResidenceData.Instance.GatewayType == 0 ? 6000 : 8585); new System.Threading.Thread(() => { for (int i = 0; i < 5; i++) { if (GatewayOnline) break; - if (DB_ResidenceData.residenceData.GatewayType == 0) + if (DB_ResidenceData.Instance.GatewayType == 0) { - myUdp.ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); + new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); } - else if (DB_ResidenceData.residenceData.GatewayType == 1) + else if (DB_ResidenceData.Instance.GatewayType == 1) { - myUdp.SearchLocalGateway(); + new Control_Udp().SearchLocalGateway(); } System.Threading.Thread.Sleep(500); } @@ -214,13 +210,16 @@ /// </summary> public void ControlScene(Scene scene) { - if(myUdp!=null) - { - myUdp.ControlBusScenes(scene); - } - if(myTcpClient!= null) + if (Ins.IsRemote || DB_ResidenceData.Instance.GatewayType == 1) { ControlAProtocolScene(scene); + } + else + { + if (DB_ResidenceData.Instance.GatewayType == 0) + { + new Control_Udp().ControlBusScenes(scene); + } } } @@ -245,20 +244,17 @@ var actionObjs = new List<ApiAlinkControlActionObj>(); actionObjs.Add(apiControlData); var pack = httpServer.ControlDevice(actionObjs); - MainPage.Log($"{pack.Code}:{pack.Data}"); + //MainPage.Log($"{pack.Code}:{pack.Data}"); } //鏈湴閫氳 else { //Bus鎺у埗 - if (DB_ResidenceData.residenceData.GatewayType == 0) + if (DB_ResidenceData.Instance.GatewayType == 0) { try { - if (myUdp != null) - { - myUdp.WriteBusData(function, commandDictionary); - } + new Control_Udp().WriteBusData(function, commandDictionary); } catch (Exception ex) { @@ -268,15 +264,18 @@ //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); - } + var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary); + var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson); + new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id); } } + } + + public void SendApiReadCommand(List<string> functionIds) + { + var pm = new DAL.Server.HttpServerRequest(); + var pack = pm.RefreshDeviceStatus(functionIds); } /// <summary> @@ -293,11 +292,11 @@ } else { - if (DB_ResidenceData.residenceData.GatewayType == 0) + if (DB_ResidenceData.Instance.GatewayType == 0) { try { - Ins.myUdp.ReadBusData(function); + new Control_Udp().ReadBusData(function); } catch (Exception ex) { @@ -320,7 +319,7 @@ }; var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); - Ins.myUdp.SendLocalHdlLinkData(sendBytes); + new Control_Udp().SendLocalHdlLinkData(sendBytes,readDataObj.id); } } } @@ -341,15 +340,33 @@ //} /// <summary> - /// 鎺у埗a鍗忚鍦烘櫙 + /// a鍗忚鎺у埗鍦烘櫙 /// </summary> /// <param name="scene"></param> static void ControlAProtocolScene(Scene scene) { - var sendSidObj = new AProtocolSendingObject(); - sendSidObj.time_stamp = ""; - sendSidObj.type = "device_sid"; - sendSidObj.command = "get_list_response"; + if (Ins.IsRemote) + { + var pm = new HDL_ON.DAL.Server.HttpServerRequest(); + pm.ExecuteScene(scene.userSceneId); + } + else + { + Dictionary<string, string> keys = new Dictionary<string, string>(); + keys.Add("sid", scene.sid); + var aLinkData = new AlinkReadFunctionStatusObj() + { + id = Ins.msg_id.ToString(), + objects = new List<Dictionary<string, string>>() + { + keys + }, + time_stamp = Utlis.GetTimestamp() + }; + var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData); + var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson); + new Control_Udp().SendLocalHdlLinkData(sendBytes,aLinkData.id); + } } /// <summary> /// 杞崲閫氳鏁版嵁 @@ -388,7 +405,7 @@ if (res.Length == 2) { var topics = res[0].Split("\r\n"); - MainPage.Log(res[1]); + //MainPage.Log(res[1]); foreach (var ts in topics) { var key = ts.Split(":"); @@ -418,7 +435,7 @@ if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply) { var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString()); - if (device.device_mac == DB_ResidenceData.residenceData.residenceGatewayMAC) + if (device.device_mac == DB_ResidenceData.Instance.residenceGatewayMAC) { Ins.GatewayOnline = true; if(!string.IsNullOrEmpty( device.gatewayId)) @@ -436,7 +453,8 @@ else if(receiveObj.Topic == CommunicationTopic.ct.ReadStatus+"_reply" || receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus) { - UpdataFunctionStatus(receiveObj.BodyDataString); + //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮� + UpdataFunctionStatus(receiveObj.BodyDataString,null); } } return receiveObj; @@ -447,18 +465,19 @@ /// A鍗忚鏁版嵁 /// </summary> /// <param name="updateBytes"></param> - public void UpdataFunctionStatus(string revString) + public void UpdataFunctionStatus(string revString,byte []usefulBytes) { MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}"); var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); if (temp != null) { - var allLocalFuntion = FunctionList.List.GetAllDeviceFunctionList(); + Control_Udp.ReceiveRepeatManager(temp.id,usefulBytes); + var allLocalFuntion = FunctionList.List.GetDeviceFunctionList(); foreach (var updateTemp in temp.objects) { try { - bool hadChange = false;//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� + //bool hadChange = false;//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� var updataObj = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); if (updataObj != null) { @@ -473,14 +492,15 @@ continue; } locatAttr.curValue = attr.value; - hadChange = true; + //hadChange = true; } } } - if (!hadChange)//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� - { - continue; - } + //2020-12-13 濡傛灉鎺у埗鏃讹紝绔嬪嵆鏇存柊鐣岄潰鍗崇姸鎬侊紝鏀跺埌鏁版嵁涓嶇敤鍦ㄥ鐞嗭紝鐩墠鍙慨鏀硅澶囩姸鎬侊紝鐣岄潰娌℃湁鏇存柊锛岃繕鏄渶瑕佹帴鏀舵暟鎹洿鏂� + //if (!hadChange)//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈� + //{ + // continue; + //} //鏇存柊鐣岄潰鐘舵�� switch (updataObj.spk) { -- Gitblit v1.8.0