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 | 310 +++++++++++++++++++++++++++++---------------------- 1 files changed, 174 insertions(+), 136 deletions(-) diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs index 0d6fb64..f580d57 100644 --- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs +++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs @@ -45,7 +45,7 @@ static MqttCommon () { InitMqtt (); - InitCheckGateway (); + //InitCheckGateway (); } /// <summary> @@ -177,161 +177,176 @@ 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; - //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 (); + var packet = new Packet (); + packet.IsLocal = false; + packet.Bytes = aesDecryptPayload; + packet.Manager (); - 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) => { + 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); } - - } catch { } - }); - } + MainPage.AddTip ("Remote failed,gateway offline"); + } else { + //Remote Connection Succeeded - 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 (); - // }); - // } + //缃戝叧鍦ㄧ嚎 + + //閲嶆柊涓�娆℃墍鏈夎澶囩姸鎬� + 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; - - 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 { - //缃戝叧鍦ㄧ嚎 - - //閲嶆柊涓�娆℃墍鏈夎澶囩姸鎬� - 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 { - Utlis.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) { Utlis.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}"); @@ -349,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; @@ -375,6 +393,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> ///// @@ -638,7 +677,7 @@ if (CheckGatewayCount >= 3) { //杩炵画3娆℃病鍥炲锛屽垽瀹氱綉鍏宠秴鏃� if (MainPage.WiFiStatus == "CrabtreeAdd/CloudLink.png") { - IsGatewayOnline = false; + //IsGatewayOnline = false; Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline); MainPage.AddTip ("Gateway offline!"); } @@ -672,7 +711,6 @@ //Utlis.WriteLine ("============>Mqtt CheckGateway缃戝叧鍥炲"); SetGatewayOnlineResetCheck (); - //鏃х綉鍏虫柟娉� //MainPage.WiFiStatus = "CrabtreeAdd/CloudUnlink.png"; -- Gitblit v1.8.0