From 9ca2281d589fbd4b35177d1846974f17d12095ae Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期四, 16 四月 2020 15:12:02 +0800
Subject: [PATCH] 2020-04-16 1.更新

---
 Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs |  512 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 316 insertions(+), 196 deletions(-)

diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
index 4d25cae..f580d57 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 ();
@@ -127,17 +130,17 @@
             try {
                 if (remoteIsConnected) {
                     remoteIsConnected = false;
-                    System.Console.WriteLine ($"============>MqttRemote涓诲姩鏂紑_{s}");
+                    Utlis.WriteLine ($"============>MqttRemote涓诲姩鏂紑_{s}");
                     //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
                     await RemoteMqttClient.DisconnectAsync ();
                     if (CommonPage.IsRemote) {
                         Utlis.ShowAppLinkStatus (AppLinkStatus.CloudUnlink);
                     }
-                    System.Console.WriteLine ($"============>MqttRemoteDisConnectRemoteMqttClient");
+                    Utlis.WriteLine ($"============>MqttRemoteDisConnectRemoteMqttClient");
 
                 }
             } catch (Exception e) {
-                System.Console.WriteLine ($"============>MqttRemote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+                Utlis.WriteLine ($"============>MqttRemote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
             }
         }
         static DateTime dateTime = DateTime.MinValue;
