From 22c5c030f2262b6a9d6840bf3b5196b7ab2d4dd5 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期二, 10 三月 2020 14:31:53 +0800
Subject: [PATCH] 2020-03-10  1.替换最新控件库,增加无网络监听,Loading效果优化。 2.电能插座修复点亮统计个数问题。 3 .定时检测网关是否在线,发送CheckGateway间隔为10S,收到主题刷新该时间,重置发送次数,发送次数到达3次以上,则判定网关为离线状态。 4.远程重复增加为3次,重发后等待5s才回调结果。 5.修复去掉普通继电器读电能操作。 6.读状态间隔缩短为200ms。

---
 Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs |  184 +++++++++++++++++++++++++++++++++------------
 1 files changed, 133 insertions(+), 51 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
index 4d25cae..8650a0b 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
@@ -45,6 +45,7 @@
         static MqttCommon ()
         {
             InitMqtt ();
+            InitCheckGateway ();
         }
 
         /// <summary>
@@ -55,11 +56,13 @@
         {
             new System.Threading.Thread (async () => {
                 while (true) {
-                    System.Threading.Thread.Sleep (100);
-                    if (!CommonPage.IsRemote) continue;
+                    try {
+                        System.Threading.Thread.Sleep (100);
+                        if (!CommonPage.IsRemote) continue;
 
-                    await StartCloudMqtt ();
-                    await CheckingSubscribeTopics ();
+                        await StartCloudMqtt ();
+                        await CheckingSubscribeTopics ();
+                    } catch { }
 
                 }
             }) { IsBackground = true }.Start ();
@@ -197,52 +200,21 @@
                                     } else if (aesDecryptTopic == $"/BusGateWayToClient/{mMqttInfo.connEmqClientId}/Push/NotifySqueeze") {//璁㈤槄鎸や笅绾块棶棰�
                                         await ReceiveNotifySqueezeAsync (aesDecryptPayload);
                                     }else if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/CheckGateway") {
-                                        MainPage.WiFiStatus = "CrabtreeAdd/CloudUnlink.png";
-                                        // = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON";
-                                        var ss = CommonPage.MyEncodingUTF8.GetString (aesDecryptPayload);
-                                        var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack> (ss);
-                                        if (obj == null) {
-                                            return;
-                                        }
-                                        switch (obj.StateCode) {
-                                        case "HDLUdpDataForwardServerMqttClientNoOnLine":
-                                        case "NoOnline":
-                                        case "NetworkAnomaly"://涓嶅湪绾�
-                                            MainPage.AddTip ("Gateway offline");
-                                            //Application.RunOnMainThread (() => {
-                                            //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
-                                            //});
-                                            break;
-                                        case "NoRecord"://MAC涓嶆纭�
-                                            MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.MACError));
-                                            //Application.RunOnMainThread (() => {
-                                            //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
-                                            //});
-                                            break;
-                                        case "Success":
-                                            MainPage.AddTip (UserConfig.Instance.CurrentRegion.Name + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
-                                            MainPage.WiFiStatus = "CrabtreeAdd/CloudLink.png";
-                                            break;
-                                        default:
-                                            MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkLoser));
-                                            //Application.RunOnMainThread (() => {
-                                            //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
-                                            //});
-                                            break;
-                                        }
-                                        Application.RunOnMainThread (() => {
-                                            UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus;
-                                        });
+                                        ReceiveCheckGatewayTopic ();
                                     } else {
+                                        SetGatewayOnlineResetCheck ();
+
                                         if (!string.IsNullOrEmpty (mqttEncryptKey)) {
                                             aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload (e.ApplicationMessage.Payload, mqttEncryptKey);
                                         }
 
+                                        var packet = new Packet ();
+                                        packet.IsLocal = false;
+                                        packet.Bytes = aesDecryptPayload;
+                                        packet.Manager ();
+
                                     }
-                                    var packet = new Packet ();
-                                    packet.IsLocal = false;
-                                    packet.Bytes = aesDecryptPayload;
-                                    packet.Manager ();
+                                   
                                 } catch { }
                             });
                         }
@@ -489,7 +461,7 @@
                     break;
                 case 3:
                     topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/CheckGateway";
-                    Console.WriteLine ("CheckGateway");
+                    //Console.WriteLine ("CheckGateway");
                     await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
                     break;
                 }
@@ -578,12 +550,9 @@
         static async Task ReceiveNotifyBusGateWayInfoChange ()
         {
             System.Console.WriteLine ("============>Mqtt 缃戝叧涓婄嚎");
-            IsGatewayOnline = true;
+            SetGatewayOnlineResetCheck ();
             if (CommonPage.IsRemote) {
 
-                if (MainPage.WiFiStatus != "CrabtreeAdd/CloudLink.png") {
-                    Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
-                }
 //#if DEBUG
                 MainPage.AddTip ("Gateway login online");
 //#endif
@@ -591,8 +560,6 @@
                     IfNeedReadAllDeviceStatus = false;
                     Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
                 }
-
-
             }
 
             //褰撳墠浣忓畢涓嶆槸鍒嗕韩鏉�
