From ea0b1e8e5f43c5fd0a7d479e25ede3b8cbea464a Mon Sep 17 00:00:00 2001
From: wxr <wxr@hdlchina.com.cn>
Date: 星期一, 02 十二月 2024 17:17:19 +0800
Subject: [PATCH] tcp;可视对讲;

---
 HDL_ON/DAL/DriverLayer/Control.cs |  375 ++++++++++++++++++++++++++++++++--------------------
 1 files changed, 230 insertions(+), 145 deletions(-)

diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index f5a397b..103796e 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -111,7 +111,7 @@
                     {
                         //淇敼涓婚〉杩炴帴鐘舵��
                         HomePage.LoadEvent_CheckLinkStatus();
-                        MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
+                        //MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
                         new System.Threading.Thread(() =>
                         {
                             System.Threading.Thread.Sleep(1000);
@@ -127,7 +127,7 @@
                 }
                 else
                 {
-                    MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(鏈湴)");
+                    //MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(鏈湴)");
                 }
             }
         }
@@ -178,7 +178,7 @@
                                 while (true)
                                 {
                                     System.Threading.Thread.Sleep(500);
-                                    if (MqttClient.isSubscribeSuccess || count<1)
+                                    if (MqttClient.isSubscribeSuccess || count < 1)
                                     {
                                         break;
                                     }
@@ -198,7 +198,8 @@
                     {
                         MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(浜戠)");
                     }
-                }catch(Exception ex)
+                }
+                catch (Exception ex)
                 {
                     MainPage.Log($"Set GatewayCloudOnline Error:{ex.Message}");
                 }
@@ -261,12 +262,13 @@
         /// </summary>
         public void OpenTcpClent()
         {
-            return;
             if (myTcpClient == null)
             {
-                myTcpClient = new Control_TcpClient(reportIp);
+                myTcpClient = new Control_TcpClient(reportIp, 8586);
             }
-            myTcpClient.Connect();
+            MainPage.Log("鎵撳紑tcp");
+            myTcpClient.init();
+            Ins.LoginGateway();
 
         }
 
@@ -276,8 +278,7 @@
         public void SearchLoaclGateway()
         {
             //2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt
-            if (DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId) ||
-                    !UserInfo.Current.IsLogin)
+            if (DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId))
             {
                 return;
             }
@@ -292,11 +293,11 @@
             }
             else if (MainPage.InternetStatus == 1)
             {
-                DAL.Mqtt.MqttClient.InitState();
+                MqttClient.InitState();
             }
             else if (MainPage.InternetStatus == 2)
             {
-                DAL.Mqtt.MqttClient.InitState();
+                MqttClient.InitState();
                 OpenUdp(DB_ResidenceData.Instance.GatewayType == 0 ? 6000 : 8585);
                 //閲嶇疆鎼滅储缃戝叧鏍囧織
                 IsSearchLocalGatewaySuccessful = false;
@@ -328,7 +329,6 @@
             }
         }
 
-
         private System.Threading.Thread loginGatewayThread;
 
         /// <summary>
