From 3272ca5b51e19f7f8a827b0f68400570a547fe60 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 28 四月 2020 15:02:44 +0800
Subject: [PATCH] 2020-04-28-1

---
 ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs |  372 ++++++++++++++++++++++++++++++----------------------
 1 files changed, 214 insertions(+), 158 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs
index 8c1ef41..a105443 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs
@@ -60,6 +60,12 @@
         /// <value><c>true</c> if is remote; otherwise, <c>false</c>.</value>
         public static bool IsRemote;
 
+        /// <summary>
+        /// 鏄惁鎷ユ湁杩滅▼杩炴帴鐨勬潈闄�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public static bool AllowRemoteCtrl = true;
+
         /// <summary>
         /// 缃戝叧淇濆瓨璺緞
         /// </summary>
@@ -137,12 +143,6 @@
         public List<CommonDevice> DeviceList = new List<CommonDevice>();
 
         /// <summary>
-        /// 鎵�鏈夌綉鍏充腑鐨勮澶囧垪琛�
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public List<CommonDevice> AllGatewayDeviceList = new List<CommonDevice>();
-
-        /// <summary>
         /// 缃戝叧涓満鏅垪琛�
         /// 涓�涓満鏅腑鍖呭惈鎵�鏈変俊鎭紝鍖呮嫭鍦烘櫙璁惧淇℃伅
         /// </summary>
@@ -154,34 +154,6 @@
         /// </summary>
         [Newtonsoft.Json.JsonIgnore]
         public List<Scene.GetSceneDeviceListInfo> SceneDeviceList = new List<Scene.GetSceneDeviceListInfo>();
-
-        /// <summary>
-        /// 缃戝叧涓�昏緫鍒楄〃
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public static List<Logic.GetLogicInfoResponseData> LogicList = new List<Logic.GetLogicInfoResponseData>();
-
-        /// <summary>
-        /// 缃戝叧涓環dl绉佹湁鎸夐敭缁戝畾鍒楄〃
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public List<HDLbutton> HdlButtonList = new List<HDLbutton>();
-
-        //缃戝叧涓柊鐨勮澶囧垪琛�
-        [Newtonsoft.Json.JsonIgnore]
-        public List<CommonDevice> ListNewDeviceInfoData = new List<CommonDevice>();
-
-        /// <summary>
-        /// 绉佹湁鎸夐敭淇℃伅鍒楄〃
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public System.Collections.Generic.Dictionary<string, HDLbutton> hdlButtonInfoList = new Dictionary<string, HDLbutton>();
-
-        /// <summary>
-        /// 浼犳劅鍣ㄤ俊鎭垪琛�
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public System.Collections.Generic.Dictionary<string, Scene.TaskListInfo> sceneTaskInfoList = new Dictionary<string, Scene.TaskListInfo>();
 
         #region action variable
         /// <summary>
@@ -603,7 +575,8 @@
                     var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 82 } };
                     var data = new JObject { { "HomeId", homeId }, { "AccountId", accountId } };
                     jObject.Add("Data", data);
-                    Send("GwSetHomeId", jObject.ToString());
+                    //浣忓畢ID鐨勮缃�,鍥哄畾浣跨敤灞�鍩熺綉,涓嶅瓨鍦ㄨ繙绋嬬殑璇存硶
+                    SendLocation("GwSetHomeId", System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
                 }
                 catch { }
 
@@ -3047,22 +3020,6 @@
         public static readonly System.Collections.Generic.List<IStatus> StatusList = new System.Collections.Generic.List<IStatus>();
 
         /// <summary>
-        /// 璁惧鐘舵�佹洿鏂�
-        /// </summary>
-        /// <param name="commonDevice">Common device.</param>
-        public static void UpdateDeviceStatus(CommonDevice commonDevice)
-        {
-            if (commonDevice == null)
-            {
-                return;
-            }
-            for (int i = 0; i < StatusList.Count; i++)
-            {
-                StatusList[i].Changed(commonDevice);
-            }
-        }
-
-        /// <summary>
         /// 璁惧淇℃伅鍙樺寲
         /// <para>type锛氬鏋滀负 DeviceInComingRespon:璁惧鏂颁笂鎶�</para>
         /// <para>type锛氬鏋滀负 IASInfoReport:RemoveDeviceRespon</para>