@@ -174,195 +177,179 @@
             await System.Threading.Tasks.Task.Factory.StartNew (async () => {
                 try {
                     //lock (RemoteMqttClient) {
-                        //琛ㄧず鍚庨潰灏嗚繘琛岃繛鎺�
+                    //琛ㄧず鍚庨潰灏嗚繘琛岃繛鎺�
 
-                        #region 鍒濆鍖栬繙绋婱qtt
-                        //(3)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊
-                        if (RemoteMqttClient.ApplicationMessageReceivedHandler == null) {
-                            RemoteMqttClient.UseApplicationMessageReceivedHandler (async (e) => {
-                                try {
-                                    if (!RemoteMqttClient.IsConnected || !CommonPage.IsRemote) {
-                                        return;
+                    #region 鍒濆鍖栬繙绋婱qtt
+                    //(3)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊
+                    if (RemoteMqttClient.ApplicationMessageReceivedHandler == null) {
+                        RemoteMqttClient.UseApplicationMessageReceivedHandler (async (e) => {
+                            try {
+                                if (!RemoteMqttClient.IsConnected || !CommonPage.IsRemote) {
+                                    return;
+                                }
+                                var aesDecryptTopic = e.ApplicationMessage.Topic;
+                                var aesDecryptPayload = e.ApplicationMessage.Payload;
+                                //Utlis.WriteLine ("Topic={0}", aesDecryptTopic);
+
+                                //if (aesDecryptTopic == $"NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
+                                //2020-01-11 淇敼璁㈤槄涓婚鍦板潃
+                                if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyBusGateWayInfoChange") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey                                                                                                                     //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
+                                    await ReceiveNotifyBusGateWayInfoChange ();
+                                } else if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyGateWayOffline") {//缃戝叧鎺夌嚎                                                                                                                    //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
+                                    ReceiveNotifyGateWayOffline ();
+                                } else if (aesDecryptTopic == $"/BusGateWayToClient/{mMqttInfo.connEmqClientId}/Push/NotifySqueeze") {//璁㈤槄鎸や笅绾块棶棰�
+                                    await ReceiveNotifySqueezeAsync (aesDecryptPayload);
+                                } else if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/CheckGateway") {
+                                    ReceiveCheckGatewayTopic ();
+                                } else {
+                                    SetGatewayOnlineResetCheck ();
+
+                                    if (!string.IsNullOrEmpty (mqttEncryptKey)) {
+                                        aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload (e.ApplicationMessage.Payload, mqttEncryptKey);
                                     }
-                                    var aesDecryptTopic = e.ApplicationMessage.Topic;
-                                    var aesDecryptPayload = e.ApplicationMessage.Payload;
-                                    //Console.WriteLine ("Topic={0}", aesDecryptTopic);
 
-                                    //if (aesDecryptTopic == $"NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
-                                    //2020-01-11 淇敼璁㈤槄涓婚鍦板潃
-                                    if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyBusGateWayInfoChange") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey                                                                                                                     //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
-                                        await ReceiveNotifyBusGateWayInfoChange ();
-                                    } else if (aesDecryptTopic == $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyGateWayOffline") {//缃戝叧鎺夌嚎                                                                                                                    //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
-                                        ReceiveNotifyGateWayOffline ();
-                                    } 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;
-                                        });
-                                    } else {
-                                        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 ();
-                                } catch { }
-                            });
-                        }
 
-                        if (RemoteMqttClient.DisconnectedHandler == null) {
-                            RemoteMqttClient.UseDisconnectedHandler (async (e) => {
-                                System.Console.WriteLine ($"============>Mqtt杩滅▼杩炴帴鏂紑");
-                                isSubscribeTopicSuccess = false;
-                                await DisConnectRemoteMqttClient ("StartRemoteMqtt.DisconnectedHandler");
-                                //await StartRemoteMqtt();
-                                //if (thisShowTip) {
-                                //    if (CommonPage.IsRemote) {
-                                //        Application.RunOnMainThread (() => {
-                                //            MainPage.Loading.Hide ();
-                                //        });
-                                //    }
+                                }
+
+                            } catch { }
+                        });
+                    }
+
+                    if (RemoteMqttClient.DisconnectedHandler == null) {
+                        RemoteMqttClient.UseDisconnectedHandler (async (e) => {
+                            Utlis.WriteLine ($"============>Mqtt杩滅▼杩炴帴鏂紑");
+                            isSubscribeTopicSuccess = false;
+                            await DisConnectRemoteMqttClient ("StartRemoteMqtt.DisconnectedHandler");
+                            //await StartRemoteMqtt();
+                            //if (thisShowTip) {
+                            //    if (CommonPage.IsRemote) {
+                            //        Application.RunOnMainThread (() => {
+                            //            MainPage.Loading.Hide ();
+                            //        });
+                            //    }
+                            //} else {
+                            //    thisShowTip = true;
+                            //}
+                        });
+                    }
+                    if (RemoteMqttClient.ConnectedHandler == null) {
+                        RemoteMqttClient.UseConnectedHandler (async (e) => {
+                            IfNeedReadAllDeviceStatus = true;
+                            mCheckGatewayTime = DateTime.Now;
+                            CheckGatewayCount = 0;
+                            bNeedStartTip = true;
+
+                            Utlis.WriteLine ($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
+                            if (CommonPage.IsRemote) {
+                                Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
+                            }
+
+                            if (CurRemoteMACInfo != null) {
+                                IsGatewayOnline = CurRemoteMACInfo.isValid != "InValid";
+                                if (!IsGatewayOnline) {
+                                    //缃戝叧涓嶅湪绾�
+                                    if (CommonPage.IsRemote) {
+                                        Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline);
+                                    }
+                                    MainPage.AddTip ("Remote failed,gateway offline");
+                                } else {
+                                    //Remote Connection Succeeded
+
+                                    //缃戝叧鍦ㄧ嚎
+
+                                    //閲嶆柊涓�娆℃墍鏈夎澶囩姸鎬�
+                                    IfNeedReadAllDeviceStatus = false;
+                                    Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
+                                    //
+                                    MqttRemoteSend (new byte [] { 0 }, 3);
+
+                                    if (CommonPage.IsRemote) {
+                                        MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
+                                    }
+                                }
+
+                                //if (CurRemoteMACInfo.isValid == "InValid") {
+                                //    MainPage.AddTip ("Remote failed,gateway offline");
                                 //} else {
-                                //    thisShowTip = true;
+                                //    MqttRemoteSend (new byte [] { 0 }, 3);
                                 //}
-                            });
-                        }
-                        if (RemoteMqttClient.ConnectedHandler == null) {
-                            RemoteMqttClient.UseConnectedHandler (async (e) => {
-                                IfNeedReadAllDeviceStatus = true;
-
-                                System.Console.WriteLine ($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
-                                if (CommonPage.IsRemote) {
-                                    Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
-                                }
-
-                                if (CurRemoteMACInfo != null) {
-                                    IsGatewayOnline = CurRemoteMACInfo.isValid != "InValid";
-                                    if (!IsGatewayOnline) {
-                                        //缃戝叧涓嶅湪绾�
-                                        if (CommonPage.IsRemote) {
-                                            Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline);
-                                        }
-                                        MainPage.AddTip ("Remote failed,gateway offline");
-                                    } else {
-                                        //缃戝叧鍦ㄧ嚎
-
-                                        //閲嶆柊涓�娆℃墍鏈夎澶囩姸鎬�
-                                        IfNeedReadAllDeviceStatus = false;
-                                        Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
-                                        //
-                                        MqttRemoteSend (new byte [] { 0 }, 3);
-                                    }
-
-                                    //if (CurRemoteMACInfo.isValid == "InValid") {
-                                    //    MainPage.AddTip ("Remote failed,gateway offline");
-                                    //} else {
-                                    //    MqttRemoteSend (new byte [] { 0 }, 3);
-                                    //}
-                                }
+                            }
 
 
-                            });
-                        }
-                        #endregion
+                        });
+                    }
+                    #endregion
                     //}