@@ -336,49 +336,25 @@
         /// </summary>
         public void LoginGateway()
         {
-            return;//tcp鎺у埗瀛樺湪闂锛屼絾鏄厛涓嶇敤tcp鎺у埗浜嗭紝瑕佺粡杩囨祴璇曞厛  2023-07-29 10:14:32
-            if (loginGatewayThread == null)
+            if (loginGatewayThread == null && !LocalTcpClientLogin)
             {
                 loginGatewayThread = new System.Threading.Thread(() =>
                 {
-                    while (!Ins.myTcpClient.isConnected)
+                    if (Ins.GatewayOnline_Local)
                     {
-                        if (Ins.GatewayOnline_Local && myTcpClient.isConnected)
+                        while (!LocalTcpClientLogin)
                         {
                             var sendData = new { clientType = "app", version = "1.0" };
                             var sendJob = new { id = Control.Ins.msg_id.ToString(), time_stamp = Utlis.GetTimestamp(), objects = sendData };
-
                             var bodyString = JsonConvert.SerializeObject(sendJob);
-
                             var sendBytes = ConvertSendBodyData($"/user/{GatewayId}/custom/gateway/login", bodyString);
-
-                            Ins.myTcpClient.SendMessage(sendBytes);
+                            Ins.myTcpClient.CommSend(sendBytes, sendBytes.Length);
+                            System.Threading.Thread.Sleep(1000);
                         }
-                        System.Threading.Thread.Sleep(2000);
                     }
-                    //loginGatewayThread?.Abort();
-                    //loginGatewayThread = null;
-
                 });
                 loginGatewayThread.Start();
             }
-            else
-            {
-                try
-                {
-                    loginGatewayThread?.Abort();
-                }
-                catch (Exception ex)
-                {
-                    MainPage.Log($"閲嶅惎鐧诲綍缃戝叧绾跨▼寮傚父:{ex.Message}");
-                }
-                finally
-                {
-                    loginGatewayThread = null;
-                    LoginGateway();
-                }
-            }
-
         }
 
 
@@ -404,7 +380,7 @@
                     }
                     asd.status = status1;
                     upDataObj.objects.Add(asd);
-                    revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
+                    revString = JsonConvert.SerializeObject(upDataObj);
                     UpdataFunctionStatus(revString, null, true);
                 }
                 return;
@@ -444,7 +420,7 @@
 
 
             //濡傛灉鏄帶鍒惰皟鍏夌殑寮�鏃讹紝浜害鍊间笉鑳戒负0
-            if (commandDictionary.Count > 2)
+            if (commandDictionary.Count >= 2)
             {
                 if (commandDictionary.ContainsKey(FunctionAttributeKey.OnOff) && commandDictionary.ContainsKey(FunctionAttributeKey.Brightness))
                 {
@@ -480,12 +456,12 @@
                 }
                 asd.status = status1;
                 upDataObj.objects.Add(asd);
-                revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
+                revString = JsonConvert.SerializeObject(upDataObj);
                 UpdataFunctionStatus(revString, null, true);
                 return true;
             }
 
-            //MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}");
+            //MainPage.Log($"鍙戦�佹暟鎹�:{JsonConvert.SerializeObject(commandDictionary)}");
 
             ///绗笁鏂规秱楦﹁澶囩粺涓�浣跨敤杩滅▼鎺у埗
             switch (function.spk)
@@ -532,11 +508,11 @@
                     else
                     {
                         var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary);
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(functionControlDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, resend);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
-                            //Ins.myTcpClient.SendMessage(sendBytes);
+                        //Ins.myTcpClient.SendMessage(sendBytes);
                     }
                 }
                 //杩滅▼閫氳
@@ -626,7 +602,7 @@
             {
                 foreach (var temp in functions)
                 {
-                    if((temp.trait_on_off.state.ToString() ==  "on" && open)|| temp.trait_on_off.state.ToString() == "off"&& !open)
+                    if ((temp.trait_on_off.state.ToString() == "on" && open) || temp.trait_on_off.state.ToString() == "off" && !open)
                     {
                         continue;
                     }
@@ -664,7 +640,7 @@
             if (pack != null && pack.Data != null)
             {
                 //寰呮祴璇�2021-03-04
-                var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
+                var ddd = JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
                 if (ddd != null)
                 {
                     foreach (var function in ddd)
@@ -724,7 +700,7 @@
                                         },
                             time_stamp = Utlis.GetTimestamp()
                         };
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -736,7 +712,8 @@
                     try
                     {
                         pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
-                    }catch(Exception ex)
+                    }
+                    catch (Exception ex)
                     {
                         MainPage.Log($"杩滅▼璇诲彇璁惧鐘舵�佸紓甯�:{ex.Message}");
                     }
@@ -806,7 +783,7 @@
                             objects = objects,
                             time_stamp = Utlis.GetTimestamp()
                         };
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -850,7 +827,7 @@
                         },
                     time_stamp = Utlis.GetTimestamp()
                 };