@@ -3173,14 +3130,14 @@
                             {
                                 if (localMqttClient.Options == null)
                                 {
-                                    var options = new MQTTnet.Client.Options.MqttClientOptionsBuilder().WithClientId(currentGuid.ToString())
-                       .WithTcpServer(brokerName, 1883)
-                       .WithKeepAlivePeriod(TimeSpan.FromSeconds(20))
-                       .WithCleanSession()
-                        .WithCommunicationTimeout(TimeSpan.FromSeconds(4))
-                       .WithCredentials("", "")
-                       .Build();
-                                    await localMqttClient.ConnectAsync(options, CancellationToken.None);
+                                    var options = new MQTTnet.Client.Options.MqttClientOptionsBuilder()//MQTT杩炴帴鍙傛暟濉厖
+                                    .WithClientId(currentGuid.ToString())//瀹㈡埛绔疘D
+                                    .WithTcpServer(brokerName, 1883)//TCP鏈嶅姟绔�  1883  锛屽嵆MQTT鏈嶅姟绔�
+                                    .WithCredentials("", "")//"", "")//鍑瘉  甯愬彿 瀵嗙爜
+                                    .WithCommunicationTimeout(new TimeSpan(0, 0, 60)) //閲嶈繛瓒呮椂鏃堕棿锛岄粯璁�5s
+                                    .WithKeepAlivePeriod(new TimeSpan(0, 0, 15)) //淇濇寔杩炴帴鏃堕棿锛岄粯璁�5s锛屽績璺冲寘
+                                    .Build();//
+                                    await localMqttClient.ConnectAsync(options);
                                 }
                                 else
                                 {
@@ -3228,6 +3185,11 @@
         /// <returns></returns>
         static async System.Threading.Tasks.Task initGateWayBaseInfomation()
         {
+            if (AllowRemoteCtrl == false)
+            {
+                //娌℃湁杩滅▼杩炴帴鐨勬潈闄�
+                return;
+            }
             string loginToken = Config.Instance.Token;
             if (Config.Instance.Home.IsOthreShare == true)
             {
@@ -3270,11 +3232,13 @@
                     var statuCode = jobject["StateCode"].ToString();
                     if (statuCode != "Success")
                     {
-                        //Log鍑哄姏
-                        Shared.Phone.UserCenter.HdlLogLogic.Current.WriteLog(-1, "鎺ュ彛璁块棶澶辫触鈽咃細App/GetSingleHomeGatewayPagger " + statuCode);
                         //搴忓垪鍖栧璞�
                         var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(pra2);
-                        Shared.Phone.UserCenter.HdlLogLogic.Current.WriteLog(-1, "鍙傛暟锛歕r\n" + requestJson);
+                        //Log鍑哄姏
+                        string errorMsg = "鎺ュ彛璁块棶澶辫触鈽咃細App/GetSingleHomeGatewayPagger " + statuCode + "\r\n";
+                        errorMsg += "鍙傛暟锛歕r\n" + requestJson;
+                        Shared.Phone.UserCenter.HdlLogLogic.Current.WriteLog(-1, errorMsg);
+                        return;
                     }
 
                     var responseData = jobject["ResponseData"];
@@ -3322,10 +3286,12 @@
         /// <param name="brokerName">Broker name.</param>
         public static async System.Threading.Tasks.Task StartRemoteMqtt()
         {
-            if (remoteMqttIsConnecting
-                       || !Shared.Common.Config.Instance.IsLogin
-                       || Shared.Common.Config.Instance.HomeId == ""
-                       || remoteIsConnected)
+            //杩藉姞锛氭病鏈夎繙绋嬭繛鎺ョ殑鏉冮檺
+            if (AllowRemoteCtrl == false
+               || remoteMqttIsConnecting
+               || !Shared.Common.Config.Instance.IsLogin
+               || Shared.Common.Config.Instance.HomeId == ""
+               || remoteIsConnected)
             {
                 return;
             }
@@ -3343,10 +3309,20 @@
                         if (RemoteMqttClient.ApplicationMessageReceivedHandler == null)
                         {
                             RemoteMqttClient.UseApplicationMessageReceivedHandler((e) =>
-                            {
-                                if (!RemoteMqttClient.IsConnected || !IsRemote)
-                                {
-                                    return;
+                            {
+                                //杩欓噷鏄壒娈婄殑涓婚
+                                if (e.ApplicationMessage.Topic == "/ZigbeeGateWayToClient/" + Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze"//韪汉涓嬬嚎
+                                   || e.ApplicationMessage.Topic == "/ZigbeeGateWayToClient/" + Config.Instance.Guid + "/Push/Deleted"//鍒嗕韩鍒犻櫎
+                                   || e.ApplicationMessage.Topic == "/ZigbeeGateWayToClient/" + Config.Instance.Guid + "/Push/DeletedShareData"//鍒嗕韩鍒犻櫎
+                                   || e.ApplicationMessage.Topic == "/ZigbeeGateWayToClient/" + Config.Instance.Guid + "/Push/Update"//鎴愬憳鏉冮檺鍙樻洿
+                                   || e.ApplicationMessage.Topic == "/ZigbeeGateWayToClient/" + Config.Instance.Home.Id + "_" + Config.Instance.Guid + "/PrimaryUserDelYou")//瀛愯处鍙疯鍒犻櫎
+                                {
+                                    mqttRemoteClient_MqttMsgPublishReceived(e);
+                                    return;
+                                }
+                                if (!RemoteMqttClient.IsConnected || !IsRemote)
+                                {
+                                    return;
                                 }
                                 mqttRemoteClient_MqttMsgPublishReceived(e);
                             });
@@ -3358,7 +3334,7 @@
                             {
                                 DebugPrintLog($"杩滅▼杩炴帴鏂紑");
                                 await DisConnectRemoteMqttClient("StartRemoteMqtt.DisconnectedHandler");
-                                await StartRemoteMqtt();
+                                //await StartRemoteMqtt();
                             });
                         }
                         if (RemoteMqttClient.ConnectedHandler == null)
@@ -3366,6 +3342,22 @@
                             RemoteMqttClient.UseConnectedHandler(async (e) =>
                             {
                                 DebugPrintLog($"杩滅▼杩炴帴鎴愬姛");
+
+                                if (Config.Instance.Home.IsOthreShare == true)
+                                {
+                                    //璁㈤槄涓�涓垚鍛樿鍒犻櫎鐨勪富棰�
+                                    string myGuid = Config.Instance.Guid;
+                                    await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + myGuid + "/Push/Deleted");
+                                    //璁㈤槄涓�涓垎浜暟鎹凡缁忓彉鏇寸殑涓婚
+                                    await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + myGuid + "/Push/DeletedShareData");
+                                    //璁㈤槄涓�涓瓙璐﹀彿琚垹闄ょ殑涓婚
+                                    await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + Config.Instance.Home.Id + "_" + myGuid + "/PrimaryUserDelYou");
+                                    //璁㈤槄涓�涓垚鍛樻潈闄愬凡缁忓彉鏇寸殑涓婚
+                                    await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + myGuid + "/Push/Update");
+                                }
+                                //璁㈤槄涓�涓尋涓嬬嚎鐨勪富棰�
+                                await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze");
+
                                 await initGateWayBaseInfomation();
                                 Shared.Phone.UserCenter.HdlGatewayLogic.Current.CheckGatewayByConnectChanged(Shared.Phone.UserCenter.GatewayConnectMode.Remote);
                                 //娌℃湁涓荤綉鍏虫椂涓诲姩璇诲彇锛岃幏鍙栦富缃戝叧淇℃伅
@@ -3411,24 +3403,51 @@
 
                     try
                     {
-                        var jsonData = new Dictionary<string, object> { ["RequestVersion"] = "RequestVersion", ["RequestSource"] = 0, ["LoginAccessToken"] = Config.Instance.Token, ["RequestProtocolType"] = 0 };
-                        var bytes = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(jsonData));
-
-                        var result = await CommonPage.Instance.DoRequestZigbeeHttpsInterface("https://global.hdlcontrol.com/HangZhouHdlCloudApi/EmqMqtt/GetConnMqttInfo", bytes, Config.Instance.Token);
-                        //{
-                        //"ResponseVersion": "RequestVersion1",
-                        //"StateCode": "Success",
-                        //"ErrorInfo": null,
-                        //"ResponseData": { < !--濡備笅淇℃伅鍙兘浣跨敤涓�娆★紝鍗充究浣犺繛鎺ュけ璐�!-- >
-                        //   "ConnEmqDomainPort": "tcp://developer.hdlcontrol.com:1883",
-                        //  "ConnEmqClientId": "ZigbeeClientTcp_33094de8-34ba-4e38-93c2-ac8da16d0e68_Zigbee",
-                        //  "ConnEmqUserName": "33094de8-34ba-4e38-93c2-ac8da16d0e68",
-                        //  "ConnEmqPwd": "4a265b65-d6cc-4a"
-                        //}
-                        //}
+                        byte[] result = null;
+                        if (Config.Instance.Home.IsOthreShare == false)
+                        {
+                            //涓讳汉
+                            var jsonData = new Dictionary<string, object>
+                            {
+                                ["RequestVersion"] = CommonPage.RequestVersion,
+                                ["RequestSource"] = 0,
+                                ["LoginAccessToken"] = Config.Instance.Token,
+                                ["RequestProtocolType"] = 0,
+                                ["PlatformStr"] = "h",//杩欎袱涓�煎鏋滀笉璁剧疆,鍒欎簯绔笉鍙戝竷涓婚
+                                ["PublishPayloadJsonStr"] = "1"
+                            };
+                            var bytes = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(jsonData));
+                            result = await CommonPage.Instance.DoRequestZigbeeHttpsInterface("https://global.hdlcontrol.com/HangZhouHdlCloudApi/EmqMqtt/GetConnMqttInfo", bytes, Config.Instance.Token);
+                        }
+                        else
+                        {
+                            //鍒嗕韩鐨�
+                            var jsonData = new Dictionary<string, object>
+                            {
+                                ["RequestVersion"] = CommonPage.RequestVersion,
+                                ["RequestSource"] = 0,
+                                ["LoginAccessToken"] = Config.Instance.Token,
+                                ["RequestProtocolType"] = 0,
+                                ["MainUserDistributedMark"] = Config.Instance.Home.MainUserDistributedMark,
+                                ["HomeId"] = Config.Instance.Home.Id,
+                                ["PlatformStr"] = "h",//杩欎袱涓�煎鏋滀笉璁剧疆,鍒欎簯绔笉鍙戝竷涓婚
+                                ["PublishPayloadJsonStr"] = "1"
+                            };
+                            var bytes = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(jsonData));
+                            result = await CommonPage.Instance.DoRequestZigbeeHttpsInterface("https://global.hdlcontrol.com/HangZhouHdlCloudApi/EmqMqtt/ShareMemberConnMqttInfo", bytes, Config.Instance.Token);
+                        }
                         if (result != null)
                         {
                             var jobject = Newtonsoft.Json.Linq.JObject.Parse(Encoding.UTF8.GetString(result));
+                            if (jobject["StateCode"].ToString() == "NotAllowRemoteCtrl")
+                            {
+                                //娌℃湁杩滅▼杩炴帴鐨勬潈闄�
+                                AllowRemoteCtrl = false;
+                                return;
+                            }
+                            //铏界劧涓嶇煡閬撳鎸や笅绾块偅涓�鍧楁湁娌℃湁鐢�,涓嶈繃鍏堣繖涔堝紕
+                            await System.Threading.Tasks.Task.Delay(1500);
+
                             var responseData = jobject["ResponseData"];
                             if (responseData != null)
                             {
@@ -3436,6 +3455,8 @@
                                 var connEmqClientId = responseData["ConnEmqClientId"]?.ToString();
                                 var connEmqUserName = responseData["ConnEmqUserName"]?.ToString();
                                 var connEmqPwd = responseData["ConnEmqPwd"]?.ToString();
+                                //璁板綍璧峰綋鍓嶇殑瀹㈡埛绔疘D
+                                Config.Instance.ConnEmqClientId = connEmqClientId;
 
                                 var connEmqDomainPorts = connEmqDomainPort.Replace("//", "").Split(':');
                                 var domain = connEmqDomainPorts[1];
@@ -3447,7 +3468,7 @@
            .WithCredentials(connEmqUserName, connEmqPwd)
            .WithKeepAlivePeriod(TimeSpan.FromSeconds(20))
            .WithCleanSession()
-           .WithCommunicationTimeout(TimeSpan.FromSeconds(6))
+           //.WithCommunicationTimeout(TimeSpan.FromSeconds(10))
            .Build();
                                 await DisConnectRemoteMqttClient("StartRemoteMqtt");
                                 await RemoteMqttClient.ConnectAsync(options, CancellationToken.None);
@@ -3481,7 +3502,8 @@
                 {
                     localIsConnected = false;
                     DebugPrintLog($"Local涓诲姩鏂紑_{s}");
-                    await localMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions {  }, CancellationToken.None);
+                    //await localMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions {  }, CancellationToken.None);
+                    await localMqttClient.DisconnectAsync(); 
                 }
             }
             catch (Exception ex)
@@ -3501,7 +3523,8 @@
                 {
                     remoteIsConnected = false;
                     DebugPrintLog($"Remote涓诲姩鏂紑_{s}");
-                    await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
+                    //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
+                    await RemoteMqttClient.DisconnectAsync();
                 }
             }
             catch(Exception e) { 
@@ -3601,9 +3624,7 @@
                         //鏂囦欢娴佷笉鐢ㄥ姞瀵�
                         if (topic != "FileTransfer/SendFile")
                         {
-                            topic = ZigBee.Common.SecuritySet.AesEncrypt(System.Text.Encoding.UTF8.GetBytes(topic), Password);
-                            topic = topic.Replace("/", "[[$-MQTT_TILT_SYMBOL_REPLACE-$]]").Replace("+", "[[$-MQTT_PLUS_SYMBOL_REPLACE-$]]");
-                            message = System.Text.Encoding.UTF8.GetBytes(SecuritySet.AesEncrypt(message, password));
+                            message = SecuritySet.AesEncryptBytes(message, password);
                         }
                     }
                     if (localIsConnected)
@@ -3614,10 +3635,12 @@
                         }
                         catch(Exception e)
                         {
+                            DebugPrintLog($"Local涓诲姩鏂紑_{e.Message}");
                             await DisConnectLocalMqttClient(e.Message);
                             await StartLocalMqtt("ReConnect");
                             if (localIsConnected)
                             {
+                                DebugPrintLog($"灞�鍩熺綉鈥斺�斾簩娆″彂閫佸埌缃戝叧鐨勪富棰�:{topic}_鍙戦�佸埌缃戝叧鐨勬暟鎹�:{System.Text.Encoding.UTF8.GetString(message)}_褰撳墠缃戝叧{CurrentGateWayId} 鏄惁鍔犲瘑:{IsEncry}");
                                 await localMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topic, Payload = message, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce, Retain = retain });
                             }
                         }