+                    //姝e湪鑾峰彇杩炴帴鍙傛暟..."
+                    ShowStartTip ();
 
-                        mqttRequestParToken = MainPage.LoginUser.LoginTokenString;
-                        //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
-                        var mqttInfoRequestResult = new ResponsePack () { StateCode = "" };
-                        //--鍒ゆ柇鏄綋鍓嶆槸鍚﹀垎浜殑浣忓畢
-                        if (!UserConfig.Instance.CurrentRegion.IsOthreShare) {
-                            var mqttInfoUrl = $"{MainPage.RequestHttpsHost}/EmqMqtt/GetConnMqttInfo";//鑾峰彇杩炴帴杩滅▼浜戠Emq Mqtt 鏈嶅姟鍣ㄨ繛鎺ヤ俊鎭�
-                            var mqttInfoRequestPar = new GetConnMqttInfoObj () {
-                                LoginAccessToken = mqttRequestParToken,
-                                PlatformStr = "L1",
-                                PublishPayloadJsonStr = PushSignStr,
-                            };
-                            mqttInfoRequestResult = MainPage.RequestHttps ("", Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar), mqttInfoUrl);
-                            if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) {
-                                var mqttInfoRequestResult_info = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ());
-                                if (mqttInfoRequestResult_info != null) {
-                                    mMqttInfo = mqttInfoRequestResult_info;
-                                    //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
-                                    var gatewayListUrl = $"{MainPage.RequestHttpsHostMqtt}/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰
-                                    var gatewayListRequestPar = new RemoteRequestParameters () { LoginAccessToken = mqttRequestParToken, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 };
-                                    var gatewayListRequestResult = MainPage.RequestHttps ("", Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListRequestPar), gatewayListUrl);
-                                    var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo> (gatewayListRequestResult.ResponseData.ToString ());
-                                    //--鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
-                                    if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) {
-                                        CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData.Find ((obj) => obj.mac == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId);
-                                        //CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData [0];
-                                        await MQTTConnectAsync ();
+                    mqttRequestParToken = MainPage.LoginUser.LoginTokenString;
+                    //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
+                    var mqttInfoRequestResult = new ResponsePack () { StateCode = "" };
+                    //--鍒ゆ柇鏄綋鍓嶆槸鍚﹀垎浜殑浣忓畢
+                    if (!UserConfig.Instance.CurrentRegion.IsOthreShare) {
+                        var mqttInfoUrl = $"{MainPage.RequestHttpsHost}/EmqMqtt/GetConnMqttInfo";//鑾峰彇杩炴帴杩滅▼浜戠Emq Mqtt 鏈嶅姟鍣ㄨ繛鎺ヤ俊鎭�
+                        var mqttInfoRequestPar = new GetConnMqttInfoObj () {
+                            LoginAccessToken = mqttRequestParToken,
+                            PlatformStr = "L1",
+                            PublishPayloadJsonStr = PushSignStr,
+                        };
+                        mqttInfoRequestResult = MainPage.RequestHttps ("", Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar), mqttInfoUrl);
+                        if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) {
+                            var mqttInfoRequestResult_info = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ());
+                            if (mqttInfoRequestResult_info != null) {
+                                mMqttInfo = mqttInfoRequestResult_info;
+                                //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
+                                var gatewayListUrl = $"{MainPage.RequestHttpsHostMqtt}/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰
+                                var gatewayListRequestPar = new RemoteRequestParameters () { LoginAccessToken = mqttRequestParToken, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 };
+                                var gatewayListRequestResult = MainPage.RequestHttps ("", Newtonsoft.Json.JsonConvert.SerializeObject (gatewayListRequestPar), gatewayListUrl);
+                                var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo> (gatewayListRequestResult.ResponseData.ToString ());
+                                //--鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
+                                if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) {
+                                    CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData.Find ((obj) => obj.mac == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId);
+                                    //CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData [0];
+                                    await MQTTConnectAsync ();
 
-                                    } else {
-                                        System.Console.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
-                                    }
-
+                                } else {
+                                    Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
                                 }
 
