From be95e839f40eb3ddf64706b60cba6dfcf4fad5e5 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期五, 03 四月 2020 14:31:44 +0800
Subject: [PATCH] 2020-04-03 1.去掉登录前ping百度域名的网络监测。
---
Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs | 1057 ++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 694 insertions(+), 363 deletions(-)
diff --git a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
index 97e1c46..0d6fb64 100644
--- a/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
+++ b/Crabtree/SmartHome/UI/SimpleControl/MqttCommon.cs
@@ -20,6 +20,8 @@
static string mqttEncryptKey = "";
static string checkGatewayTopicBase64 = "";
static RemoteMACInfo CurRemoteMACInfo = null;
+ static MqttInfo mMqttInfo = null;
+ public static bool IsGatewayOnline = true;
/// <summary>
/// 鎵嬫満鏍囪瘑
@@ -37,26 +39,121 @@
/// </summary>
public static IMqttClient RemoteMqttClient = new MqttFactory ().CreateMqttClient ();
- static bool thisShowTip = true;
- static string mqttRequestParToken="";
+ //static bool thisShowTip = true;
+ static string mqttRequestParToken = "";
- /// <summary>
- /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+ static MqttCommon ()
+ {
+ InitMqtt ();
+ InitCheckGateway ();
+ }
+
+ /// <summary>
+ /// 淇濇椿閲嶈繛鍜岄噸璁㈤槄 绾跨▼
/// </summary>
- public static async System.Threading.Tasks.Task DisConnectRemoteMqttClient (string s = "")
- {
- try {
- if (remoteIsConnected) {
- remoteIsConnected = false;
- System.Console.WriteLine ($"Remote涓诲姩鏂紑_{s}");
- //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
- await RemoteMqttClient.DisconnectAsync ();
- }
+ /// <returns></returns>
+ public static async System.Threading.Tasks.Task InitMqtt ()
+ {
+ new System.Threading.Thread (async () => {
+ while (true) {
+ try {
+ System.Threading.Thread.Sleep (100);
+ if (!CommonPage.IsRemote) continue;
+
+ await StartCloudMqtt ();
+ await CheckingSubscribeTopics ();
+ } catch { }
+
+ }
+ }) { IsBackground = true }.Start ();
+ }
+
+ /// <summary>
+ /// 鏄惁璁㈤槄鎴愬姛
+ /// </summary>
+ static bool isSubscribeTopicSuccess = false;
+ /// <summary>
+ /// 妫�鏌ヤ富棰樻槸鍚﹁闃呭け璐�
+ /// </summary>
+ /// <returns></returns>
+ static async Task CheckingSubscribeTopics ()
+ {
+ if (!remoteIsConnected) {
+ return;
+ }
+ try {
+ if (!isSubscribeTopicSuccess) {
+
+ var topicFilterCommon = new TopicFilter () {
+ Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#",
+ QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
+ };
+
+ //缃戝叧閲嶆柊鐧诲綍涓婚
+ var topicFilterGateWayInfoChange = new TopicFilter () {
+ Topic = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyBusGateWayInfoChange",
+ QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
+ };
+
+ //鎸や笅绾夸富棰�
+ var topicFilterNotifySqueeze = new TopicFilter () {
+ Topic = $"/BusGateWayToClient/{mMqttInfo.connEmqClientId}/Push/NotifySqueeze",
+ QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
+ };
+
+ //缃戝叧鎺夌嚎涓婚
+ 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;
+ }
+ }
} catch (Exception e) {
- System.Console.WriteLine ($"Remote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
- }
+
+ }
+ }
+
+
+
+ /// <summary>
+ /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+ /// </summary>
+ 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) {
+ Utlis.WriteLine ($"============>MqttRemote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+ }
}
static DateTime dateTime = DateTime.MinValue;
+
+ /// <summary>
+ /// 鎺ㄩ�佹爣璇�
+ /// </summary>
+ static string PushSignStr = System.DateTime.Now.Ticks.ToString ();
+
+
+
+
+
/// <summary>
/// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴
/// </summary>
@@ -68,291 +165,276 @@
public static async System.Threading.Tasks.Task StartCloudMqtt ()
{
- //Application.RunOnMainThread (() => {
- // if (5 < (DateTime.Now - dateTime).TotalSeconds) {
- // return;
- // }
- // //MainPage.Loading.Start (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.Connecting));
- // dateTime = DateTime.Now;
- //});
- if (!MainPage.LoginUser.IsLogin) {
- return;
- }
- //杩藉姞锛氭病鏈夎繙绋嬭繛鎺ョ殑鏉冮檺
- if (remoteMqttIsConnecting
- || remoteIsConnected) {
- return;
- }
+ if (!MainPage.LoginUser.IsLogin) {
+ return;
+ }
+ //杩藉姞锛氭病鏈夎繙绋嬭繛鎺ョ殑鏉冮檺
+ if (remoteMqttIsConnecting || remoteIsConnected) {
+ return;
+ }
- await System.Threading.Tasks.Task.Factory.StartNew (async () =>
- {
- try {
- lock (RemoteMqttClient) {
- //琛ㄧず鍚庨潰灏嗚繘琛岃繛鎺�
- remoteMqttIsConnecting = true;
+ remoteMqttIsConnecting = true;
+ 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 ((e) => {
- try {
- if (!RemoteMqttClient.IsConnected || !CommonPage.IsRemote) {
- return;
- }
- var aesDecryptTopic = e.ApplicationMessage.Topic;
- var aesDecryptPayload = e.ApplicationMessage.Payload;
- //Console.WriteLine ("Topic={0}", aesDecryptTopic);
+ #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 (aesDecryptTopic == $"NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
- //2020-01-11 淇敼璁㈤槄涓婚鍦板潃
- if (aesDecryptTopic == $"BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyBusGateWayInfoChange") {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
- Console.WriteLine ("缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey");
- //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
- 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) {
- CurRemoteMACInfo.aesKey = gatewayListRequestResult_Obj.pageData [0].aesKey;
- mqttEncryptKey = CurRemoteMACInfo.aesKey;
- }
+ if (!string.IsNullOrEmpty (mqttEncryptKey)) {
+ aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload (e.ApplicationMessage.Payload, mqttEncryptKey);
}
- 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 ($"杩滅▼杩炴帴鏂紑");
- await DisConnectRemoteMqttClient ("StartRemoteMqtt.DisconnectedHandler");
- //await StartRemoteMqtt();
- if (thisShowTip) {
+ }
+
+ } 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;
+
+ Utlis.WriteLine ($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
+ if (CommonPage.IsRemote) {
+ Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
+ }
+
+ if (CurRemoteMACInfo != null) {
+ IsGatewayOnline = CurRemoteMACInfo.isValid != "InValid";
+ if (!IsGatewayOnline) {
+ //缃戝叧涓嶅湪绾�
if (CommonPage.IsRemote) {
- Application.RunOnMainThread (() => {
- MainPage.Loading.Hide ();
- //Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
- });
+ Utlis.ShowAppLinkStatus (AppLinkStatus.CloudOffline);
}
+ MainPage.AddTip ("Remote failed,gateway offline");
} else {
- thisShowTip = true;
- }
- });
- }
- if (RemoteMqttClient.ConnectedHandler == null) {
- RemoteMqttClient.UseConnectedHandler (async (e) => {
- //Shared.Application.RunOnMainThread (() => {
- // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = 0xAA69E64A;
- //});
- Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
- System.Console.WriteLine ($"杩滅▼杩炴帴鎴愬姛");
- if (CommonPage.IsRemote) {
- Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
+ //缃戝叧鍦ㄧ嚎
+
+ //閲嶆柊涓�娆℃墍鏈夎澶囩姸鎬�
+ IfNeedReadAllDeviceStatus = false;
+ Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
+ //
+ MqttRemoteSend (new byte [] { 0 }, 3);
}
- //MainPage.WiFiStatus = "CrabtreeAdd/CloudLink.png";
- //UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus;
- if (CurRemoteMACInfo != null) {
- if (CurRemoteMACInfo.isValid == "InValid") {
- MainPage.AddTip ("Remote failed,gateway offline");
- Application.RunOnMainThread (() => {
- MainPage.Loading.Hide ();
- //Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
- });
- } else {
- MqttRemoteSend (new byte [] { 0 }, 3);
- //Application.RunOnMainThread (() => {
- // MainPage.Loading.Hide ();
- // Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = 0xAA69E64A;
- // Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
- //});
- //MainPage.AddTip (UserConfig.Instance.CurrentRegion.RegionName + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
- }
+ //if (CurRemoteMACInfo.isValid == "InValid") {
+ // MainPage.AddTip ("Remote failed,gateway offline");
+ //} else {
+ // MqttRemoteSend (new byte [] { 0 }, 3);
+ //}
+ }
+
+
+ });
+ }
+ #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 {
+ Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
}
- });
+ }
+
}
- #endregion
+ } 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 ();
+
+ }
+
+ }
}
- try {
- try {
- //鏂紑鍚庨噸鏂伴摼鎺ラ渶瑕侀噸鏂扮櫥褰曡幏鍙栬繛鎺ョ殑瀵嗙爜
- var requestObj = new LoginObj () { Account = MainPage.LoginUser.AccountString.ToLower (), Password = MainPage.LoginUser.Password };
- var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj);
- var tempResult = MainPage.RequestHttps (API.Login, requestJson);
- if (tempResult == null) {
- Application.RunOnMainThread (() => {
- MainPage.Loading.Hide ();
- //Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
- });
- return;
- }
- var responsePack = tempResult.ResponseData;
- var dictrionaryResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>> (tempResult.ResponseData.ToString ());
- var mqttRequestPar = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes> (tempResult.ResponseData.ToString ());
- mqttRequestParToken = mqttRequestPar.Token;
- //杩樻湁绉嶆儏鍐垫槸鍚屼竴涓狪D 鏈夊涓澶囩敤杩欎釜id杩炴帴锛堜細瀵艰嚧涓柇锛�
- //mqttEncryptKey = dictrionaryResult ["HdlOnMqttKey"]?.ToString ();
- var url = dictrionaryResult ["ConnectMqttBrokerLoadSubDomain"]?.ToString ();
- var clientId = dictrionaryResult ["ConnectMqttClientId"]?.ToString ();
- var username = dictrionaryResult ["ConnectMqttBrokerUserName"]?.ToString ();
- var passwordRemote = dictrionaryResult ["ConnectMqttBrokerPwd"]?.ToString ();
-
- if (clientId == null || username == null || passwordRemote == null) {
- return;
- }
-
- var requestObj3 = new GetSingleHomeGatewayPaggerObj ();
- requestObj3.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
- requestObj3.ReqDto.HomeId = UserConfig.Instance.CurrentRegion.Id;
- requestObj3.ReqDto.PageSetting.Page = 1;
- requestObj3.ReqDto.PageSetting.PageSize = 10;
- string urlHead = MainPage.RequestHttpsHost;
- if (requestObj3.IsOtherAccountCtrl) {
- urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
- requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
- }
-
-
- //var requestObj3 = new GatewayByRegionListObj () { RegionID = UserConfig.Instance.CurrentRegion.Id };
- var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
- var revertObj3 = MainPage.RequestHttps (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
- if (revertObj3.StateCode.ToUpper() == "SUCCESS") {
- var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
- //2020-01-11
- UserConfig.Instance.SetNowHomeGateways (infoResult.PageData);
- } else {
- //鎻愮ず閿欒
- //GetSingleHomeGatewayPagger
- }
-
- if (tempResult == null) {
- Application.RunOnMainThread (() => {
- MainPage.Loading.Hide ();
- //Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
- });
- return;
- }
- try {
- //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
- var mqttInfoUrl = $"{MainPage.RequestHttpsHostMqtt}/Center/Center/GetConnMqttInfo";//鑾峰彇杩炴帴杩滅▼浜戠Emq Mqtt 鏈嶅姟鍣ㄨ繛鎺ヤ俊鎭�
- var mqttInfoRequestPar = new RemoteRequestParameters () { LoginAccessToken = mqttRequestParToken, RequestVersion = MainPage.RequestVersion, RequestProtocolType = 0, RequestSource = 1 };
- var mqttInfoRequestResult = MainPage.RequestHttps ("", Newtonsoft.Json.JsonConvert.SerializeObject (mqttInfoRequestPar), mqttInfoUrl);
- if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null) {
- var mqttInfoRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttInfo> (mqttInfoRequestResult.ResponseData.ToString ());
- if (mqttInfoRequestResult_Obj != null) {
- url = mqttInfoRequestResult_Obj.connEmqDomainPort;
- clientId = mqttInfoRequestResult_Obj.connEmqClientId;
- username = mqttInfoRequestResult_Obj.connEmqUserName;
- passwordRemote = mqttInfoRequestResult_Obj.connEmqPwd;
- //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
- 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.CheckHomeGateways ()) {
- CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData.Find ((obj) => obj.mac == UserConfig.Instance.CurrentRegion.HomeGateways[0].GatewayUniqueId);
- CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData [0];
- if (CurRemoteMACInfo != null) {
- CurRemoteMACInfo.LoginAccessToken = mqttRequestPar.Token;
- 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;
- await MqttRemoteSend (new byte [] { 0 }, 1);
- await MqttRemoteSend (new byte [] { 0 }, 2);
- }
- }
-
- }
-
- }
- } catch (Exception ex) {
- Console.WriteLine (ex.Message);
- }
- } catch (Exception ex) {
- System.Console.WriteLine ("============>" + ex.Message);
- Application.RunOnMainThread (() => {
- //MainPage.Loading.Hide ();
- //isConnecting = false.ToString ();
-
- //Shared.SimpleControl.Phone.UserMiddle.LinkStatusTip.BackgroundColor = SkinStyle.Current.DelColor;
-#if DEBUG
- Alert a = new Alert (remoteMqttIsConnecting.ToString (), ex.Message, "Close");
- a.Show ();
-#endif
- });
- } finally {
- Application.RunOnMainThread (() => {
- MainPage.Loading.Hide ();
- });
- }
- } catch { } finally {
- //鏈�缁堣閲婃斁杩炴帴鐘舵��
- remoteMqttIsConnecting = false;
- }
- } catch (Exception ex) {
- System.Console.WriteLine ($"杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}");
- }
- });
+ } catch (Exception ex) {
+ Utlis.WriteLine ($"============>Mqtt 杩滅▼杩炴帴閫氳杩炴帴鍑哄紓甯�:{ex.Message}");
+ } finally {
+ //鏈�缁堣閲婃斁杩炴帴鐘舵��
+ remoteMqttIsConnecting = false;
+ }
+ });
}
+
+ /// <summary>
+ /// 杩炴帴MQTT
+ /// </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 ();
+
+ await DisConnectRemoteMqttClient ("StartRemoteMqtt");
+ await RemoteMqttClient.ConnectAsync (options1);
+ remoteIsConnected = true;
+ IsDisConnectingWithSendCatch = false;
+ //await MqttRemoteSend (new byte [] { 0 }, 1);
+ //await MqttRemoteSend (new byte [] { 0 }, 2);
+ //await MqttRemoteSend (new byte [] { 0 }, 4);
+
+ }
+ }
+
+
+ ///// <summary>
+ /////
+ ///// </summary>
+ ///// <param name="message">闄勫姞鏁版嵁鍖�</param>
+ ///// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁;3=璁㈤槄缃戝叧鏄惁鍦ㄧ嚎涓婚 4=璁㈤槄鎸や笅绾夸富棰� </param>
+ ///// <returns></returns>
+ //public static async Task MqttRemoteSend (byte [] message, int optionType = 0)
+ //{
+ // try {
+ // if (!remoteIsConnected) {
+ // Utlis.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
+ // return;
+ // }
+
+ // var topicName = @"/" + MainPage.LoginUser.AccountString.ToLower () + @"/" + UserConfig.Instance.GatewayMAC.Replace (".", "") + @"/" + currentGuid;
+ // 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);
+ // }
+ // //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);
+ // //}
+ // }
+ // //}
+ // break;
+ // case 3:
+ // topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/CheckGateway";
+
+ // var m1 = new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce };
+
+ // try {
+ // Utlis.WriteLine ("CheckGateway");
+ // RemoteMqttClient.PublishAsync (m1);
+ // } catch (Exception e) {
+ // Utlis.WriteLine ($"CheckGateway Fail:{e.Message}");
+ // //await DisConnectRemoteMqttClient (e.Message);
+ // //await StartCloudMqtt ();
+ // }
+ // break;
+ // }
+
+
+ // } catch (Exception e) {
+
+ // }
+ //}
/// <summary>
///
@@ -363,95 +445,342 @@
public static async Task MqttRemoteSend (byte [] message, int optionType = 0)
{
try {
- var topicName = @"/" + MainPage.LoginUser.AccountString.ToLower () + @"/" + UserConfig.Instance.GatewayMAC.Replace (".", "") + @"/" + currentGuid;
+ //if (!remoteIsConnected) {
+ // Utlis.WriteLine ($"============>Mqtt 鏈繛鎺� 鍙栨秷鍙戦��");
+ // return;
+ //}
+
+ 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 {
- await RemoteMqttClient.PublishAsync (m);
- } catch (Exception e) {
- await DisConnectRemoteMqttClient (e.Message);
- await StartCloudMqtt ();
- if (remoteIsConnected) {
- await RemoteMqttClient.PublishAsync (m);
- }
- }
- //}
+ await RemoteMqttClient.PublishAsync (new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
break;
- case 1:
- topicName = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#";
- //if (remoteIsConnected) {
- try {
- await RemoteMqttClient.SubscribeAsync (topicName);
- } catch (Exception e) {
- await DisConnectRemoteMqttClient (e.Message);
- await StartCloudMqtt ();
- if (remoteIsConnected) {
- await RemoteMqttClient.SubscribeAsync (topicName);
- }
- }
- // }
- break;
- case 2:
- var macStr = CurRemoteMACInfo.mac.ToUpper ();
- char [] cArrs = macStr.ToCharArray ();
- Array.Reverse (cArrs);
- var sss = string.Join (string.Empty, cArrs);
-
- using (var provider = new MD5CryptoServiceProvider ()) {
- byte [] buffer = provider.ComputeHash (Encoding.Default.GetBytes (sss));
- StringBuilder builder = new StringBuilder ();
- for (int i = 0; i < buffer.Length; i++) {
- builder.Append (buffer [i].ToString ("x2"));
- }
- CurRemoteMACInfo.md5_mac_string = builder.ToString ().ToUpper ();
- }
-
- //topicName = $"/NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}";
- //2020-01-11 淇敼璁㈤槄涓婚鍦板潃
- topicName = $"BusGateWayToClient/{CurRemoteMACInfo.macMark}/NotifyBusGateWayInfoChange";
- //if (remoteIsConnected) {
- try {
- await RemoteMqttClient.SubscribeAsync (topicName);
- } catch (Exception e) {
- await DisConnectRemoteMqttClient (e.Message);
- await StartCloudMqtt ();
- if (remoteIsConnected) {
- await RemoteMqttClient.SubscribeAsync (topicName);
- }
- }
- //}
- 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");
- await 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 鎴栬�呭埛鏂�
+ /// 2020-01-11
+ /// </summary>
+ static async Task GetSingleHomeGatewayPaggerAndMQTTConnectAsync (bool bNeedConnect = true)
+ {
+
+ var requestObj3 = new GetSingleHomeGatewayPaggerObj ();
+ requestObj3.ReqDto.LoginAccessToken = MainPage.LoginUser.LoginTokenString;
+ requestObj3.ReqDto.HomeId = UserConfig.Instance.CurrentRegion.Id;
+ requestObj3.ReqDto.PageSetting.Page = 1;
+ requestObj3.ReqDto.PageSetting.PageSize = 10;
+ string urlHead = MainPage.RequestHttpsHost;
+ if (requestObj3.IsOtherAccountCtrl) {
+ urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
+ requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
+ }
+
+ var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
+ var revertObj3 = MainPage.RequestHttps (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
+ if (revertObj3.StateCode.ToUpper () == "SUCCESS") {
+ var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
+ if (bNeedConnect) {
+ //2020-01-11
+ UserConfig.Instance.SetNowHomeGateways (infoResult.PageData);
+
+ //var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo> (revertObj3.ResponseData.ToString ());
+ //--鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
+ if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) {
+ var mGatewayRes = infoResult.PageData.Find ((obj) => obj.GatewayUniqueId == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId);
+ if (mGatewayRes != null) {
+ CurRemoteMACInfo = new RemoteMACInfo ();
+ CurRemoteMACInfo.aesKey = mGatewayRes.AesKey;
+ CurRemoteMACInfo.mac = mGatewayRes.GatewayUniqueId;
+ CurRemoteMACInfo.macMark = mGatewayRes.MacMark;
+ CurRemoteMACInfo.isValid = mGatewayRes.MqttOnlineStatus ? "Valid" : "InValid";
+
+ await MQTTConnectAsync ();
+ }
+
+
+ } else {
+ 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;
+ }
+
+ }
+
+
+ }
+
+
+ }
+ /// <summary>
+ /// 鏄惁闇�瑕佽鍙栦竴娆℃墍鏈夎澶囩姸鎬�
+ /// </summary>
+ static bool IfNeedReadAllDeviceStatus = true;
+ /// <summary>
+ /// 鏀跺埌缃戝叧涓婄嚎娑堟伅
+ /// </summary>
+ static async Task ReceiveNotifyBusGateWayInfoChange ()
+ {
+ Utlis.WriteLine ("============>Mqtt 缃戝叧涓婄嚎");
+ SetGatewayOnlineResetCheck ();
+ if (CommonPage.IsRemote) {
+
+//#if DEBUG
+ MainPage.AddTip ("Gateway login online");
+//#endif
+ if (IfNeedReadAllDeviceStatus) {
+ IfNeedReadAllDeviceStatus = false;
+ Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus ();
+ }
+ }
+
+ //褰撳墠浣忓畢涓嶆槸鍒嗕韩鏉�
+ if (!UserConfig.Instance.CurrentRegion.IsOthreShare) {
+
+ 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;
+ }
+ }
+ } else {
+ 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 ();
+
+
+
+ //鏃х綉鍏虫柟娉�
+ //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)
+ {
+ Utlis.WriteLine ($"============>MqttNotifySqueeze: {ErrorCode.LoginInAnotherDevice}");
+ var mMes = CommonPage.MyEncodingUTF8.GetString (mes);
+ if (mMes == PushSignStr) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊
+
+
+ CommonPage.IsRemote = false;
+
+ //if (MainPage.IsOtherDevicesLogin) return;
+
+ if (!MainPage.LoginUser.IsLogin) {
+ return;
+ }
+
+ MainPage.LoginUser.LastTime = DateTime.Now.AddDays (-30);
+ MainPage.LoginUser.SaveUserInfo ();
+
+ DisConnectRemoteMqttClient ("鎸や笅绾�");
+
+ MainPage.ShowAlertOnMainThread (ErrorCode.LoginInAnotherDevice);
+
+ Application.RunOnMainThread (() => {
+
+ MainPage.WiFiStatus = "CrabtreeAdd/WiFi.png";
+ UserMiddle.btnLinkStatus.UnSelectedImagePath = MainPage.WiFiStatus;
+ new AccountLogin ().Show ();
+ });
+
+ }
+
}
+}
+
+public class ShareMemberConnMqttInfoObj : GetConnMqttInfoObj
+{
+
+ /// <summary>
+ /// 涓讳汉鐢ㄦ埛Id
+ /// </summary>
+ public string MainUserDistributedMark;
+
+ /// <summary>
+ /// 鍒嗕韩鑰呬綇瀹匢d
+ /// </summary>
+ public string HomeId;
+
+}
+
+public class GetConnMqttInfoObj : BaseRequestObj
+{
+ /// <summary>
+ /// HdlGatewayGatewayType 缃戝叧绫诲瀷(0:涓�绔彛銆�1:BusproLinux 缃戝叧銆�2:Zigbee 缃戝叧銆�3:Knx缃戝叧)
+ /// </summary>
+ public int HdlGatewayGatewayType = 0;
+ /// <summary>
+ /// 璁惧绫诲瀷瀛楁
+ /// </summary>
+ public string PlatformStr = "";
+ /// <summary>
+ ///
+ /// </summary>
+ public string PublishPayloadJsonStr = "";
}
public class RemoteRequestParameters
@@ -461,8 +790,10 @@
public string LoginAccessToken;
public int RequestProtocolType;
+
public string Mac = "";
public string GroupName = "";
+
}
public class MqttRemoteInfo
@@ -667,7 +998,7 @@
RemoteMqttClient = null;
}
CommonPage.IsRemote = false;
- Console.WriteLine ("Close Mqtt!!!");
+ Utlis.WriteLine ("Close Mqtt!!!");
} catch { }
}
@@ -757,7 +1088,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;
@@ -823,7 +1154,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));
@@ -837,7 +1168,7 @@
}
});
RemoteMqttClient.UseConnectedHandler (async e => {
- //Console.WriteLine ("RemoteMqttClient IsRemote");
+ //Utlis.WriteLine ("RemoteMqttClient IsRemote");
await MqttCheckGateway ();
});
}
@@ -850,14 +1181,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 ());
@@ -885,7 +1216,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 ();
@@ -979,7 +1310,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