From f500e14c0a994487070380c50c85e0929cbc8e63 Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期二, 05 一月 2021 10:48:04 +0800 Subject: [PATCH] 2021-01-05 1.更新 --- Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs | 115 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 94 insertions(+), 21 deletions(-) diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs index 0774a26..18c142a 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs @@ -17,6 +17,11 @@ { public static class MqttCommon { + /// <summary> + /// 鏄惁鎻愮ず 杩滅▼杩炴帴鐨勯敊璇俊鎭� + /// </summary> + public static bool IfDEBUG = false; + static string mqttEncryptKey = ""; static string checkGatewayTopicBase64 = ""; static RemoteMACInfo CurRemoteMACInfo = null; @@ -57,8 +62,10 @@ new System.Threading.Thread (async () => { while (true) { try { - System.Threading.Thread.Sleep (100); + System.Threading.Thread.Sleep (200); if (!CommonPage.IsRemote) continue; + + if (Control.IsEnterBackground) continue; await StartCloudMqtt (); await CheckingSubscribeTopics (); @@ -67,6 +74,15 @@ } }) { IsBackground = true }.Start (); } + + public static void InitState () + { + IfNeedReadAllDeviceStatus = true; + bNeedStartTip = true; + IsGatewayOnline = false; + StartCloudMqtt (); + } + /// <summary> /// 鏄惁璁㈤槄鎴愬姛 @@ -83,6 +99,7 @@ } try { if (!isSubscribeTopicSuccess) { + var topicFilterCommon = new TopicFilter () { Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#", @@ -107,12 +124,30 @@ QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; - + var topicFilters = new TopicFilter [] { topicFilterCommon, topicFilterGateWayInfoChange, topicFilterNotifySqueeze, topicFilterNotifyGateWayOffline }; var result = await RemoteMqttClient.SubscribeAsync (topicFilters); if (result.Items [0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS2) { isSubscribeTopicSuccess = true; } + + ////2020-06-22 閫氱敤涓婚 + //var topicFilterMacMark = new TopicFilter () { + // Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/#", + // QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce + //}; + + ////鎸や笅绾夸富棰� + //var topicFilterNotifySqueeze = new TopicFilter () { + // Topic = $"/BusGateWayToClient/{mMqttInfo.connEmqClientId}/Push/NotifySqueeze", + // QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce + //}; + + //var topicFilters = new TopicFilter [] { topicFilterMacMark, topicFilterNotifySqueeze }; + //var result = await RemoteMqttClient.SubscribeAsync (topicFilters); + //if (result.Items [0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS2) { + // isSubscribeTopicSuccess = true; + //} } } catch (Exception ex) { @@ -135,7 +170,7 @@ if (CommonPage.IsRemote) { Utlis.ShowAppLinkStatus (AppLinkStatus.CloudUnlink); } - Utlis.WriteLine ($"============>MqttRemoteDisConnectRemoteMqttClient"); + //Utlis.WriteLine ($"============>MqttRemoteDisConnectRemoteMqttClient"); } } catch (Exception e) { @@ -153,7 +188,7 @@ /// <summary> /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴 /// </summary> - static bool remoteMqttIsConnecting; + public static bool remoteMqttIsConnecting; static bool remoteIsConnected; /// <summary> /// 鍚姩杩滅▼Mqtt @@ -176,6 +211,9 @@ //琛ㄧず鍚庨潰灏嗚繘琛岃繛鎺� #region 鍒濆鍖栬繙绋婱qtt + //2020-06-22 澧炲姞 + RemoteMqttClient = new MqttFactory ().CreateMqttClient (); + //(3)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊 if (RemoteMqttClient.ApplicationMessageReceivedHandler == null) { RemoteMqttClient.UseApplicationMessageReceivedHandler (async (e) => { @@ -224,7 +262,7 @@ } if (RemoteMqttClient.ConnectedHandler == null) { RemoteMqttClient.UseConnectedHandler (async (e) => { - IfNeedReadAllDeviceStatus = true; + //IfNeedReadAllDeviceStatus = true; mCheckGatewayTime = DateTime.Now; CheckGatewayCount = 0; bNeedStartTip = true; @@ -273,10 +311,21 @@ } } catch (Exception ex) { - Utlis.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}"); + //Utlis.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}"); + + MainPage.LoadingTipShow ("Connect error, trying to reconnect."); + + if (IfDEBUG) { + MainPage.ShowAlertOnMainThread ("error: " + ex.Message); + } + } finally { //鏈�缁堣閲婃斁杩炴帴鐘舵�� remoteMqttIsConnecting = false; + + MainPage.LoadingTipHide (); + + //MainPage.LoadingHide (); } }); } @@ -315,16 +364,25 @@ //----绗笁姝� 寮�濮嬭繛鎺� await MQTTConnectAsync (); } else { - Utlis.WriteLine ("============>Mqtt CurRemoteMACInfo null"); + //Utlis.WriteLine ("============>Mqtt CurRemoteMACInfo null"); + + MainPage.LoadingTipShow ("Please wait, failed to get gateway parameters."); } } } else { - Utlis.WriteLine ("============>Mqtt mqttInfoRequestResult_Obj null"); + //Utlis.WriteLine ("============>Mqtt mqttInfoRequestResult_Obj null"); + + MainPage.LoadingTipShow ("Please wait, failed to get user parameters."); + //MainPage.LoadingTipShow ("Please wait, failed to get parameters."); } - } catch { } + } catch { + + } } else { - Utlis.WriteLine ("============>Mqtt GetInfo 澶辫触"); + //Utlis.WriteLine ("============>Mqtt GetInfo 澶辫触"); + MainPage.AddTip ("Please wait, failed to get parameters."); + //MainPage.LoadingTipShow ("Please wait, failed to get parameters."); } } @@ -350,6 +408,8 @@ mMqttInfo = mqttInfoRequestResult_info; //--绗簩姝ワ細鑾峰彇褰撳墠浣忓垎浜畢缃戝叧淇℃伅骞惰繛鎺QTT await GetSingleHomeGatewayPaggerAndMQTTConnectAsync (); + } else { + MainPage.LoadingTipShow ("Please wait, failed to get user parameters."); } } } @@ -363,7 +423,10 @@ //鑾峰彇鍙傛暟鎴愬姛锛屽紑濮嬭繛鎺�... - MainPage.AddTip ("Successfully obtained parameters, starting to connect..."); + //MainPage.AddTip ("Successfully obtained parameters, starting to connect..."); + + MainPage.LoadingTipShow ("Please wait, connecting remotely..."); + //try { // var url = mMqttInfo.connEmqDomainPort; // var clientId = mMqttInfo.connEmqClientId; @@ -389,7 +452,7 @@ // Console.WriteLine ("Connect error: " + ex.Message); //} - string mes = ""; + //string mes = ""; try { var url = mMqttInfo.connEmqDomainPort; @@ -397,7 +460,7 @@ var username = mMqttInfo.connEmqUserName; var passwordRemote = mMqttInfo.connEmqPwd; - mes = "step1.Set Data"; + //mes = "step1.Set Data"; CurRemoteMACInfo.LoginAccessToken = MainPage.LoginUser.LoginTokenString; mqttEncryptKey = CurRemoteMACInfo.aesKey; var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder () @@ -408,14 +471,16 @@ // .WithCommunicationTimeout (new TimeSpan (0, 0, 20)) .Build (); - mes = "step2.DisConnect"; + //mes = "step2.DisConnect"; await DisConnectRemoteMqttClient ("StartRemoteMqtt"); //MainPage.AddTip ("Start to connect..."); - mes = "step3.Start to connect"; + //mes = "step3.Start to connect"; await RemoteMqttClient.ConnectAsync (options1); - mes = "step4.Connected Success"; + //mes = "step4.Connected Success"; remoteIsConnected = true; IsDisConnectingWithSendCatch = false; + + MainPage.LoadingTipShow ("Remote connection succeeded."); //MainPage.AddTip ("Connection succeeded!"); //await MqttRemoteSend (new byte [] { 0 }, 1); @@ -423,12 +488,17 @@ //await MqttRemoteSend (new byte [] { 0 }, 4); } catch (Exception ex) { - mes = ex.Message; + //mes = ex.Message; //options1 寮傚父鎻愮ず - //Console.WriteLine("Connect error: " + ex.Message); - //MainPage.ShowAlertOnMainThread ("Connect error: " + ex.Message); + //Console.WriteLine ("Connect error: " + ex.Message); + + MainPage.LoadingTipShow ("Connect error."); + + if (IfDEBUG) { + MainPage.ShowAlertOnMainThread ("Connect error: " + ex.Message); + } } finally { - MainPage.ShowAlertOnMainThread ("finally: " + mes); + //MainPage.ShowAlertOnMainThread ("finally: " + mes); //MainPage.AddTip ("finally: " + mes); } @@ -447,7 +517,8 @@ if (bNeedStartTip) { bNeedStartTip = false; if (CommonPage.IsRemote) { - MainPage.AddTip ("Getting remote connection parameters..."); + //MainPage.AddTip ("Getting remote connection parameters..."); + MainPage.LoadingTipShow ("Please wait, getting connection parameters..."); } } } @@ -545,6 +616,8 @@ if (mGatewayRes != null) { CurRemoteMACInfo.aesKey = mGatewayRes.AesKey; mqttEncryptKey = CurRemoteMACInfo.aesKey; + } else { + MainPage.LoadingTipShow ("Please wait, failed to get gateway parameters."); } } -- Gitblit v1.8.0