@@ -3644,8 +3667,58 @@
                 return;
             }
             await Send(topic, System.Text.Encoding.UTF8.GetBytes(message), retain);
+        }
+
+        /// <summary>
+        /// 寮哄埗鎸囧畾浣跨敤鏈湴灞�鍩熺綉鍙戦�佹秷鎭埌鏈嶅姟鍣�
+        /// </summary>
+        /// <returns></returns>
+        /// <param name="topic"></param>
+        /// <param name="message"></param>
+        /// <param name="retain"></param>
+        public async Task SendLocation(string topic, byte[] message, bool retain = false)
+        {
+            try
+            {
+                if (Shared.Common.Config.Instance.HomeId == "")
+                {
+                    return;
+                }
+
+                DebugPrintLog($"灞�鍩熺綉鈥斺�斿彂閫佸埌缃戝叧鐨勪富棰�:{topic}_鍙戦�佸埌缃戝叧鐨勬暟鎹�:{System.Text.Encoding.UTF8.GetString(message)}_褰撳墠缃戝叧{CurrentGateWayId} 鏄惁鍔犲瘑:{IsEncry}");
+
+                if (IsEncry)
+                {
+                    //鏂囦欢娴佷笉鐢ㄥ姞瀵�
+                    if (topic != "FileTransfer/SendFile")
+                    {
+                        message = SecuritySet.AesEncryptBytes(message, password);
+                    }
+                }
+                if (localIsConnected)
+                {
+                    try
+                    {
+                        await localMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topic, Payload = message, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce, Retain = retain });
+                    }
+                    catch (Exception e)
+                    {
+                        DebugPrintLog($"Local涓诲姩鏂紑_{e.Message}");
+                        await DisConnectLocalMqttClient(e.Message);
+                        await StartLocalMqtt("ReConnect");
+                        if (localIsConnected)
+                        {
+                            DebugPrintLog($"灞�鍩熺綉鈥斺�斾簩娆″彂閫佸埌缃戝叧鐨勪富棰�:{topic}_鍙戦�佸埌缃戝叧鐨勬暟鎹�:{System.Text.Encoding.UTF8.GetString(message)}_褰撳墠缃戝叧{CurrentGateWayId} 鏄惁鍔犲瘑:{IsEncry}");
+                            await localMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topic, Payload = message, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce, Retain = retain });
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                DebugPrintLog($"Send:{ex.Message}");
+            }
         }