@@ -631,8 +598,123 @@
             }
         }
 
+      
+        static int CheckGatewayCount = 0;
+        static DateTime mCheckGatewayTime;
+
+        /// <summary>
+        /// 璁剧疆缃戝叧鍦ㄧ嚎鏍囧織锛屽苟閲嶇疆CheckGateway鍙傛暟
+        /// </summary>
+        static void SetGatewayOnlineResetCheck ()
+        {
+            IsGatewayOnline = true;
+            mCheckGatewayTime = DateTime.Now;
+            CheckGatewayCount = 0;
+            if (CommonPage.IsRemote) {
+                if (MainPage.WiFiStatus != "CrabtreeAdd/CloudLink.png") {
+                    Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
+                }
+            }
+        }
+
+        //static void TipGatewayOffline () {
+
+        //}
+
+        /// <summary>
+        /// 瀹氭椂妫�娴嬬綉鍏虫槸鍚﹀湪绾�
+        /// 1.绾跨▼浼戠湢闂撮殧5s
+        /// 2.鍙戦�丆heckGateway闂撮殧涓�9S锛屾敹鍒颁富棰樺埛鏂拌鏃堕棿锛岄噸缃彂閫佹鏁�
+        /// 3.鍙戦�佹鏁板埌杈�3娆′互涓婏紝鍒欏垽瀹氱綉鍏充负绂荤嚎鐘舵��
+        /// </summary>
+        /// <returns></returns>
+        static void InitCheckGateway ()
+        {
+            new System.Threading.Thread (async () => {
+                while (true) {
+                    try {
+
+                        if (CommonPage.IsRemote && remoteIsConnected) {
+                            if (CheckGatewayCount >= 3) {
+                                //杩炵画3娆℃病鍥炲锛屽垽瀹氱綉鍏宠秴鏃�
+                                if (MainPage.WiFiStatus == "CrabtreeAdd/CloudLink.png") {
+                                    IsGatewayOnline = false;
+                                    Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline);
+                                    MainPage.AddTip ("Gateway offline!");
+                                }
+                            }
+
+                            if (mCheckGatewayTime.AddSeconds (10).Ticks <= System.DateTime.Now.Ticks) {
+                                mCheckGatewayTime = DateTime.Now;
+                                //CheckGateway
+                                MqttRemoteSend (new byte [] { }, 3);
+                                CheckGatewayCount++;
+#if DEBUG
+                                Console.WriteLine ("CheckGateway");
+#endif
+
+
+                            }
+                        }
+
+                        System.Threading.Thread.Sleep (5500);
+                    } catch { }
+
+                }
+            }) { IsBackground = true }.Start ();
+        }
+
+       
+        /// <summary>
+        /// 鏀跺埌CheckGateway涓婚
+        /// </summary>
+        static void ReceiveCheckGatewayTopic () {
+            //System.Console.WriteLine ("============>Mqtt CheckGateway缃戝叧鍥炲");
+            SetGatewayOnlineResetCheck ();
+          
+
+
+            //鏃х綉鍏虫柟娉�
+            //MainPage.WiFiStatus = "CrabtreeAdd/CloudUnlink.png";
+            //// = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON";
+            //var ss = CommonPage.MyEncodingUTF8.GetString (aesDecryptPayload);
+            //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack> (ss);
+            //if (obj == null) {
+            //    return;
+            //}
+            //switch (obj.StateCode) {
+            //case "HDLUdpDataForwardServerMqttClientNoOnLine":
+            //case "NoOnline":
+            //case "NetworkAnomaly"://涓嶅湪绾�
+            //    MainPage.AddTip ("Gateway offline");
+            //    //Application.RunOnMainThread (() => {
+            //    //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
+            //    //});
+            //    break;
+            //case "NoRecord"://MAC涓嶆纭�
+            //    MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.MACError));
+            //    //Application.RunOnMainThread (() => {
+            //    //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
+            //    //});
+            //    break;
+            //case "Success":
+            //    MainPage.AddTip (UserConfig.Instance.CurrentRegion.Name + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
+            //    MainPage.WiFiStatus = "CrabtreeAdd/CloudLink.png";
+            //    break;
+            //default:
+            //    MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkLoser));
+            //    //Application.RunOnMainThread (() => {
+            //    //    Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
+            //    //});
+            //    break;
+            //}
+            //Application.RunOnMainThread (() => {
+            //    UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus;
+            //});
+        }
         
 
+
         /// <summary>
         /// 鏀跺埌鎸や笅绾挎帹閫�
         /// </summary>

--
Gitblit v1.8.0