+                            } else {
+                                Utlis.WriteLine ("============>Mqtt GetGatewayPagger 澶辫触");
                             }
+
                         } else {
-                            //濡傛灉鏄垎浜繃鏉ョ殑浣忓畢 璧颁笅闈㈡祦绋�
-                            var mqttInfoRequestPar = new ShareMemberConnMqttInfoObj () {
-                                LoginAccessToken = mqttRequestParToken,
-                                PlatformStr = "L1",
-                                PublishPayloadJsonStr = PushSignStr,
-                                MainUserDistributedMark = UserConfig.Instance.CurrentRegion.MainUserDistributedMark,
-                                HomeId = UserConfig.Instance.CurrentRegion.Id
-                            };
-                            mqttInfoRequestResult = MainPage.RequestHttps (API.ShareMemberConnMqttInfo, Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar));
-                            //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
-                            if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) {
-                                var mqttInfoRequestResult_info = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ());
-                                if (mqttInfoRequestResult_info != null) {
-                                    mMqttInfo = mqttInfoRequestResult_info;
-                                    //--绗簩姝ワ細鑾峰彇褰撳墠浣忓垎浜畢缃戝叧淇℃伅骞惰繛鎺QTT
-                                    await GetSingleHomeGatewayPaggerAndMQTTConnectAsync ();
-
-                                }
+                            Utlis.WriteLine ("============>Mqtt GetInfo 澶辫触");
+                        }
+                    } else {
+                        //濡傛灉鏄垎浜繃鏉ョ殑浣忓畢 璧颁笅闈㈡祦绋�
+                        var mqttInfoRequestPar = new ShareMemberConnMqttInfoObj () {
+                            LoginAccessToken = mqttRequestParToken,
+                            PlatformStr = "L1",
+                            PublishPayloadJsonStr = PushSignStr,
+                            MainUserDistributedMark = UserConfig.Instance.CurrentRegion.MainUserDistributedMark,
+                            HomeId = UserConfig.Instance.CurrentRegion.Id
+                        };
+                        mqttInfoRequestResult = MainPage.RequestHttps (API.ShareMemberConnMqttInfo, Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar));
+                        //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
+                        if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) {
+                            var mqttInfoRequestResult_info = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ());
+                            if (mqttInfoRequestResult_info != null) {
+                                mMqttInfo = mqttInfoRequestResult_info;
+                                //--绗簩姝ワ細鑾峰彇褰撳墠浣忓垎浜畢缃戝叧淇℃伅骞惰繛鎺QTT
+                                await GetSingleHomeGatewayPaggerAndMQTTConnectAsync ();
 
                             }
+
                         }
