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 | 763 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 499 insertions(+), 264 deletions(-) diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs index 997458f..18c142a 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs @@ -17,10 +17,16 @@ { public static class MqttCommon { + /// <summary> + /// 鏄惁鎻愮ず 杩滅▼杩炴帴鐨勯敊璇俊鎭� + /// </summary> + public static bool IfDEBUG = false; + static string mqttEncryptKey = ""; static string checkGatewayTopicBase64 = ""; static RemoteMACInfo CurRemoteMACInfo = null; static MqttInfo mMqttInfo = null; + public static bool IsGatewayOnline = true; /// <summary> /// 鎵嬫満鏍囪瘑 @@ -44,6 +50,7 @@ static MqttCommon () { InitMqtt (); + //InitCheckGateway (); } /// <summary> @@ -54,15 +61,28 @@ { new System.Threading.Thread (async () => { while (true) { - System.Threading.Thread.Sleep (100); - if (!CommonPage.IsRemote) continue; + try { + System.Threading.Thread.Sleep (200); + if (!CommonPage.IsRemote) continue; - await StartCloudMqtt (); - await CheckingSubscribeTopics (); + if (Control.IsEnterBackground) continue; + + await StartCloudMqtt (); + await CheckingSubscribeTopics (); + } catch { } } }) { IsBackground = true }.Start (); } + + public static void InitState () + { + IfNeedReadAllDeviceStatus = true; + bNeedStartTip = true; + IsGatewayOnline = false; + StartCloudMqtt (); + } + /// <summary> /// 鏄惁璁㈤槄鎴愬姛 @@ -79,6 +99,7 @@ } try { if (!isSubscribeTopicSuccess) { + var topicFilterCommon = new TopicFilter () { Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#", @@ -97,34 +118,64 @@ QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; - var topicFilters = new TopicFilter [] { topicFilterCommon, topicFilterGateWayInfoChange, topicFilterNotifySqueeze }; + //缃戝叧鎺夌嚎涓婚 + var topicFilterNotifyGateWayOffline = new TopicFilter () { + Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyGateWayOffline", + 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 e) { - + } catch (Exception ex) { + + } } - - /// <summary> - /// 鏂紑杩滅▼Mqtt鐨勯摼鎺� + /// <summary> + /// 鏂紑杩滅▼Mqtt鐨勯摼鎺� /// </summary> - public static async System.Threading.Tasks.Task DisConnectRemoteMqttClient (string s = "") - { - try { - if (remoteIsConnected) { - remoteIsConnected = false; - System.Console.WriteLine ($"============>MqttRemote涓诲姩鏂紑_{s}"); - //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None); + public static async System.Threading.Tasks.Task DisConnectRemoteMqttClient (string s = "") + { + try { + if (remoteIsConnected) { + remoteIsConnected = false; + Utlis.WriteLine ($"============>MqttRemote涓诲姩鏂紑_{s}"); + //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None); await RemoteMqttClient.DisconnectAsync (); - } + if (CommonPage.IsRemote) { + Utlis.ShowAppLinkStatus (AppLinkStatus.CloudUnlink); + } + //Utlis.WriteLine ($"============>MqttRemoteDisConnectRemoteMqttClient"); + + } } catch (Exception e) { - System.Console.WriteLine ($"============>MqttRemote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}"); - } + Utlis.WriteLine ($"============>MqttRemote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}"); + } } static DateTime dateTime = DateTime.MinValue; @@ -134,13 +185,10 @@ static string PushSignStr = System.DateTime.Now.Ticks.ToString (); - - - /// <summary> /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴 /// </summary> - static bool remoteMqttIsConnecting; + public static bool remoteMqttIsConnecting; static bool remoteIsConnected; /// <summary> /// 鍚姩杩滅▼Mqtt @@ -160,180 +208,210 @@ 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 + //2020-06-22 澧炲姞 + RemoteMqttClient = new MqttFactory ().CreateMqttClient (); + + //(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/{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 (); - // }); - // } - //} else { - // thisShowTip = true; - //} - }); - } - if (RemoteMqttClient.ConnectedHandler == null) { - RemoteMqttClient.UseConnectedHandler (async (e) => { - - Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus (); - System.Console.WriteLine ($"============>Mqtt杩滅▼杩炴帴鎴愬姛"); - if (CommonPage.IsRemote) { - Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink); } - if (CurRemoteMACInfo != null) { - if (CurRemoteMACInfo.isValid == "InValid") { - MainPage.AddTip ("Remote failed,gateway offline"); - } else { - MqttRemoteSend (new byte [] { 0 }, 3); + } catch { } + }); + } + + if (RemoteMqttClient.DisconnectedHandler == null) { + RemoteMqttClient.UseDisconnectedHandler (async (e) => { + Utlis.WriteLine ($"============>Mqtt杩滅▼杩炴帴鏂紑"); + isSubscribeTopicSuccess = false; + await DisConnectRemoteMqttClient ("StartRemoteMqtt.DisconnectedHandler"); + }); + } + 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)); } } - - }); - } - #endregion + } + }); + } + #endregion //} - - 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 { - //濡傛灉鏄垎浜繃鏉ョ殑浣忓畢 璧颁笅闈㈡祦绋� - 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 (); - - } - - } - } + //鎻愮ず姝e湪鑾峰彇杩炴帴鍙傛暟..." + ShowStartTip (); + mqttRequestParToken = MainPage.LoginUser.LoginTokenString; + //--鍒ゆ柇鏄綋鍓嶆槸鍚﹀垎浜殑浣忓畢 + if (!UserConfig.Instance.CurrentRegion.IsOthreShare) { + //涓昏处鍙疯幏鍙朚QTT 杩滅▼閾炬帴淇℃伅锛屽苟杩炴帴 + await GetMqttInfoAndMQTTConnectAsync (); + } else { + //濡傛灉鏄垎浜繃鏉ョ殑浣忓畢 璧颁笅闈㈡祦绋� + await GetShareMqttInfoAndMQTTConnectAsync (); + } } catch (Exception ex) { - System.Console.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 (); } }); + } + + /// <summary> + /// 涓昏处鍙疯幏鍙朚QTT 杩滅▼閾炬帴淇℃伅锛屽苟杩炴帴 + /// </summary> + /// <returns></returns> + static async Task GetMqttInfoAndMQTTConnectAsync () + { + var mqttInfoRequestPar = new GetConnMqttInfoObj () { + LoginAccessToken = MainPage.LoginUser.LoginTokenString, + PlatformStr = "L1", + PublishPayloadJsonStr = PushSignStr, + Mac = UserConfig.Instance.GatewayMAC, + }; + //----绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟 + var mqttInfoRequestResult = MainPage.RequestHttps (API.GetConnMqttInfo, Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar)); + + if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) { + try { + var mqttInfoRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ()); + + if (mqttInfoRequestResult_Obj != null) { + mMqttInfo = mqttInfoRequestResult_Obj; + string url = mqttInfoRequestResult_Obj.connEmqDomainPort; + string clientId = mqttInfoRequestResult_Obj.connEmqClientId; + string username = mqttInfoRequestResult_Obj.connEmqUserName; + string passwordRemote = mqttInfoRequestResult_Obj.connEmqPwd; + if (mqttInfoRequestResult_Obj.AccountAllGateways != null && mqttInfoRequestResult_Obj.AccountAllGateways.Count > 0) { + //----绗簩姝ユ壘鍑烘槸鍚﹀瓨鍦ㄥ尮閰嶅綋鍓嶄綇瀹呯殑mac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆� + CurRemoteMACInfo = mqttInfoRequestResult_Obj.AccountAllGateways.Find ((obj) => obj.mac == UserConfig.Instance.GatewayMAC); + if (CurRemoteMACInfo != null) { + CurRemoteMACInfo.LoginAccessToken = MainPage.LoginUser.LoginTokenString; + CurRemoteMACInfo.clientId = clientId; + //----绗笁姝� 寮�濮嬭繛鎺� + await MQTTConnectAsync (); + } else { + //Utlis.WriteLine ("============>Mqtt CurRemoteMACInfo null"); + + MainPage.LoadingTipShow ("Please wait, failed to get gateway parameters."); + } + } + + } else { + //Utlis.WriteLine ("============>Mqtt mqttInfoRequestResult_Obj null"); + + MainPage.LoadingTipShow ("Please wait, failed to get user parameters."); + //MainPage.LoadingTipShow ("Please wait, failed to get parameters."); + } + } catch { + + } + } else { + //Utlis.WriteLine ("============>Mqtt GetInfo 澶辫触"); + MainPage.AddTip ("Please wait, failed to get parameters."); + //MainPage.LoadingTipShow ("Please wait, failed to get parameters."); + } + + } + + /// <summary> + /// 瀛愯处鍙疯幏鍙朚QTT 杩滅▼閾炬帴淇℃伅锛屽苟杩炴帴 + /// </summary> + /// <returns></returns> + static async Task GetShareMqttInfoAndMQTTConnectAsync () + { + var mqttInfoRequestPar = new ShareMemberConnMqttInfoObj () { + LoginAccessToken = mqttRequestParToken, + PlatformStr = "L1", + PublishPayloadJsonStr = PushSignStr, + MainUserDistributedMark = UserConfig.Instance.CurrentRegion.MainUserDistributedMark, + HomeId = UserConfig.Instance.CurrentRegion.Id + }; + var 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 (); + } else { + MainPage.LoadingTipShow ("Please wait, failed to get user parameters."); + } + } } /// <summary> @@ -341,94 +419,153 @@ /// </summary> static async Task MQTTConnectAsync () { - if (CurRemoteMACInfo != null && mMqttInfo != null) { - var url = mMqttInfo.connEmqDomainPort; - var clientId = mMqttInfo.connEmqClientId; - var username = mMqttInfo.connEmqUserName; - var passwordRemote = mMqttInfo.connEmqPwd; - CurRemoteMACInfo.LoginAccessToken = MainPage.LoginUser.LoginTokenString; - mqttEncryptKey = CurRemoteMACInfo.aesKey; - var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder () - .WithClientId (clientId) - .WithTcpServer (url.Split (':') [1].Substring ("//".Length), int.Parse (url.Split (':') [2])) - .WithCredentials (username, passwordRemote) - .WithCleanSession () - // .WithCommunicationTimeout (new TimeSpan (0, 0, 20)) - .Build (); + + //鑾峰彇鍙傛暟鎴愬姛锛屽紑濮嬭繛鎺�... + //MainPage.AddTip ("Successfully obtained parameters, starting to connect..."); - await DisConnectRemoteMqttClient ("StartRemoteMqtt"); - await RemoteMqttClient.ConnectAsync (options1); - remoteIsConnected = true; - //await MqttRemoteSend (new byte [] { 0 }, 1); - //await MqttRemoteSend (new byte [] { 0 }, 2); - //await MqttRemoteSend (new byte [] { 0 }, 4); + MainPage.LoadingTipShow ("Please wait, connecting remotely..."); + + //try { + // var url = mMqttInfo.connEmqDomainPort; + // var clientId = mMqttInfo.connEmqClientId; + // var username = mMqttInfo.connEmqUserName; + // var passwordRemote = mMqttInfo.connEmqPwd; + // CurRemoteMACInfo.clientId = clientId; + // CurRemoteMACInfo.LoginAccessToken = MainPage.LoginUser.LoginTokenString; + // mqttEncryptKey = CurRemoteMACInfo.isNewBusproGateway ? CurRemoteMACInfo.aesKey : ""; + // //mqttEncryptKey = CurRemoteMACInfo.aesKey; + // var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder () + // .WithClientId (clientId) + // .WithTcpServer (url.Split (':') [1].Substring ("//".Length), int.Parse (url.Split (':') [2])) + // .WithCredentials (username, passwordRemote) + // .WithCleanSession () + // // .WithCommunicationTimeout (new TimeSpan (0, 0, 20)) + // .Build (); + + // await DisConnectRemoteMqttClient ("StartRemoteMqtt"); + // await RemoteMqttClient.ConnectAsync (options1); + // remoteIsConnected = true; + // IsDisConnectingWithSendCatch = false; + //} catch (Exception ex) { + // Console.WriteLine ("Connect error: " + ex.Message); + //} + + //string mes = ""; + try { + + var url = mMqttInfo.connEmqDomainPort; + var clientId = mMqttInfo.connEmqClientId; + var username = mMqttInfo.connEmqUserName; + var passwordRemote = mMqttInfo.connEmqPwd; + + //mes = "step1.Set Data"; + CurRemoteMACInfo.LoginAccessToken = MainPage.LoginUser.LoginTokenString; + mqttEncryptKey = CurRemoteMACInfo.aesKey; + var options1 = new MQTTnet.Client.Options.MqttClientOptionsBuilder () + .WithClientId (clientId) + .WithTcpServer (url.Split (':') [1].Substring ("//".Length), int.Parse (url.Split (':') [2])) + .WithCredentials (username, passwordRemote) + .WithCleanSession () + // .WithCommunicationTimeout (new TimeSpan (0, 0, 20)) + .Build (); + + //mes = "step2.DisConnect"; + await DisConnectRemoteMqttClient ("StartRemoteMqtt"); + //MainPage.AddTip ("Start to connect..."); + //mes = "step3.Start to connect"; + await RemoteMqttClient.ConnectAsync (options1); + //mes = "step4.Connected Success"; + remoteIsConnected = true; + IsDisConnectingWithSendCatch = false; + + MainPage.LoadingTipShow ("Remote connection succeeded."); + + //MainPage.AddTip ("Connection succeeded!"); + //await MqttRemoteSend (new byte [] { 0 }, 1); + //await MqttRemoteSend (new byte [] { 0 }, 2); + //await MqttRemoteSend (new byte [] { 0 }, 4); + + } catch (Exception ex) { + //mes = ex.Message; + //options1 寮傚父鎻愮ず + //Console.WriteLine ("Connect error: " + ex.Message); + + MainPage.LoadingTipShow ("Connect error."); + + if (IfDEBUG) { + MainPage.ShowAlertOnMainThread ("Connect error: " + ex.Message); + } + } finally { + //MainPage.ShowAlertOnMainThread ("finally: " + mes); + //MainPage.AddTip ("finally: " + mes); + } } } - + /// <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..."); + MainPage.LoadingTipShow ("Please wait, getting connection parameters..."); + } + } + } + /// <summary> /// /// </summary> /// <param name="message">闄勫姞鏁版嵁鍖�</param> - /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁;3=璁㈤槄缃戝叧鏄惁鍦ㄧ嚎涓婚 4=璁㈤槄鎸や笅绾夸富棰� </param> + /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁</param> /// <returns></returns> public static async Task MqttRemoteSend (byte [] message, int optionType = 0) { try { - if (!remoteIsConnected) { - System.Console.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��"); - return; - } + //if (!remoteIsConnected) { + // Utlis.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��"); + // return; + //} - var topicName = @"/" + MainPage.LoginUser.AccountString.ToLower () + @"/" + UserConfig.Instance.GatewayMAC.Replace (".", "") + @"/" + currentGuid; + string topicName; switch (optionType) { case 0: - var messageSend = message; - if (string.IsNullOrEmpty (mqttEncryptKey)) { - topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON"; - } else { - topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/NewON"; - messageSend = Shared.Securitys.EncryptionService.AesEncryptPayload (message, mqttEncryptKey); + topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/ON"; + if (!string.IsNullOrEmpty (mqttEncryptKey)) { + message = Shared.Securitys.EncryptionService.AesEncryptPayload (message, mqttEncryptKey); } - //base64鍔犲瘑 - var m = new MqttApplicationMessage { Topic = topicName, Payload = messageSend, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; - //if (remoteIsConnected) { - try { - RemoteMqttClient.PublishAsync (m); - } catch (Exception e) { - //await DisConnectRemoteMqttClient (e.Message); - //await StartCloudMqtt (); - //if (remoteIsConnected) { - // RemoteMqttClient.PublishAsync (m); - //} - } - //} + await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce }); break; case 3: topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/CheckGateway"; - - var m1 = new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce }; - - try { - Console.WriteLine ("CheckGateway"); - RemoteMqttClient.PublishAsync (m1); - } catch (Exception e) { - Console.WriteLine ($"CheckGateway Fail:{e.Message}"); - //await DisConnectRemoteMqttClient (e.Message); - //await StartCloudMqtt (); - } + //Utlis.WriteLine ("CheckGateway"); + await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce }); break; } - - } catch (Exception e) { + // Utlis.WriteLine ($"============>Mqtt MqttRemoteSend catch"); + if (!IsDisConnectingWithSendCatch) { + IsDisConnectingWithSendCatch = true; + await DisConnectRemoteMqttClient ("MqttRemoteSendCatch"); + } } } + /// <summary> + /// SendCatch 鍚庢墽琛屼竴娆℃柇寮�鎿嶄綔 + /// </summary> + static bool IsDisConnectingWithSendCatch = false; /// <summary> /// 鍒嗕韩浣忓畢 鑾峰彇褰撳墠浣忓畢缃戝叧淇℃伅骞朵笖杩炴帴MQTT 鎴栬�呭埛鏂� @@ -472,13 +609,15 @@ } else { - System.Console.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧"); + Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧"); } } else { var mGatewayRes = infoResult.PageData.Find ((obj) => obj.GatewayUniqueId == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId); if (mGatewayRes != null) { CurRemoteMACInfo.aesKey = mGatewayRes.AesKey; mqttEncryptKey = CurRemoteMACInfo.aesKey; + } else { + MainPage.LoadingTipShow ("Please wait, failed to get gateway parameters."); } } @@ -488,41 +627,130 @@ } - + /// <summary> + /// 鏄惁闇�瑕佽鍙栦竴娆℃墍鏈夎澶囩姸鎬� + /// </summary> + static bool IfNeedReadAllDeviceStatus = true; /// <summary> /// 鏀跺埌缃戝叧涓婄嚎娑堟伅 /// </summary> static async Task ReceiveNotifyBusGateWayInfoChange () { - //褰撳墠浣忓畢涓嶆槸鍒嗕韩鏉� - if (!UserConfig.Instance.CurrentRegion.IsOthreShare) { + Utlis.WriteLine ("============>Mqtt 缃戝叧涓婄嚎"); + SetGatewayOnlineResetCheck (); + if (CommonPage.IsRemote) { - var gatewayListUrl = $"{MainPage.RequestHttpsHostMqtt}/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰 - var gatewayListRequestPar = new RemoteRequestParameters () { Mac = CurRemoteMACInfo.mac, 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 ()); - if (gatewayListRequestResult_Obj != null && gatewayListRequestResult_Obj.pageData.Count > 0) { - var mData = gatewayListRequestResult_Obj.pageData.Find ((obj) => obj.mac == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId); - if (mData != null) { - CurRemoteMACInfo.aesKey = mData.aesKey; - mqttEncryptKey = CurRemoteMACInfo.aesKey; - } +//#if DEBUG + MainPage.AddTip ("Gateway login online"); +//#endif + if (IfNeedReadAllDeviceStatus) { + IfNeedReadAllDeviceStatus = false; + Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus (); } - } else { - GetSingleHomeGatewayPaggerAndMQTTConnectAsync (false); } + //璇锋眰鍒锋柊涓�娆� 缃戝叧鍔犲瘑Key + await GetSingleHomeGatewayPaggerAndMQTTConnectAsync (false); + } + /// <summary> + /// 鏀跺埌缃戝叧鎺夌嚎淇℃伅 + /// </summary> + static void ReceiveNotifyGateWayOffline () + { + Utlis.WriteLine ("============>Mqtt GateWayOffline"); + IsGatewayOnline = false; + if (CommonPage.IsRemote) { + Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline); + MainPage.AddTip ("Remote failed,gateway offline"); + //if (MainPage.WiFiStatus != "CrabtreeAdd/CloudUnlink.png") { + // Utlis.ShowAppLinkStatus (AppLinkStatus.CloudUnlink); + //} + } } + + 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 (); + } + /// <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;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊 - CommonPage.IsRemote = false; @@ -552,7 +780,6 @@ public class ShareMemberConnMqttInfoObj : GetConnMqttInfoObj { - /// <summary> /// 涓讳汉鐢ㄦ埛Id /// </summary> @@ -579,6 +806,10 @@ /// /// </summary> public string PublishPayloadJsonStr = ""; + /// <summary> + /// Mac + /// </summary> + public string Mac = ""; } public class RemoteRequestParameters @@ -612,6 +843,8 @@ public string connEmqClientId; public string connEmqUserName; public string connEmqPwd; + + public List<RemoteMACInfo> AccountAllGateways; } public class RemoteMACInfo @@ -624,6 +857,8 @@ public string groupName; public string projectName; public string userName; + + public string clientId; //app鑷畾涔夋暟鎹� public string md5_mac_string; @@ -796,7 +1031,7 @@ RemoteMqttClient = null; } CommonPage.IsRemote = false; - Console.WriteLine ("Close Mqtt!!!"); + Utlis.WriteLine ("Close Mqtt!!!"); } catch { } } @@ -886,7 +1121,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; @@ -952,7 +1187,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)); @@ -966,7 +1201,7 @@ } }); RemoteMqttClient.UseConnectedHandler (async e => { - //Console.WriteLine ("RemoteMqttClient IsRemote"); + //Utlis.WriteLine ("RemoteMqttClient IsRemote"); await MqttCheckGateway (); }); } @@ -979,14 +1214,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 ()); @@ -1014,7 +1249,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 (); @@ -1108,7 +1343,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