From dd3fecc3a8b92b377febfcf92d32ec22a07724f6 Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期日, 26 九月 2021 15:21:57 +0800
Subject: [PATCH] 主从网关属性,防挤下线账号删除

---
 HDL_ON/DAL/Mqtt/MqttClient.cs |  533 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 371 insertions(+), 162 deletions(-)

diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 2a95958..94a7cae 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -11,6 +11,7 @@
 using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
 using HDL_ON.UI;
+using HDL_ON.DAL.Server;
 
 namespace HDL_ON.DAL.Mqtt
 {
@@ -19,7 +20,8 @@
         /// <summary>
         /// 鍔犲瘑閫氳KEY
         /// </summary>
-        static string mqttEncryptKey = "";
+        //static string mqttEncryptKey = "";
+        static string tuyaEncryptKey = "";
         //static string checkGatewayTopicBase64 = "";
         static bool hadGateway = true;
         /// <summary>
@@ -56,37 +58,32 @@
         /// </summary>
         static string PushSignStr = DateTime.Now.Ticks.ToString();
 
-        /// <summary>
-        /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+        /// <summary>
+        /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
         /// </summary>
-        static async Task DisConnectRemoteMqttClient(string s = "")
-        {
+        static async Task DisConnectRemoteMqttClient(string s = "")
+        {
             try
-            {
+            {
                 if (remoteIsConnected)
                 {
                     remoteIsConnected = false;
                     isSubscribeSuccess = false;
-                    Utlis.WriteLine($"Remote涓诲姩鏂紑_{s}");
-                    //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
+                    Utlis.WriteLine($"Remote涓诲姩鏂紑_{s}");
+                    //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
                     await RemoteMqttClient.DisconnectAsync();
-
-                    if (Control.Ins.IsRemote)
-                    {
-                        Control.Ins.GatewayOnline = false;
-                    }
-                }
+                }
             }
             catch (Exception e)
             {
-                Utlis.WriteLine($"Remote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
-            }
+                Utlis.WriteLine($"Remote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+            }
         }
 
-        /// <summary>
-        /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+        /// <summary>
+        /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
         /// </summary>
-        static async Task DisConnectRemoteMqttClientWhenStart(string s = "")
+        static async Task DisConnectRemoteMqttClientWhenStart(string s = "")
         {
             try
             {
@@ -97,7 +94,7 @@
             }
             catch (Exception e)
             {
-                Utlis.WriteLine($"RemoteStart鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+                Utlis.WriteLine($"RemoteStart鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
             }
         }
 
@@ -136,10 +133,13 @@
                 {
                     try
                     {
-                        System.Threading.Thread.Sleep(500);
-                        if (!Control.Ins.IsRemote) continue;
+                        System.Threading.Thread.Sleep(2000);
                         //杩涘叆鍚庡彴涓嶅鐞�
                         if (MainPage.IsEnterBackground) continue;
+                        if (MqttInfoConfig.Current.HomeGatewayInfo == null)
+                        {
+                            continue;
+                        }
 
                         await StartCloudMqtt();
                         await SubscribeTopics();
@@ -170,44 +170,94 @@
             {
                 try
                 {
-                    //2020-05-14 璁㈤槄涓婚璐ㄩ噺鏀逛负0
-                    var topicFilterBusGateWayToClient = new MqttTopicFilter()
+                    if (DB_ResidenceData.Instance.GatewayType == 0 && !DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
                     {
-                        Topic = $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/#",
-                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
-                        //QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
-                    };
-
+                        Utlis.WriteLine("寮�濮嬭闃呬竴绔彛閫氱敤涓婚锛�");
+                        //2020-05-14 璁㈤槄涓婚璐ㄩ噺鏀逛负0
+                        var topicFilterBusGateWayToClient = new MqttTopicFilter()
+                        {
+                            Topic = $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/#",
+                            QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                        };
+                        await RemoteMqttClient.SubscribeAsync(topicFilterBusGateWayToClient);
+                    }
+                    //鎸や笅绾夸富棰�
                     var topicFilterPush2 = new MqttTopicFilter
                     {
                         Topic = $"/BusGateWayToClient/{UserInfo.Current.ID}/#",
                         QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce,
-                        //QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
                     };
-
                     var topicAlinkStatus = new MqttTopicFilter()
                     {
-                        Topic = $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/app/thing/property/send",
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/property/send",
                         QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
                     };
-                    //var topicBusStatus = new MqttTopicFilter()
-                    //{
-                    //    Topic = $"/BusGateWayToClient/{}/Common",
-                    //    QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
-                    //};
+                    //App璁㈤槄绾㈠瀹� / 缃戝叧閬ユ帶鍣ㄦ坊鍔犳垚鍔熼�氱煡
+                    var pirStatus = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/topo/found",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+                    //App璁㈤槄閬ユ帶鍣ㄨ嚜瀛︽寜閿涔犳垚鍔熼�氱煡
+                    var pirStudy = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/irCodeStudyDone/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+
+                    #region 鏁版嵁鏇存柊鎺ㄩ�佷富棰�
+                    //appHomeRefresh锛氫綇瀹呮暟鎹埛鏂伴�氱煡--鏉ㄦ稕
+                    var appHomeRefresh = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appHomeRefresh/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+                    //浣忓畢娑堟伅鍙樻洿鎺ㄩ��--璞嗚眴
+                    var residenceChange = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appDeviceRefresh/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+                    //appRoomRefresh锛氭埧闂存暟鎹埛鏂伴�氱煡
+                    var appRoomRefresh = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appRoomRefresh/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+                    //appDeviceRefresh锛氳澶囨暟鎹埛鏂伴�氱煡
+                    var appDeviceRefresh = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/app/thing/event/appHomeRefresh/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+                    //涓�绔彛瀵嗛挜鏇存柊閫氱煡
+                    var mqttkeyChange = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/custom/mqtt/secret/change",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+
+                    //瀹夐槻鐘舵�佸彉鍖�
+                    var securityStatusChange = new MqttTopicFilter()
+                    {
+                        Topic = $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/custom/security/status/up",
+                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+                    };
+
+
+                    #endregion
+
 
                     Utlis.WriteLine("寮�濮嬭闃咃紒");
-                    var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] { topicFilterBusGateWayToClient, topicFilterPush2, topicAlinkStatus });
+                    var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] {
+                        pirStatus,pirStudy,
+                        appDeviceRefresh,appHomeRefresh,appRoomRefresh,residenceChange,
+                        topicFilterPush2, topicAlinkStatus ,mqttkeyChange,
+                        securityStatusChange});
                     if (result.Items[0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0)
                     {
-                        Control.Ins.GatewayOnline = true;
                         isSubscribeSuccess = true;
                         Utlis.WriteLine("璁㈤槄鎴愬姛锛�");
-
-                        MqttRemoteSend(new byte[] { 0 }, 3);
-
-                        //杩炴帴鎴愬姛鍚庢娴嬫槸鍚﹂渶瑕侀�氳繃杩滅▼鑾峰彇Key
-                        //CheckIfNeedGetLocalPasswordFromRemote();
                     }
                 }
                 catch (Exception ex)
@@ -231,6 +281,10 @@
             {
                 return;
             }
+            if (DB_ResidenceData.Instance.CurrentRegion == null || DB_ResidenceData.Instance.CurrentRegion.id == null)
+            {
+                return;
+            }
 
             //杩藉姞锛氭病鏈夎繙绋嬭繛鎺ョ殑鏉冮檺
             if (RemoteMqttIsConnecting || remoteIsConnected)
@@ -240,7 +294,7 @@
 
             Utlis.WriteLine($"StartCloudMqtt: 寮�濮�");
 
-            await Task.Factory.StartNew(async () => {
+            await Task.Factory.StartNew((Func<Task>)(async () => {
                 try
                 {
                     #region 鍒濆鍖栬繙绋婱qtt
@@ -252,71 +306,205 @@
                     if (RemoteMqttClient.ApplicationMessageReceivedHandler == null)
                     {
                         //澶勭悊鎺ユ敹鍒扮殑鏁版嵁
-                        RemoteMqttClient.UseApplicationMessageReceivedHandler((e) => {
+                        RemoteMqttClient.UseApplicationMessageReceivedHandler((Action<MqttApplicationMessageReceivedEventArgs>)((e) => {
                             try
                             {
                                 var topic = e.ApplicationMessage.Topic;
+                                MainPage.Log($"鏀跺埌mqtt涓婚:{topic}");
+                                //涓�绔彛涓婚澶勭悊
+                                if (DB_ResidenceData.Instance.GatewayType == 0 && !DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
+                                {
+                                    if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/NotifyBusGateWayInfoChange")
+                                    {
+                                        //缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
+                                        //鏀跺埌缃戝叧涓婄嚎娑堟伅涓婚
+                                        ReceiveNotifyBusGateWayInfoChange();
+                                        return;
+                                    }
+                                    else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/NotifyGateWayOffline")
+                                    {
+                                        //缃戝叧鎺夌嚎
+                                        //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
+                                        ReceiveNotifyGateWayOffline();
+                                        return;
+                                    }
+                                    else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway")
+                                    {
+                                        var ss = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+                                        //ReceiveCheckGateway(ss);
+                                        return;
+                                    }
+                                }
+
+                                //涓�浜涚壒娈婄殑涓婚澶勭悊(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣� true:鎵ц浜嗙壒娈婂鐞� false:娌℃湁鎵ц鐗规畩澶勭悊)
+                                Stan.HdlCloudReceiveLogic.Current.CloudOverallMsgReceiveEx(topic, e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey, tuyaEncryptKey);
+
                                 if (topic == $"/BusGateWayToClient/{UserInfo.Current.ID}" + PushNotifySqueeze)
                                 {
                                     var mMes = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
                                     //鏂版尋涓嬬嚎涓婚鏂规 鏀跺埌鎸や笅绾夸富棰�
                                     ReceiveNotifySqueezeAsync(mMes);
                                 }
-                                else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/NotifyBusGateWayInfoChange")
-                                {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
-                                    //鏀跺埌缃戝叧涓婄嚎娑堟伅涓婚
-                                    ReceiveNotifyBusGateWayInfoChange();
-                                }
-                                else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/NotifyGateWayOffline")
-                                {//缃戝叧鎺夌嚎
-                                    //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
-                                    ReceiveNotifyGateWayOffline();
-                                }
-                                else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway")
+                                //App璁㈤槄绾㈠瀹�/缃戝叧閬ユ帶鍣ㄦ坊鍔犳垚鍔熼�氱煡
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/topo/found")
                                 {
-                                    
-                                    var ss = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
-                                    ReceiveCheckGateway(ss);
+                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
+                                    var revString = Encoding.UTF8.GetString(bytes);
+                                    HDL_ON.UI.UI2.PersonalCenter.PirDevice.PirMethod.controldata = revString;
                                 }
-                                else
+                                //App璁㈤槄閬ユ帶鍣ㄨ嚜瀛︽寜閿涔犳垚鍔熼�氱煡
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/irCodeStudyDone/up")
                                 {
-                                    SetGatewayOnlineResetCheck();
-                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
-                                    
-                                    //bus鏁版嵁瑙f瀽
-                                    if (DB_ResidenceData.Instance.GatewayType == 0)
+                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
+                                    var revString = Encoding.UTF8.GetString(bytes);
+                                    UI.UI2.PersonalCenter.PirDevice.PirMethod.buttondata = revString;
+                                }
+                                #region 鏁版嵁鏇存柊鎺ㄩ�佷富棰�
+                                //appHomeRefresh锛氫綇瀹呮暟鎹埛鏂伴�氱煡
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appHomeRefresh/up"
+                                        || topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appDeviceRefresh/up")
+                                {
+                                    MainPage.Log("浣忓畢鏁版嵁鍒锋柊閫氱煡");
+                                    new HttpServerRequest().GetHomePager();
+                                }
+                                //appRoomRefresh锛氭埧闂存暟鎹埛鏂伴�氱煡
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appRoomRefresh/up")
+                                {
+                                    MainPage.Log("鎴块棿鏁版嵁鍒锋柊閫氱煡");
+                                    var roomResult = new HttpServerRequest().GetRoomList();
+                                    if (roomResult.Code == StateCode.SUCCESS)
                                     {
-                                        var packet = new Packet();
-
-                                        if (!string.IsNullOrEmpty(mqttEncryptKey))
+                                        MainPage.Log($"璇诲彇鎴块棿淇℃伅鎴愬姛");
+                                        var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<SpatialApiPack>(roomResult.Data.ToString());
+                                        if (revData == null)
                                         {
-                                            packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
+                                            revData = new SpatialApiPack();
                                         }
-                                        else
                                         {
-                                            packet.Bytes = e.ApplicationMessage.Payload;
+                                            SpatialInfo.CurrentSpatial.UpdateSpatialList(revData.list);
                                         }
-#if DEBUG
-                                        //string ddd = "";
-                                        //foreach (var bb in packet.Bytes)
-                                        //{
-                                        //    ddd += bb + ",";
-                                        //}
-                                        //MainPage.Log($"mqtt bus data:{ddd}");
-#endif
-                                        packet.Manager();
                                     }
                                     else
                                     {
-                                        MainPage.Log($"mqtt A-Link data");
-                                        //A鍗忚鏁版嵁澶勭悊
-                                        var revString = Encoding.UTF8.GetString(bytes);
-                                        Control.Ins.UpdataFunctionStatus(revString,null);
+                                        MainPage.Log($"璇诲彇鎴块棿鏁版嵁澶辫触:Code:{roomResult.Code}; msg:{roomResult.message}");
                                     }
+                                }
+                                //appDeviceRefresh锛氳澶囨暟鎹埛鏂伴�氱煡
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/event/appDeviceRefresh/up")
+                                {
+                                    MainPage.Log("璁惧鏁版嵁鍒锋柊閫氱煡");
+                                    var deviceResult = new HttpServerRequest().GetDeviceList();
+                                    if (deviceResult.Code == StateCode.SUCCESS)
+                                    {
+                                        MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
+                                        var deviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
+                                        if (deviceList == null)
+                                        {
+                                            deviceList = new DevcieApiPack();
+                                        }
+                                        string delFile = "";
+                                        if (FunctionList.List.GetDeviceFunctionList().Count > 0)
+                                        {
+                                            for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
+                                            {
+                                                var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
+                                                if (SPK.MusicSpkList().Contains(localFunction.spk))
+                                                {
+                                                    i++;
+                                                    continue;
+                                                }
+                                                var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
+
+                                                if (delFile == localFunction.savePath)
+                                                {
+                                                    i++;
+                                                    continue;
+                                                }
+                                                delFile = localFunction.savePath;
+                                                FunctionList.List.DeleteFunction(localFunction);
+                                            }
+                                        }
+                                        //澶勭悊鍓╀笅鐨勬柊澧炲姛鑳�
+                                        foreach (var newFunction in deviceList.list)
+                                        {
+                                            newFunction.SaveFunctionFile();
+                                            FunctionList.List.IniFunctionList(newFunction.savePath);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        MainPage.Log($"璇诲彇浜戠璁惧鏁版嵁澶辫触:Code:{deviceResult.Code};  Msg:{deviceResult.message}");
+                                    }
+                                }
+                                //缃戝叧瀵嗛挜鍙樺寲
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/custom/mqtt/secret/change")
+                                {
+                                    var pm = new HttpServerRequest();
+                                    pm.GetHomeGatewayList();
+                                    MainPage.Log($"缃戝叧瀵嗛挜鍙樻洿.鏂板瘑閽ワ細{DB_ResidenceData.Instance.HomeGateway.aesKey}");
+                                }
+                                //瀹夐槻鐘舵�佸彉鍖�
+                                else if (topic == $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/custom/security/status/up")
+                                {
+                                    if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
+                                    {
+                                        try
+                                        {
+                                            var securityBytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
+                                            var securityString = Encoding.UTF8.GetString(securityBytes);
+                                            var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(securityString);
+                                            MainPage.Log($"瀹夐槻鐘舵�佸彉鍖栵細{securityString}");
+
+                                            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}");
+                                        }
+                                    }
+                                }
+                                #endregion
+                                //A缃戝叧璁惧鐘舵��-鍖呭惈娑傞甫璁惧
+                                else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/property/send")
+                                {
+                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
+                                    var revString = Encoding.UTF8.GetString(bytes);
+                                    Control.Ins.UpdataFunctionStatus(revString, null, true);
+                                }
+                                //涓�绔彛鏁版嵁瑙f瀽
+                                else
+                                {
+                                    //SetGatewayOnlineResetCheck();
+                                    //var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
+                                    //bus鏁版嵁瑙f瀽
+                                    var packet = new Packet();
+
+                                    if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
+                                    {
+                                        packet.Bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, DB_ResidenceData.Instance.HomeGateway.aesKey);
+                                    }
+                                    else
+                                    {
+                                        packet.Bytes = e.ApplicationMessage.Payload;
+                                    }
+                                    packet.Manager();
                                 }
                             }
                             catch { }
-                        });
+                        }));
                     }
 
                     //(2)DisconnectedHandler
@@ -334,14 +522,33 @@
                         RemoteMqttClient.UseConnectedHandler(async (e) =>
                         {
                             IfNeedReadAllDeviceStatus = true;
+                            Control.Ins.GatewayOnline_Cloud = true;
                             Utlis.WriteLine($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
                             SendPushSignOut();
                         });
                     }
                     #endregion
-                    //}
 
                     //(4)===========寮�濮嬭繛鎺ヨ繃绋�==========
+
+                    ////涓�绔彛姣忔閮借鍒锋柊瀵嗛挜
+                    //if (DB_ResidenceData.Instance.HomeGateway != null && DB_ResidenceData.Instance.HomeGateway.gatewayType == "BUSUDPGATEWAY") {
+                    //    var pm = new HttpServerRequest();
+                    //    var result = pm.GetHomeGatewayList();
+                    //    if(result == StateCode.SUCCESS)
+                    //    {
+                    //        MainPage.Log($"鍒锋柊涓�绔彛瀵嗛挜");
+                    //        MainPage.Log($"鏃у瘑閽ワ細{mqttEncryptKey}");
+                    //        mqttEncryptKey = MqttInfoConfig.Current.HomeGatewayInfo.aesKey;
+                    //        MainPage.Log($"鏂板瘑閽ワ細{mqttEncryptKey}");
+                    //    }else
+                    //    {
+                    //        return;
+                    //    }
+                    //}
+                    
+
+
                     //涔嬪墠宸茬粡鑾峰彇鍙傛暟鎴愬姛杩�
                     if (MqttInfoConfig.Current.IfGetMqttInfoSuccess)
                     {
@@ -358,6 +565,8 @@
                 catch (Exception ex)
                 {
                     Utlis.WriteLine($"error:" + ex.Message);
+                    //mqtt杩炴帴寮傚父锛屾竻绌烘湰鍦癿qtt淇℃伅锛屽彲鑳介渶瑕侀噸鏂拌幏鍙栵細wxr
+                    MqttInfoConfig.Current.Refresh();
                 }
                 finally
                 {
@@ -367,7 +576,7 @@
                     Utlis.WriteLine($"StartCloudMqtt: 缁撴潫");
                 }
 
-            });
+            }));
         }
 
 
@@ -415,11 +624,6 @@
         /// <returns></returns>
         static async Task StartMQTTGetInfo()
         {
-            if (!Control.Ins.IsRemote)
-            {
-                return;
-            }
-
             await GetMqttInfoAndMQTTConnectAsync();
 
             ////--鍒ゆ柇鏄綋鍓嶆槸鍚﹀垎浜殑浣忓畢
@@ -438,13 +642,9 @@
         /// </summary>
         static async Task MQTTConnectAsync()
         {
-
-            if (!Control.Ins.IsRemote)
-            {
-                return;
-            }
-
-            if (MqttInfoConfig.Current.HomeGatewayInfo != null && MqttInfoConfig.Current.mMqttInfo != null)
+            //if (MqttInfoConfig.Current.HomeGatewayInfo != null && MqttInfoConfig.Current.mMqttInfo != null)
+            //娌℃湁缃戝叧鎯呭喌涓嬶紝涔熼渶瑕佽繛鎺qtt锛屾秱楦︾涓夋柟璁惧涓嶉渶瑕佺綉鍏�
+            if (MqttInfoConfig.Current.mMqttInfo != null)
             {
                 try
                 {
@@ -462,7 +662,18 @@
                     MqttInfoConfig.Current.IfGetMqttInfoSuccess = true;
                     MqttInfoConfig.Current.Save();
 
-                    mqttEncryptKey = MqttInfoConfig.Current.HomeGatewayInfo.aesKey;
+
+
+                    //mqttEncryptKey = MqttInfoConfig.Current.HomeGatewayInfo.aesKey;
+                    //瑙e瘑瀵嗛挜瑙勫垯锛氬凡鐜版湁鐨勪綇瀹匢D涓哄熀鍑�,浠庡彸杈逛竴涓�鑾峰彇鍊�,鏈�鍚庡鏋滀笉澶�16浣�,鍒欏線鍙宠ˉ闆�
+                    string aesKey = string.Empty;
+                    for (int i = DB_ResidenceData.Instance.CurrentRegion.id.Length - 1; i >= 0; i--)
+                    {
+                        aesKey += DB_ResidenceData.Instance.CurrentRegion.id[i].ToString();
+                        if (aesKey.Length == 16) { break; }
+                    }
+                    aesKey = aesKey.PadRight(16, '0');
+                    tuyaEncryptKey = aesKey;
 
                     var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder()
                                         .WithClientId(clientId)
@@ -471,8 +682,6 @@
                                         .WithCleanSession()
                                         .WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311)
                                         .WithCommunicationTimeout(new TimeSpan(0, 0, 10))
-                                        //.WithCommunicationTimeout (new TimeSpan (0, 0, 5))
-                                        //.WithCommunicationTimeout (new TimeSpan (0, 1, 0))
                                         .Build();
 
                     await DisConnectRemoteMqttClient("StartRemoteMqtt");
@@ -497,6 +706,8 @@
                     //閲嶆柊涓績鏈嶅姟鍣ㄨ幏鍙栧弬鏁版爣璁�
                     MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
                     Console.WriteLine("Connect error: " + ex.Message);
+                    //mqtt杩炴帴寮傚父锛屾竻绌烘湰鍦癿qtt淇℃伅锛屽彲鑳介渶瑕侀噸鏂拌幏鍙栵細wxr
+                    MqttInfoConfig.Current.Refresh();
                 }
                 finally
                 {
@@ -518,12 +729,11 @@
         {
             try
             {
-                SetGatewayOnlineResetCheck();
-                if (Control.Ins.IsRemote)
+                //SetGatewayOnlineResetCheck();
+                if (Control.Ins.GatewayOnline_Cloud)
                 {
                     CheckIfNeedReadAllDeviceStatus();
                 }
-
             }
             catch { }
         }
@@ -533,22 +743,23 @@
         /// </summary>
         static void ReceiveNotifyGateWayOffline()
         {
-            if (Control.Ins.IsRemote)
-            {
-                Control.Ins.GatewayOnline = false;
-            }
+            Control.Ins.GatewayOnline_Cloud = false;
         }
-
 
         /// <summary>
         /// 鏀跺埌鎸や笅绾挎帹閫�
         /// </summary>
         static void ReceiveNotifySqueezeAsync(string mMes)
         {
-            if (mMes == PushSignStr) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊
+            if (mMes == PushSignStr) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊//鎴栬�呭綋鍓嶄笉鏄繙绋嬮摼鎺ョ姸鎬�
+            //娴嬭瘯璐﹀彿锛屼笉鎸や笅绾�
+            switch (UserInfo.Current.userMobileInfo)
+            {
+                case "15626203746":
+                case "464027401@qq.com":
+                    return;
+            }
 
-            //鏂紑杩滅▼杩炴帴
-            Control.Ins.IsRemote = false;
             if (!UserInfo.Current.IsLogin)
             {
                 return;
@@ -561,7 +772,7 @@
                 //寮圭獥鎻愮ず琚尋涓嬬嚎
                 HDLCommon.Current.CheckLogout();
             });
-           
+
 
             //UserInfo.Current.LastTime = DateTime.MinValue;
             //UserInfo.Current.SaveUserInfo();
@@ -575,20 +786,20 @@
             //HDLRequest.Current.PushserivceSignOut ();
         }
 
-        /// <summary>
-        /// 鏀跺埌CheckGateway涓婚
-        /// </summary>
-        static void ReceiveCheckGateway(string mMes)
-        {
-            if (!Control.Ins.IsRemote) return;
+        ///// <summary>
+        ///// 鏀跺埌CheckGateway涓婚
+        ///// </summary>
+        //static void ReceiveCheckGateway(string mMes)
+        //{
+        //    if (!Control.Ins.IsRemote) return;
 
-            Utlis.WriteLine("ReceiveCheckGateway锛�");
+        //    Utlis.WriteLine("ReceiveCheckGateway锛�");
 
-            //CheckIfNeedReadAllDeviceStatus ();
+        //    //CheckIfNeedReadAllDeviceStatus ();
 
-            //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(mMes);
-            Control.Ins.GatewayOnline = true;
-        }
+        //    //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(mMes);
+        //    Control.Ins.GatewayOnline = true;
+        //}
 
         /// <summary>
         /// 鎺ㄩ�佹尋涓嬬嚎涓婚
@@ -614,16 +825,11 @@
                 {
                     case 0:
                         topicName = $"/ClientToBusGateWay/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/ON";
-                        if (!string.IsNullOrEmpty(mqttEncryptKey))
+                        if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
                         {
-                            message = Securitys.EncryptionService.AesEncryptPayload(message, mqttEncryptKey);
+                            message = Securitys.EncryptionService.AesEncryptPayload(message, DB_ResidenceData.Instance.HomeGateway.aesKey);
                         }
                         await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
-                        break;
-                    case 3:
-                        topicName = $"/ClientToBusGateWay/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway";
-                        Utlis.WriteLine("CheckGateway");
-                        await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
                         break;
                     case 4://鍙戝竷鏂版柟妗堢殑鎸や笅绾夸富棰�
                         topicName = $"/BusGateWayToClient/{UserInfo.Current.ID}" + PushNotifySqueeze;
@@ -653,27 +859,27 @@
         /// </summary>
         static bool IfNeedReadAllDeviceStatus = true;
 
-        /// <summary>
-        /// 璁剧疆缃戝叧鍦ㄧ嚎鏍囧織锛屽苟閲嶇疆CheckGateway鍙傛暟
-        /// </summary>
-        static void SetGatewayOnlineResetCheck()
-        {
-            if (Control.Ins.IsRemote)
-            {
-                if (!Control.Ins.GatewayOnline)
-                {
-                    try
-                    {
-                        if (DB_ResidenceData.Instance.HomeGateway != null)
-                        {
-                            DB_ResidenceData.Instance.HomeGateway.gatewayStatus = true;
-                        }
-                        Control.Ins.GatewayOnline = true;
-                    }
-                    catch { }
-                }
-            }
-        }
+        ///// <summary>
+        ///// 璁剧疆缃戝叧鍦ㄧ嚎鏍囧織锛屽苟閲嶇疆CheckGateway鍙傛暟
+        ///// </summary>
+        //static void SetGatewayOnlineResetCheck()
+        //{
+        //    if (Control.Ins.IsRemote)
+        //    {
+        //        if (!Control.Ins.GatewayOnline)
+        //        {
+        //            try
+        //            {
+        //                if (DB_ResidenceData.Instance.HomeGateway != null)
+        //                {
+        //                    DB_ResidenceData.Instance.HomeGateway.gatewayStatus = true;
+        //                }
+        //                Control.Ins.GatewayOnline = true;
+        //            }
+        //            catch { }
+        //        }
+        //    }
+        //}
 
 
         /// <summary>
@@ -682,24 +888,27 @@
         /// <returns></returns>
         static async Task GetMqttInfoAndMQTTConnectAsync()
         {
-            var mqttInfoRequestResult_Obj = new Server.HttpServerRequest().GetMqttRemoteInfo(GetRandomKey());
+            var mqttInfoRequestResult_Obj = new HttpServerRequest().GetMqttRemoteInfo(GetRandomKey());
             if (mqttInfoRequestResult_Obj != null)
             {
+                MainPage.Log($"鑾峰彇mqtt info 鎴愬姛 /r/n clientId:{mqttInfoRequestResult_Obj.clientId}/r/n passWord:{mqttInfoRequestResult_Obj.passWord} /r/n url:{mqttInfoRequestResult_Obj.url}/r/n userName:{mqttInfoRequestResult_Obj.userName}");
+
+
                 MqttInfoConfig.Current.mMqttInfo = mqttInfoRequestResult_Obj;
                 await MQTTConnectAsync();
                 //1.鍒ゆ柇鏄惁缁戝畾浜嗙綉鍏筹紝鑾峰彇缃戝叧杩滅▼杩炴帴鐨勫姞瀵咾EY
-                if (DB_ResidenceData.Instance.CheckWhetherGatewayIsBound())
+                //if (DB_ResidenceData.Instance.CheckWhetherGatewayIsBound())
                 {
                     //2.鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
                     MqttInfoConfig.Current.HomeGatewayInfo = DB_ResidenceData.Instance.HomeGateway;
                     //3.寮�濮嬭繛鎺�
                     await MQTTConnectAsync();
                 }
-                else
-                {
-                    Utlis.WriteLine("============>杩樻病缁戝畾缃戝叧");
-                    hadGateway = false;
-                }
+                //else
+                //{
+                //    Utlis.WriteLine("============>杩樻病缁戝畾缃戝叧");
+                //    hadGateway = false;
+                //}
             }
         }
 
@@ -853,4 +1062,4 @@
 
 
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.8.0