+                    }
 
                 } catch (Exception ex) {
-                    System.Console.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}");
+                    Utlis.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}");
                 } finally {
                     //鏈�缁堣閲婃斁杩炴帴鐘舵��
                     remoteMqttIsConnecting = false;
@@ -377,6 +364,9 @@
         {
 
             if (CurRemoteMACInfo != null && mMqttInfo != null) {
+                MainPage.AddTip ("Successfully obtained parameters, starting to connect...");
+
+
                 var url = mMqttInfo.connEmqDomainPort;
                 var clientId = mMqttInfo.connEmqClientId;
                 var username = mMqttInfo.connEmqUserName;
@@ -404,6 +394,27 @@
         }
 
 
+//        571=Starting remote connection mode...
+//572=Getting remote connection parameters...
+//573=Successfully obtained parameters, starting to connect...
+        /// <summary>
+        /// 浠庡紑濮嬪埌杩炴帴鎴愬姛锛屽彧鎻愮ず1娆�
+        /// </summary>
+        static bool bNeedStartTip = true;
+        /// <summary>
+        /// 姝e湪鑾峰彇杩炴帴鍙傛暟...
+        /// </summary>
+        static void ShowStartTip ()
+        {
+            if (bNeedStartTip) {
+                bNeedStartTip = false;
+                if (CommonPage.IsRemote) {
+                    MainPage.AddTip ("Getting remote connection parameters...");
+                }
+            }
+
+        }
+
         ///// <summary>
         ///// 
         ///// </summary>
@@ -414,7 +425,7 @@
         //{
         //    try {
         //        if (!remoteIsConnected) {
-        //            System.Console.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
+        //            Utlis.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
         //            return;
         //        }
 
@@ -448,10 +459,10 @@
         //            var m1 = new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce };
 
         //            try {
-        //                Console.WriteLine ("CheckGateway");
+        //                Utlis.WriteLine ("CheckGateway");
         //                RemoteMqttClient.PublishAsync (m1);
         //            } catch (Exception e) {
-        //                Console.WriteLine ($"CheckGateway Fail:{e.Message}");
+        //                Utlis.WriteLine ($"CheckGateway Fail:{e.Message}");
         //                //await DisConnectRemoteMqttClient (e.Message);
         //                //await StartCloudMqtt ();
         //            }
@@ -474,7 +485,7 @@
         {
             try {
                 //if (!remoteIsConnected) {
-                //    System.Console.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
+                //    Utlis.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
                 //    return;
                 //}
 
@@ -489,12 +500,12 @@
                     break;
                 case 3:
                     topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/CheckGateway";
-                    Console.WriteLine ("CheckGateway");
+                    //Utlis.WriteLine ("CheckGateway");
                     await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
                     break;
                 }
             } catch (Exception e) {
-                // System.Console.WriteLine ($"============>Mqtt MqttRemoteSend catch");
+                // Utlis.WriteLine ($"============>Mqtt MqttRemoteSend catch");
                  if (!IsDisConnectingWithSendCatch) {
                     IsDisConnectingWithSendCatch = true;
                     await DisConnectRemoteMqttClient ("MqttRemoteSendCatch");
@@ -552,7 +563,7 @@
 
 
                     } else {
-                        System.Console.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
+                        Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
                     }
                 } else {
                     var mGatewayRes = infoResult.PageData.Find ((obj) => obj.GatewayUniqueId == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId);
@@ -577,13 +588,10 @@
         /// </summary>
         static async Task ReceiveNotifyBusGateWayInfoChange ()
         {
-            System.Console.WriteLine ("============>Mqtt 缃戝叧涓婄嚎");
-            IsGatewayOnline = true;
+            Utlis.WriteLine ("============>Mqtt 缃戝叧涓婄嚎");
+            SetGatewayOnlineResetCheck ();
             if (CommonPage.IsRemote) {
 
-                if (MainPage.WiFiStatus != "CrabtreeAdd/CloudLink.png") {
-                    Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
-                }
 //#if DEBUG
                 MainPage.AddTip ("Gateway login online");
 //#endif
@@ -591,8 +599,6 @@
                     IfNeedReadAllDeviceStatus = false;
                     Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
                 }
-
-
             }
 
             //褰撳墠浣忓畢涓嶆槸鍒嗕韩鏉�
@@ -619,7 +625,7 @@
         /// </summary>
         static void ReceiveNotifyGateWayOffline ()
         {
-            System.Console.WriteLine ("============>Mqtt GateWayOffline");
+            Utlis.WriteLine ("============>Mqtt GateWayOffline");
             IsGatewayOnline = false;
             if (CommonPage.IsRemote) {
                 Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline);
@@ -631,14 +637,128 @@
             }
         }
 
+      
+        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
+                                Utlis.WriteLine ("CheckGateway");
+#endif
+
+
+                            }
+                        }
+
+                        System.Threading.Thread.Sleep (5500);
+                    } catch { }
+
+                }
+            }) { IsBackground = true }.Start ();
+        }
+
+       
+        /// <summary>
+        /// 鏀跺埌CheckGateway涓婚
+        /// </summary>
+        static void ReceiveCheckGatewayTopic () {
+            //Utlis.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>
         static async Task ReceiveNotifySqueezeAsync (byte [] mes)
         {
-            Console.WriteLine ($"============>MqttNotifySqueeze: {ErrorCode.LoginInAnotherDevice}");
+            Utlis.WriteLine ($"============>MqttNotifySqueeze: {ErrorCode.LoginInAnotherDevice}");
             var mMes = CommonPage.MyEncodingUTF8.GetString (mes);
             if (mMes == PushSignStr) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊
 
@@ -916,7 +1036,7 @@
                     RemoteMqttClient = null;
                 }
                 CommonPage.IsRemote = false;
-                Console.WriteLine ("Close Mqtt!!!");
+                Utlis.WriteLine ("Close Mqtt!!!");
             } catch { }
         }
 