-
 
         [Serializable]
         public class CloudTimeResponse
@@ -3664,8 +3737,7 @@
         {
             try
             {
-                var topic = e.ApplicationMessage.Topic.TrimStart('/');
-                topic = topic.Replace("[[$-MQTT_TILT_SYMBOL_REPLACE-$]]", "/").Replace("[[$-MQTT_PLUS_SYMBOL_REPLACE-$]]", "+");
+                var topic = e.ApplicationMessage.Topic.TrimStart('/');
                 var payload = e.ApplicationMessage.Payload;
 
                 var message = string.Empty;
@@ -3680,7 +3752,7 @@
                 {
                     return;
                 }
-                if (topics[2]== "NotifyGateWayInfoChagne") {
+                if (topics[2]== "NotifyGateWayInfoChange") {
                     initGateWayBaseInfomation();
                     return;
                 }
@@ -3727,39 +3799,36 @@
         {
             try
             {
-                var topic = e.ApplicationMessage.Topic;
-                topic = topic.Replace("[[$-MQTT_TILT_SYMBOL_REPLACE-$]]", "/").Replace("[[$-MQTT_PLUS_SYMBOL_REPLACE-$]]", "+");
-                var message = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+                var topic = e.ApplicationMessage.Topic;
+                string payloadString = "";
 
                 if (IsEncry)
                 {
                     //涓婚
-                    topic = Common.SecuritySet.AesDecrypt(System.Text.Encoding.UTF8.GetBytes(topic), Password);
                     //涓嬭浇鐨勫瓧鑺傛祦涓嶉渶瑕佽В瀵�
                     if (topic.Split('/')[0] + "/" + topic.Split('/')[1] == topic.Split('/')[0] + "/" + "FileTransfer")
                     {
                         if (topic.Split('/')[2] != "DownloadFile")
                         {
-                            message = Common.SecuritySet.AesDecrypt(e.ApplicationMessage.Payload, Password);
+                            payloadString = System.Text.Encoding.UTF8.GetString(Common.SecuritySet.AesDecryptBytes(e.ApplicationMessage.Payload, Password));
                         }
                     }
                     else if (topic == topic.Split('/')[0] + "/" + "SendAESKey_Respon") { }//鍥炲涓婚鏄鏂囷紝鏁版嵁鏄槑鏂�
                     else
                     {
-                        message = Common.SecuritySet.AesDecrypt(e.ApplicationMessage.Payload, Password);
+                        payloadString = System.Text.Encoding.UTF8.GetString(Common.SecuritySet.AesDecryptBytes(e.ApplicationMessage.Payload, Password));
                     }
                 }
-
-#if DEBUG
-                DebugPrintLog($"缃戝叧杩斿洖鐨勪富棰�:{topic}_缃戝叧杩斿洖鐨勮礋杞�:{message}_{System.DateTime.Now.ToString()}");
-#endif
-                ReceiveMessage(topic, message, e.ApplicationMessage.Payload);
+                else
+                {
+                    payloadString = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+                }
+                DebugPrintLog($"缃戝叧杩斿洖鐨勪富棰�:{topic}_缃戝叧杩斿洖鐨勮礋杞�:{payloadString}");
+                ReceiveMessage(topic, payloadString, e.ApplicationMessage.Payload);
             }
             catch (Exception ex)
             {
-#if DEBUG
                 DebugPrintLog($"鎺ユ敹缃戝叧鏁版嵁寮傚父:{ex.Message}");
-#endif
             }
         }
 
@@ -3790,7 +3859,10 @@
                     epoint = topic.Split('/')[3];
                     cluID = topic.Split('/')[4];
                     attrId = topic.Split('/')[5];
-                }
+                }
+
+                //鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�)
+                Shared.Phone.UserCenter.HdlGatewayReceiveLogic.Current.GatewayOverallMsgReceive(gatewayID, topic, reportStatus, message);
 
                 var gwa = GateWayList.Find(obj => obj.getGatewayBaseInfo.gwID == gatewayID);
                 if (gwa == null)
@@ -3822,9 +3894,6 @@
                 {
                     jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                 }
-
-                //鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�)
-                Shared.Phone.UserCenter.HdlGatewayReceiveLogic.Current.GatewayOverallMsgReceive(gatewayID, topic, reportStatus, jobject);
 
                 #region 杩滅▼,涓荤綉鍏充笂鎶ラ�氱煡
                 if (IsRemote)
@@ -3897,8 +3966,7 @@
                         DebugPrintLog("DeviceInComingRespon宸茬粡閫氱煡");
                         gwa.ReportAction("DeviceInComingRespon", tempDevice.getNewDeviceInfo);
                     }