-                var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
+                var aLinkJson = JsonConvert.SerializeObject(aLinkData);
                 var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlSeurity, aLinkJson);
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id);
             }
@@ -904,7 +881,7 @@
                     objects = objects,
                     time_stamp = Utlis.GetTimestamp()
                 };
-                var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                 var sendBytes = Ins.ConvertSendBodyData($"/base/{DB_ResidenceData.Instance.HomeGateway.gatewayId}/thing/service/MusicPlayGroupListGet/down", functionControlDataJson);
                 MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -922,7 +899,7 @@
             var sendId = Ins.msg_id.ToString();
             var sendObj = new { objects = objects1, id = sendId, time_stamp = Utlis.GetTimestamp() };
 
-            var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendObj);
+            var aLinkJson = JsonConvert.SerializeObject(sendObj);
             var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.AuthGateway, aLinkJson);
             new Control_Udp().SendLocalHdlLinkData(sendBytes, Ins.msg_id.ToString());
         }
@@ -936,14 +913,6 @@
         /// <returns></returns>
         public byte[] ConvertSendBodyData(string topic, string bodyDataString, bool isEncryption = true)
         {
-            //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);
-            //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
-
             //***************************************************************
             //2021-09-23 澧炲姞鏈湴閫氫俊鍔犲瘑澶勭悊
             //1.鎷兼帴澶�
@@ -954,8 +923,6 @@
             if (isEncryption && IsLocalEncryptAndGetAesKey)
             {
                 bodyBytes = Securitys.EncryptionService.AesEncryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
-                //bodyDataString = Encoding.UTF8.GetString(bodyBytes);
-                //MainPage.Log($"杞崲HDL-Link鏁版嵁 鍔犲瘑key锛�" + DB_ResidenceData.Instance.CurrentRegion.localSecret);
             }
             //3.鎷兼帴body鐨凩ength闀垮害鏁版嵁
             string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
@@ -967,7 +934,6 @@
             bodyBytes.CopyTo(sendDataBytes, topicAndLengthBytes.Length);
 
             var sendDataString = Encoding.UTF8.GetString(sendDataBytes);
-            MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
             //***************************************************************
 
             return sendDataBytes;
@@ -978,10 +944,6 @@
         /// <returns></returns>
         public void ConvertReceiveData(byte[] receiveBytes, string ip)
         {
-            if (!UserInfo.Current.IsLogin)
-            {
-                return;
-            }
             var reString = Encoding.UTF8.GetString(receiveBytes);
             AnalysisReceiveData(reString, receiveBytes, ip);
         }
@@ -993,16 +955,12 @@
         /// <returns></returns>
         public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes, string sIp = null)
         {
-           
             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(":");
@@ -1017,20 +975,11 @@
                     }
                 }
 
-                //MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic}  : 鍐呭: {res[1]}");
-
-                //楠岃瘉鏈夋晥鏁版嵁闀垮害
-                //if (res[1].Length != receiveObj.Length)
-                //{
-                //    MainPage.Log($"鏀跺埌鏁版嵁鍖呴暱搴︿笉澶�");
-                //    return receiveObj;
-                //}
                 receiveObj.BodyDataString = res[1];
 
+                ///UDP涓嶅嚭tcp蹇冭烦鍖�
                 if (receiveObj.Topic == CommunicationTopic.ct.HeartBeat + "_reply")
                 {
-                    //Ins.myTcpClient.ClearHeartBeatLog();
-                    MainPage.Log("tcp蹇冭烦鍥炲");
                     return null;
                 }
 
@@ -1051,61 +1000,49 @@
                             {
                                 var revString = Encoding.UTF8.GetString(receiveBytes);
                                 receiveObj.BodyDataString = revString;
-                                MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
-                                //if (receiveObj.Topic.EndsWith("/thing/property/up"))
-                                //{
-                                //    MsgInfoList.Add(revString + "\r\n");
-                                //}
                             }
                         }