@@ -1006,7 +1126,7 @@
                                         webPush.DeleteToken_Push (UserConfig.Instance.tokenID);
                                     });
                                 } catch (Exception ex) {
-                                    Console.WriteLine (ex.Message);
+                                    Utlis.WriteLine (ex.Message);
                                 } finally {
                                     Application.RunOnMainThread (() => {
                                         Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.LinkStatusTipColor;
@@ -1072,7 +1192,7 @@
                         });
 
                         RemoteMqttClient.UseDisconnectedHandler (e => {
-                            //Console.WriteLine ("RemoteMqttClient UseDisconnectedHandler");
+                            //Utlis.WriteLine ("RemoteMqttClient UseDisconnectedHandler");
                             if (thisShowTip) {
                                 if (CommonPage.IsRemote) {
                                     //MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.RemoteConnectionDisconnected));
@@ -1086,7 +1206,7 @@
                             }
                         });
                         RemoteMqttClient.UseConnectedHandler (async e => {
-                            //Console.WriteLine ("RemoteMqttClient IsRemote");
+                            //Utlis.WriteLine ("RemoteMqttClient IsRemote");
                             await MqttCheckGateway ();
                         });
                     }
@@ -1099,14 +1219,14 @@
                             MainPage.Loading.Hide ();
                             Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
                         });
-                        System.Console.WriteLine ($"閲嶆柊杩炴帴杩滅▼閫氳澶辫触锛屽洜涓鸿幏鍙栨柊鐨凨EY澶辫触");
+                        Utlis.WriteLine ($"閲嶆柊杩炴帴杩滅▼閫氳澶辫触锛屽洜涓鸿幏鍙栨柊鐨凨EY澶辫触");
                         return;
                     }
                     //var messgae = System.Text.Encoding.UTF8.GetString (tempResult);
 
                     var responsePack = tempResult.ResponseData;// Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>> (messgae);
                     //if (responsePack == null || responsePack ["ResponseData"] == null) {
-                    //    Console.WriteLine ("鏂紑鍚庨噸鏂伴摼鎺ラ渶瑕侀噸鏂扮櫥褰曡幏鍙栬繛鎺ョ殑瀵嗙爜澶辫触");
+                    //    Utlis.WriteLine ("鏂紑鍚庨噸鏂伴摼鎺ラ渶瑕侀噸鏂扮櫥褰曡幏鍙栬繛鎺ョ殑瀵嗙爜澶辫触");
                     //    return;
                     //}
                     var dictrionaryResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>> (tempResult.ResponseData.ToString ());
@@ -1134,7 +1254,7 @@
                     await Close ();
                     await RemoteMqttClient.ConnectAsync (options);
                 } catch (Exception ex) {
-                    System.Console.WriteLine ("============>" + ex.Message);
+                    Utlis.WriteLine ("============>" + ex.Message);
                     Application.RunOnMainThread (() => {
                         MainPage.Loading.Hide ();
                         isConnecting = false.ToString ();
@@ -1228,7 +1348,7 @@
                     return;
                 }
                 var topicName = @"/" + MainPage.LoginUser.AccountString.ToLower () + @"/CheckGateway/" + UserConfig.Instance.GatewayMAC.Replace (".", "");
-                Console.WriteLine ("MqttCheckGateway : " + topicName);
+                Utlis.WriteLine ("MqttCheckGateway : " + topicName);
                 //base64鍔犲瘑涓婚
                 var topicNameBase64 = Shared.Securitys.EncryptionService.AesEncryptTopic (topicName, mqttEncryptKey);
 

--
Gitblit v1.8.0