-                    UpdateDeviceInfo(tempDevice, "DeviceInComingRespon");
-                    UpdateDeviceStatus(gwa);
+                    UpdateDeviceInfo(tempDevice, "DeviceInComingRespon");
                 }
                 #endregion
                 #region 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣�
@@ -3916,7 +3984,6 @@
                     if (infoTempDevice == null)
                     {
                         gwa.DeviceList.Add(tempDevice);
-                        UpdateDeviceStatus(tempDevice);
                         UpdateDeviceInfo(tempDevice, "OnlineStatusChange");
                     }
                     else
@@ -3926,7 +3993,6 @@
                             infoTempDevice.DeviceInfo.IsOnline = infoTempDevice.IsOnline;
                         }
                         UpdateDeviceInfo(infoTempDevice, "OnlineStatusChange");
-                        UpdateDeviceStatus(infoTempDevice);
                     }
                 }
                 #endregion
@@ -3952,7 +4018,6 @@
                                     }
                                     else
                                     {
-                                        UpdateDeviceStatus(tempDevice);
                                         UpdateDeviceInfo(tempDevice, "RemoveDeviceRespon");
                                         if (tempDevice.removeDeviceResponseData.Result == 0)
                                         {
@@ -3980,7 +4045,6 @@
 
                     var tempDevice = new CommonDevice { DeviceID = deviceID, DeviceAddr = deviceAddr, DeviceEpoint = tempEpoint, DataID = dataId };
                     tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(jobject["Data"].ToString());
-                    UpdateDeviceStatus(tempDevice);
                     UpdateDeviceInfo(tempDevice, "DeviceStatusReport");
                 }
                 #endregion
@@ -4002,7 +4066,6 @@
                                 DebugPrintLog("DoorLockProgrammingEventNotificationCommand宸茬粡閫氱煡");
                                 gwa.ReportAction("DoorLockProgrammingEventNotificationCommand", doorLock);
                             }