-                        else
-                        {
-                            //鐩墠涓嶆嬁鍘熷Bytes鏁版嵁 瑙e瘑涓嶄簡
-                            //byte[] receiveBytes = Encoding.UTF8.GetBytes(res[1]);
-                            //MainPage.Log($"灞�鍩熺綉淇℃伅 receiveBytes {receiveBytes.Length}");
-                            //receiveBytes = Securitys.EncryptionService.AesDecryptPayload(receiveBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
-                            //MainPage.Log($"灞�鍩熺綉淇℃伅 瑙e瘑鍚庯細receiveBytes {receiveBytes.Length}");
-                            //var revString = Encoding.UTF8.GetString(receiveBytes);
-                            //receiveObj.BodyDataString = revString;
-                            //MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
-                        }
+                    }
+                }
 
-                    }
-                    else
-                    {
-                        MainPage.Log($"灞�鍩熺綉淇℃伅: 鏄庢枃锛�" + receiveObj.BodyDataString);
-                    }
+                if (receiveObj.BodyDataString == null)
+                {
+                    MainPage.Log($"UDP receiveObj.BodyDataString == null");
+                    return null;
                 }
 
                 try
                 {
-                    var idMsg = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
+                    var idMsg = JsonConvert.DeserializeObject<ResponsePack>(receiveObj.BodyDataString);
                     var hasProcess = hasItBeenProcessed(idMsg.id);
                     if (hasProcess)
                     {
-                        return null;
+                        if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply)
+                        {
+                            //MainPage.Log($"UDP涓嶅鐞嗛噸澶嶆暟鎹�:{idMsg.id}");
+                            return null;
+                        }
                     }
-                    MainPage.Log($"澶勭悊灞�鍩熺綉鏁版嵁id:{idMsg.id}");
-
                 }
                 catch (Exception ex)
                 {
-                    MainPage.Log($"瑙f瀽灞�鍩熺綉鏁版嵁寮傚父{ex.Message}");
+                    MainPage.Log($"瑙f瀽鏁版嵁寮傚父:{ex.StackTrace}\r\n<<-->>{receiveObj.BodyDataString}");
                 }
+
+                MainPage.Log($"UDP澶勭悊鏁版嵁:Topic:{receiveObj.Topic}===Context====" + receiveObj.BodyDataString);
 
                 if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
                 {
-
-                    var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
+                    var bodyJObj = JsonConvert.DeserializeObject<ResponsePack>(res[1]);
                     if (bodyJObj == null)
                     {
                         return receiveObj;
                     }
 
-                    var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString());
+                    var device = JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString());
                     if (device.device_mac.ToUpper() == DB_ResidenceData.Instance.HomeGateway.mac.ToUpper())
                     {
-                        MainPage.Log("鏈湴鎼滅储缃戝叧鎴愬姛");
+                        MainPage.Log("缃戝叧鏈湴鍦ㄧ嚎");
                         Ins.IsSearchLocalGatewaySuccessful = true;
                         Ins.GatewayOnline_Local = true;
                         if (!string.IsNullOrEmpty(device.gatewayId))
@@ -1123,21 +1060,17 @@
                         reportIp = device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧//"239.0.168.188";//
                         //2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑
                         Ins.IsLocalEncrypt = device.isLocalEncrypt;
-                        //MainPage.Log("缃戝叧鏈湴鍔犲瘑鐘舵�侊細" + device.local_encrypt.ToString());
-                        //鐧诲綍缃戝叧Tcp
-                        //OpenTcpClent();
-
+                        //鐧诲綍缃戝叧Tcp  tcp杩炴帴缃戝叧
+                        OpenTcpClent();
 
                     }
                 }
                 else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" ||
-                    receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" || 
-                    receiveObj.Topic == CommunicationTopic.ct.ControlGroupControlTopic + "_reply" || 
+                    receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" ||
+                    receiveObj.Topic == CommunicationTopic.ct.ControlGroupControlTopic + "_reply" ||
                     receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus ||
                     receiveObj.Topic.Contains(CommunicationTopic.ct.GatewayUpSortTopic))
                 {
-                    //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮�
-                    //Console.WriteLine($"{receiveObj.Topic}\r\n{receiveObj.BodyDataString}");
                     UpdataFunctionStatus(receiveObj.BodyDataString, null);
                 }
                 else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity + "_reply"