-                            UpdateDeviceStatus(doorLock);
                             UpdateDeviceInfo(doorLock, "DoorLockProgrammingEventNotificationCommand");
                             break;
                     }
@@ -4026,7 +4089,6 @@
                                 DebugPrintLog("DoorLockProgrammingEventNotificationCommand宸茬粡閫氱煡");
                                 gwa.ReportAction("DoorLockProgrammingEventNotificationCommand", doorLock);
                             }
-                            UpdateDeviceStatus(doorLock);
                             UpdateDeviceInfo(doorLock, "DoorLockProgrammingEventNotificationCommand");
                             break;
                     }
@@ -4048,8 +4110,6 @@
                                 //ias.Save();
                                 gwa.ReportAction("IASInfoReport", ias.iASInfo);
                             }
-
-                            UpdateDeviceStatus(ias);
                             UpdateDeviceInfo(ias, "IASInfoReport");
                             break;
                     }
@@ -4164,37 +4224,37 @@
                 #region 閫昏緫琚皟鐢ㄥ弽棣�
                 else if (topic == gatewayID + "/" + "Logic/Execute_Respon")
                 {
-                    var logic = new Logic() { DataID = jobject.Value<int>("Data_ID"), GateWayId = gwa.getGatewayBaseInfo.gwID };
-                    logic.logicExecuteRespo = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic.ExecuteResponse>(jobject["Data"].ToString());
+                    //var logic = new Logic() { DataID = jobject.Value<int>("Data_ID"), GateWayId = gwa.getGatewayBaseInfo.gwID };
+                    //logic.logicExecuteRespo = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic.ExecuteResponse>(jobject["Data"].ToString());
 
-                    if (logic.logicExecuteRespo == null)
-                    {
-                        return;
-                    }
-                    //涓婃姤绫诲瀷閫氱煡
-                    if (gwa.ReportAction != null)
-                    {
-                        DebugPrintLog("LogicExecuteReport宸茬粡閫氱煡");
-                        gwa.ReportAction("LogicExecuteReport", logic.logicExecuteRespo);
-                    }
+                    //if (logic.logicExecuteRespo == null)
+                    //{
+                    //    return;
+                    //}
+                    ////涓婃姤绫诲瀷閫氱煡
+                    //if (gwa.ReportAction != null)
+                    //{
+                    //    DebugPrintLog("LogicExecuteReport宸茬粡閫氱煡");
+                    //    gwa.ReportAction("LogicExecuteReport", logic.logicExecuteRespo);
+                    //}
                 }
                 #endregion
                 #region 鏃堕棿鐐规潯浠舵帹杩熸墽琛�
                 else if (topic == gatewayID + "/" + "Logic/TimingWillArrive")
                 {
-                    var logic = new Logic() { DataID = jobject.Value<int>("Data_ID"), GateWayId = gwa.getGatewayBaseInfo.gwID };
-                    logic.timingWillArriveData = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic.TimingWillArriveData>(jobject["Data"].ToString());
+                    //var logic = new Logic() { DataID = jobject.Value<int>("Data_ID"), GateWayId = gwa.getGatewayBaseInfo.gwID };
+                    //logic.timingWillArriveData = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic.TimingWillArriveData>(jobject["Data"].ToString());
 
-                    if (logic.timingWillArriveData == null)
-                    {
-                        return;
-                    }
-                    //涓婃姤绫诲瀷閫氱煡
-                    if (gwa.ReportAction != null)
-                    {
-                        DebugPrintLog("TimingWillArrive宸茬粡閫氱煡");
-                        gwa.ReportAction("TimingWillArrive", logic.timingWillArriveData);
-                    }
+                    //if (logic.timingWillArriveData == null)
+                    //{
+                    //    return;
+                    //}
+                    ////涓婃姤绫诲瀷閫氱煡
+                    //if (gwa.ReportAction != null)
+                    //{
+                    //    DebugPrintLog("TimingWillArrive宸茬粡閫氱煡");
+                    //    gwa.ReportAction("TimingWillArrive", logic.timingWillArriveData);
+                    //}
                 }
                 #endregion
                 #region 妯″紡瀹夐槻鍔ㄤ綔琚渶缁堟縺娲绘椂鍙戦�佹姤璀︿俊鎭�
@@ -4268,22 +4328,18 @@
                 #region 璁惧璇锋眰APP鑾峰彇鍗囩骇鏁版嵁
                 else if (topic == gatewayID + "/" + "ZbDataPassthrough")
                 {
-                    var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
-                    gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
-                    if (gatewayTemp.clientDataPassthroughResponseData == null)
-                    {
-                        return;
-                    }
-
                     //涓婃姤绫诲瀷閫氱煡
                     if (gwa.ReportAction != null)
-                    {
-                        DebugPrintLog("DeviceRequestAcUpdateData");
-                        gwa.ReportAction("DeviceRequestAcUpdateData", gatewayTemp.clientDataPassthroughResponseData);
+                    {
+                        var clientDataPassthrough = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
+                        if (clientDataPassthrough != null)
+                        {
+                            DebugPrintLog("DeviceRequestAcUpdateData");
+                            gwa.ReportAction("DeviceRequestAcUpdateData", clientDataPassthrough);
+                        }
                     }
                 }
                 #endregion
-                DebugPrintLog("缃戝叧杩斿洖鏁版嵁閫氱煡");
             }
             catch (Exception ex)
             {

--
Gitblit v1.8.0