@@ -1146,11 +1079,10 @@
                 {
                     try
                     {
-                        MainPage.Log($"灞�鍩熺綉瀹夐槻淇℃伅: {receiveObj.Topic}  : 鍐呭: {res[1]}");
                         var tt = "";
                         lock (tt)
                         {
-                            var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
+                            var temp = JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
                             if (temp != null)
                             {
                                 Control_Udp.ReceiveRepeatManager(temp.id, null);
@@ -1175,7 +1107,7 @@
                 }
                 else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply")
                 {
-                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
+                    var temp = JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
                     if (temp.GetValue("objects").ToString().Contains("success"))
                     {
                         LocalTcpClientLogin = true;
@@ -1203,6 +1135,128 @@
             return receiveObj;
         }
 
+        public LocalCommunicationData AnalysisReceiveData(string topic, byte[] bodyBytes)
+        {
+            LocalCommunicationData receiveObj = new LocalCommunicationData();
+            receiveObj.Topic = topic;
+
+            if (receiveObj.Topic == CommunicationTopic.ct.HeartBeat + "_reply")
+            {
+                Ins.myTcpClient.ClearHeartBeatLog();
+                MainPage.Log("tcp蹇冭烦鍥炲");
+                return null;
+            }
+
+            //2021-09-23 杩囨护涓嶉渶瑕佽В瀵嗙殑涓婚 鐩墠鎼滅储缃戝叧涓婚涓嶅姞瀵�
+            if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply)
+            {
+                //鍒ゆ柇褰撳墠缃戝叧鏄惁寮�鍚簡鏈湴鍔犲瘑
+                if (IsLocalEncryptAndGetAesKey)
+                {
+                    byte[] receiveBytes = Securitys.EncryptionService.AesDecryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+                    if (receiveBytes != null)
+                    {
+                        receiveObj.BodyDataString = Encoding.UTF8.GetString(receiveBytes);
+                    }
+                }
+            }
+            else
+            {
+                receiveObj.BodyDataString = Encoding.UTF8.GetString(bodyBytes);
+            }
+
+            if (receiveObj.BodyDataString == null)
+            {
+                MainPage.Log($"TCP receiveObj.BodyDataString == null");
+                return null;
+            }
+
+            try
+            {
+                var idMsg = JsonConvert.DeserializeObject<ResponsePack>(receiveObj.BodyDataString);
+                var hasProcess = hasItBeenProcessed(idMsg.id);
+                if (hasProcess)
+                {
+                    //MainPage.Log($"TCP涓嶅鐞嗛噸澶嶆暟鎹畕idMsg.id}");
+                    return null;
+                }
+            }
+            catch (Exception ex)
+            {
+                MainPage.Log($"瑙f瀽鏁版嵁寮傚父:{ex.StackTrace}\r\n<<-->>{receiveObj.BodyDataString}");
+            }
+            MainPage.Log($"TCP澶勭悊鏁版嵁:Topic:{receiveObj.Topic}===Context====" + receiveObj.BodyDataString);
+
+
+            if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" ||
+                receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" ||
+                receiveObj.Topic == CommunicationTopic.ct.ControlGroupControlTopic + "_reply" ||
+                receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus ||
+                receiveObj.Topic.Contains(CommunicationTopic.ct.GatewayUpSortTopic))
+            {
+                UpdataFunctionStatus(receiveObj.BodyDataString, null);
+            }
+            else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity + "_reply"
+                || receiveObj.Topic == CommunicationTopic.ct.ReadSecurityStatus + "_reply"
+                || receiveObj.Topic == CommunicationTopic.ct.SecurityStatusUp)
+            {
+                try
+                {
+                    var tt = "";
+                    lock (tt)
+                    {
+                        var temp = JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
+                        if (temp != null)
+                        {
+                            Control_Udp.ReceiveRepeatManager(temp.id, null);
+                            foreach (var updataSecurity in temp.objects)
+                            {
+                                var updataLocalSecurity = FunctionList.List.securities.Find((obj) => obj.sid == updataSecurity.sid);
+                                if (updataLocalSecurity != null)
+                                {
+                                    updataLocalSecurity.status = updataSecurity.status;
+                                    updataLocalSecurity.alarm = updataSecurity.alarm;
+                                    ArmCenterPage.LoadEvent_RefreshSecurityStatus(updataLocalSecurity);
+                                }
+                            }
+                            HomePage.LoadEvent_RefreshSecurityStatus();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}");
+                }
+            }
+            else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply")
+            {
+                var temp = JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
+                if (temp.GetValue("objects").ToString().Contains("success"))
+                {
+                    LocalTcpClientLogin = true;
+                    try
+                    {
+                        loginGatewayThread?.Abort();
+                    }
+                    catch (Exception ex)
+                    {
+                        MainPage.Log($"缁堟鐧诲綍缃戝叧tcp寮傚父锛歿ex.Message}");
+                    }
+                    finally
+                    {
+                        loginGatewayThread = null;
+                    }
+                    MainPage.Log("灞�鍩熺綉tcp杩炴帴鐧诲綍缃戝叧鎴愬姛");
+                }
+            }
+            else
+            {
+                //涓�浜涚壒娈婄殑涓婚澶勭悊(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�)
+                Stan.HdlCloudReceiveLogic.Current.CloudOverallMsgReceiveEx(receiveObj.Topic, receiveObj.BodyDataString);
+            }
+            return receiveObj;
+        }
+
 
         private List<string> processedDataList = new List<string>();
         /// <summary>
@@ -1211,19 +1265,22 @@
         /// <returns></returns>
         private bool hasItBeenProcessed(string msgId)
         {
-            if (processedDataList.Contains(msgId))
+            lock (processedDataList)
             {
-                return true;
-            }
-            else
-            {
-                if (processedDataList.Count > 50)
+                if (processedDataList.Contains(msgId))
                 {
-                    processedDataList.RemoveAt(0);
+                    return true;
                 }
-                return false;
+                else
+                {
+                    processedDataList.Add(msgId);
+                    if (processedDataList.Count > 50)
+                    {
+                        processedDataList.RemoveAt(0);
+                    }
+                    return false;
+                }
             }
-
         }
 
 
@@ -1304,7 +1361,7 @@
                         {
                             if (FunctionList.List.OtherBrandFunction.Count == 0)
                             {
-                                MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�...");
+                                //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�...");
                                 return;
                             }
                             else
@@ -1321,7 +1378,6 @@
                         {
                             continue;
                         }
-                        MainPage.Log(localFunction.name);
 
                         //if (SPK.MusicSpkList().Contains(localFunction.spk))
                         //{
@@ -1332,14 +1388,14 @@
                         //        return;
                         //    }
                         //}
-                        MainPage.Log($"鏀跺埌鏁版嵁:{revString}");
+                        //MainPage.Log($"鏀跺埌鏁版嵁:{revString}");
                         foreach (var attr in updateTemp.status)
                         {
                             localFunction.time_stamp = temp.time_stamp;
                             localFunction.SetAttrState(attr.key, attr.value);
-                            
+
                         }
-                        if(localFunction.spk == SPK.AirSwitchP3)
+                        if (localFunction.spk == SPK.AirSwitchP3)
                         {
                             localFunction.online = updateTemp.online;
                         }
@@ -1347,7 +1403,7 @@
                         {
                             localFunction.updateTime = DateTime.Now;
                         }
-                       
+
 
                         //鏇存柊鐣岄潰鐘舵��
                         switch (localFunction.spk)
@@ -1359,6 +1415,13 @@
                                 AcstParentPage.UpdateAcstSubInfo(localFunction);
                                 AcstSubPage.UpdateStatus(localFunction);
                                 break;
+                            //case SPK.WaterHeaterJinmao:
+                            //    AcstParentPage.UpdateAcstSubInfo(localFunction);
+                            //    WaterHeaterJinmaoPage.UpdateStatus();
+                            //    break;
+                            //case SPK.InverterJinmao:
+                            //    InverterJinmaoPage.UpdateStatus(localFunction);
+                            //    break;
                             case SPK.AirSwitch:
                                 AirSwitchPage.UpdataState(localFunction);
                                 if (localFunction.GetAttribute(FunctionAttributeKey.Power) != null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
@@ -1425,6 +1488,7 @@
                                 break;
                             case SPK.AcStandard:
                             case SPK.HvacAC:
+                            case SPK.HvacAcPanel:
                             case SPK.AcIr:
                                 Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                 if (localFunction != null)
@@ -1468,6 +1532,7 @@
                                 }
                                 break;
                             case SPK.HvacFloorHeat:
+                            case SPK.HvacFloorHeatPanel:
                             case SPK.FloorHeatStandard:
                                 localFunction.lastState = "";
                                 switch (localFunction.GetAttrState(FunctionAttributeKey.Mode))
@@ -1510,7 +1575,8 @@
                                 EnvironmentalPage.LoadEvent_UpdataStatus(localFunction);
                                 //A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
                                 break;
-                            case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
+                            case SPK.SensorEnvironment:
+                            case SPK.SensorEnvironmentHailin:
                             case SPK.SensorEnvironment2:
                             case SPK.SensorEnvironment3:
                                 if (localFunction.GetAttributes().Contains(FunctionAttributeKey.Temperature))
@@ -1558,7 +1624,7 @@
                                 var tempPirStatus = localFunction.attributes.Find((sta) => sta.key == "people_status");
                                 if (tempPirStatus != null)
                                 {
-                                    if(tempPirStatus.state == "true")
+                                    if (tempPirStatus.state == "true")
                                     {
                                         localFunction.lastState = Language.StringByID(StringId.Someone);
                                     }
@@ -1617,11 +1683,30 @@
                             case SPK.MusicStandard:
                                 //UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp);
                                 Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�=======" + revString);
+                                foreach (var music in UI.Music.A31MusicModel.A31MusicModelList)//姣忔鏀跺埌鏁版嵁閮借鏇存柊涓�涓嬫椂闂�
+                                {
+                                    if (music.functionMusic.sid == localFunction.sid)
+                                    {
+                                        music.LastDateTime = DateTime.Now;
+                                    }
+                                }
+                                if (UI.Music.A31MusicModel.Current != null)
+                                {
+                                    UI.Music.A31MusicModel.Current.LastDateTime = DateTime.Now;
+                                }
                                 //wjc
                                 break;
+                            //case SPK.Inverter:
+                            //case SPK.InverterRst:
+                            //    var status = new Dictionary<string, object> { ["method"] = "status", ["data"] = temp.objects };
+                            //    Application.RunOnMainThread(() =>
+                            //    {
+                            //        Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{JsonConvert.SerializeObject(status)}\')");
+                            //    });
+                            //    break;
                         }
 
-                        
+
                         HomePage.UpdataFunctionStates(localFunction);
                         RoomPage.UpdataStates(localFunction);
                         FunctionPage.UpdataStates(localFunction);
@@ -1649,7 +1734,7 @@
             {
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID, extStr);
-                var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
+                var functionControlDataJson = JsonConvert.SerializeObject(functionControlDataObj);
                 var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson);
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0);
             }
@@ -1682,7 +1767,7 @@
                     var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/pwdConfirm", requestJson);
                     if (pack.Code == StateCode.SUCCESS)
                     {
-                        Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(pack.Data.ToString());
+                        JObject pairs = JObject.Parse(pack.Data.ToString());
                         var scrip = pairs.GetValue("scrip");
 
                         d = new Dictionary<string, object>();

--
Gitblit v1.8.0