From 4c17caa61bc3b0a05a2b303bccdfedfbf3853f6d Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期二, 24 十一月 2020 15:58:10 +0800
Subject: [PATCH] 2020-11-24 1.优化登录界面失败提示。
---
HDL_ON/DAL/Net/MqttCommon.cs | 1752 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 1,202 insertions(+), 550 deletions(-)
diff --git a/HDL_ON/DAL/Net/MqttCommon.cs b/HDL_ON/DAL/Net/MqttCommon.cs
index 21871fe..5a3594e 100644
--- a/HDL_ON/DAL/Net/MqttCommon.cs
+++ b/HDL_ON/DAL/Net/MqttCommon.cs
@@ -1,574 +1,1226 @@
锘縰sing System.Collections.Generic;
using System;
-using MQTTnet.Client;
-using System.Threading.Tasks;
-using Shared;
using System.Text;
using System.Security.Cryptography;
-using System.IO;
-using HDL_ON.DAL;
-using HDL_ON.UI;
+using MQTTnet.Client;
using MQTTnet;
+using System.Threading.Tasks;
+using Shared;
using HDL_ON.DAL.Server;
namespace HDL_ON.DAL.Net
{
- public static class MqttCommon
+
+// public static class MqttCommon
+// {
+// /// <summary>
+// /// 鏄惁鎻愮ず 杩滅▼杩炴帴鐨勯敊璇俊鎭�
+// /// </summary>
+// public static bool IfDEBUG = false;
+
+// /// <summary>
+// /// 鍔犲瘑閫氳KEY
+// /// </summary>
+// static string mqttEncryptKey = "";
+// //static string checkGatewayTopicBase64 = "";
+
+// /// <summary>
+// /// 鎸や笅绾夸富棰�
+// /// </summary>
+// static readonly string PushNotifySqueeze = "/Push/NotifySqueeze";
+
+// ///// <summary>
+// ///// 鎸や笅绾夸富棰�
+// ///// </summary>
+// //static readonly string TopicToApp = "/Push/NotifySqueeze";
+
+
+// /// <summary>
+// /// 闅忔満Key
+// /// </summary>
+// static string RandomKey = "";
+
+// static string GetRandomKey()
+// {
+// if (string.IsNullOrEmpty(RandomKey))
+// {
+// //闅忔満2浣嶅瓧绗︿覆
+// RandomKey = Utlis.CreateRandomString(2);
+// }
+
+// return RandomKey;
+
+// }
+
+// /// <summary>
+// /// 杩滅▼MqttClient
+// /// </summary>
+// public static IMqttClient RemoteMqttClient = new MqttFactory().CreateMqttClient();
+
+
+// /// <summary>
+// /// 鎺ㄩ�佹爣璇�
+// /// </summary>
+// static string PushSignStr = System.DateTime.Now.Ticks.ToString();
+
+// /// <summary>
+// /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+// /// </summary>
+// static async System.Threading.Tasks.Task DisConnectRemoteMqttClient(string s = "")
+// {
+// try
+// {
+// if (remoteIsConnected)
+// {
+// remoteIsConnected = false;
+// isSubscribeSuccess = false;
+// Utlis.WriteLine($"Remote涓诲姩鏂紑_{s}");
+// //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
+// await RemoteMqttClient.DisconnectAsync();
+
+// if (MainPage.IsRemote)
+// {
+// ////涓嶆槸鏃犵綉缁�
+// //if (UserConfig.Instance.internetStatus != 0)
+// //{
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudUnlink);
+// //}
+// }
+// }
+// }
+// catch (Exception e)
+// {
+// Utlis.WriteLine($"Remote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+// }
+// }
+
+// /// <summary>
+// /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+// /// </summary>
+// static async Task DisConnectRemoteMqttClientWhenStart(string s = "")
+// {
+// try
+// {
+// //if (remoteIsConnected) {
+// remoteIsConnected = false;
+// isSubscribeSuccess = false;
+// Utlis.WriteLine($"RemoteStart涓诲姩鏂紑_{s}");
+// await RemoteMqttClient.DisconnectAsync();
+
+// //}
+// }
+// catch (Exception e)
+// {
+// Utlis.WriteLine($"RemoteStart鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+// }
+
+// }
+
+
+// /// <summary>
+// /// 鏂紑mqtt杩炴帴
+// /// </summary>
+// /// <param name="s">鏂紑鍘熷洜</param>
+// /// <param name="reset">鏄惁闇�瑕佸幓涓績鏈嶅姟鍣� 閲嶆柊鑾峰彇鍙傛暟</param>
+// /// <returns></returns>
+// public static async Task DisConnectRemote(string s = "", bool reset = true)
+// {
+// if (reset)
+// {
+// bNeedStartTip = true;
+// bNeedConnectTip = true;
+// MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
+// }
+// await DisConnectRemoteMqttClient(s);
+// }
+
+// //static DateTime dateTime = DateTime.MinValue;
+// /// <summary>
+// /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴
+// /// </summary>
+// public static bool remoteMqttIsConnecting;
+// static bool remoteIsConnected;
+
+// static MqttCommon()
+// {
+// InitMqtt();
+// }
+
+// public static bool IsInitMqtt = false;
+
+
+
+// static void InitMqtt()
+// {
+// new System.Threading.Thread(async () =>
+// {
+// while (true)
+// {
+// try
+// {
+// System.Threading.Thread.Sleep(500);
+
+// if (!MainPage.IsRemote) continue;
+
+// //if (BusSocket.IsEnterBackground) continue;
+
+// await StartCloudMqtt();
+// await SubscribeTopics();
+// }
+// catch { }
+// }
+// })
+// { IsBackground = true }.Start();
+// }
+
+// /// <summary>
+// /// 鍒濆鍖栫姸鎬�
+// /// </summary>
+// public static void InitState()
+// {
+// IfNeedReadAllDeviceStatus = true;
+// bNeedStartTip = true;
+// bNeedConnectTip = true;
+// IsGatewayOnline = false;
+// StartCloudMqtt();
+
+// }
+
+// static bool isSubscribeSuccess;
+// static async Task SubscribeTopics()
+// {
+// if (remoteIsConnected && !isSubscribeSuccess)
+// {
+// try
+// {
+
+// //var topicFilterPush = new TopicFilter { QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce,
+// // Topic = $"/BusGateWayToClient/{MqttInfoConfig.Instance.CurRemoteMACInfo.clientId}/Push/NotifySqueeze" };
+
+// //2020-05-14 璁㈤槄涓婚璐ㄩ噺鏀逛负0
+// var topicFilterBusGateWayToClient = new MqttTopicFilter()
+// {
+// Topic = $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.id}/#",
+// QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
+// //QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
+// };
+
+// var topicFilterPush2 = new MqttTopicFilter
+// {
+// Topic = $"/BusGateWayToClient/{MainPage.LoginUser.ID}/#",
+// QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce,
+// //QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
+// };
+
+// Utlis.WriteLine("寮�濮嬭闃咃紒");
+// var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] { topicFilterBusGateWayToClient, topicFilterPush2 });
+// if (result.Items[0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0)
+// {
+// isSubscribeSuccess = true;
+// Utlis.WriteLine("璁㈤槄鎴愬姛锛�");
+
+// MqttRemoteSend(new byte[] { 0 }, 3);
+
+// //璇诲彇鎼滅储缃戝叧锛屽垽鏂綉鍏虫槸鍚﹀湪绾�
+// CheckGatewaysIfOnline();
+
+// //杩炴帴鎴愬姛鍚庢娴嬫槸鍚﹂渶瑕侀�氳繃杩滅▼鑾峰彇Key
+// CheckIfNeedGetLocalPasswordFromRemote();
+// }
+
+
+// }
+// catch (Exception ex)
+// {
+// Console.WriteLine("璁㈤槄catch:" + ex.Message.ToString());
+// }
+// }
+// }
+
+// static DateTime mFlagDateTime;
+
+// //static readonly object SendLocker = new object ();
+// /// <summary>
+// /// 鍚姩杩滅▼Mqtt
+// /// </summary>
+// public static async Task StartCloudMqtt()
+// {
+
+// if (UserConfig.Instance.internetStatus == 0)
+// {
+// return;
+// }
+
+// if (!UserInfo.Current.IsLogin)
+// {
+// return;
+// }
+
+// //杩藉姞锛氭病鏈夎繙绋嬭繛鎺ョ殑鏉冮檺
+// if (remoteMqttIsConnecting || remoteIsConnected)
+// {
+// return;
+// }
+
+// //lock (SendLocker) {
+// // remoteMqttIsConnecting = true;
+// //}
+// remoteMqttIsConnecting = true;
+//#if DEBUG
+// Utlis.WriteLine($"StartCloudMqtt: 寮�濮�");
+//#endif
+
+// await Task.Factory.StartNew(async () =>
+// {
+// try
+// {
+// //lock (RemoteMqttClient) {
+// // //琛ㄧず鍚庨潰灏嗚繘琛岃繛鎺�
+// // remoteMqttIsConnecting = true;
+
+// #region 鍒濆鍖栬繙绋婱qtt
+
+// RemoteMqttClient = new MqttFactory().CreateMqttClient();
+
+
+// //(1)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊
+// if (RemoteMqttClient.ApplicationMessageReceivedHandler == null)
+// {
+// RemoteMqttClient.UseApplicationMessageReceivedHandler((e) =>
+// {
+// try
+// {
+// var topic = e.ApplicationMessage.Topic;
+// if (topic == $"/BusGateWayToClient/{UserInfo.Current.ID}" + PushNotifySqueeze)
+// {
+// var mMes = CommonPage.MyEncodingUTF8.GetString(e.ApplicationMessage.Payload);
+// //鏂版尋涓嬬嚎涓婚鏂规 鏀跺埌鎸や笅绾夸富棰�
+// ReceiveNotifySqueezeAsync(mMes);
+// }
+// else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.id}/NotifyBusGateWayInfoChange")
+// {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
+// //鏀跺埌缃戝叧涓婄嚎娑堟伅涓婚
+// ReceiveNotifyBusGateWayInfoChange();
+// }
+// else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.id}/NotifyGateWayOffline")
+// {//缃戝叧鎺夌嚎 //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
+// ReceiveNotifyGateWayOffline();
+// }
+// else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.id}/Common/CheckGateway")
+// {
+// var ss = CommonPage.MyEncodingUTF8.GetString(e.ApplicationMessage.Payload);
+// ReceiveCheckGateway(ss);
+// }
+// else
+// {
+
+// SetGatewayOnlineResetCheck();
+
+// var packet = new Packet();
+
+// if (!string.IsNullOrEmpty(mqttEncryptKey))
+// {
+// packet.Bytes = Shared.Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
+// }
+// else
+// {
+// packet.Bytes = e.ApplicationMessage.Payload;
+// }
+// packet.IsLocal = false;
+// packet.Manager();
+// }
+// }
+// catch { }
+// });
+// }
+
+// //(2)DisconnectedHandler
+// if (RemoteMqttClient.DisconnectedHandler == null)
+// {
+// RemoteMqttClient.UseDisconnectedHandler(async (e) =>
+// {
+// Utlis.WriteLine($"杩滅▼杩炴帴鏂紑");
+// isSubscribeSuccess = false;
+// await DisConnectRemoteMqttClient("UseDisconnectedHandler");
+
+// });
+// }
+// //(3)ConnectedHandler
+// if (RemoteMqttClient.ConnectedHandler == null)
+// {
+// RemoteMqttClient.UseConnectedHandler(async (e) =>
+// {
+// IfNeedReadAllDeviceStatus = true;
+// bNeedStartTip = true;//
+// bNeedConnectTip = true;
+// Utlis.WriteLine($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
+// SendPushSignOut();
+
+// //if (CommonPage.IsRemote) {
+// // //Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
+// // MainPage.AddTip (Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
+// //}
+// });
+// }
+// #endregion
+// //}
+
+// //(4)===========寮�濮嬭繛鎺ヨ繃绋�==========
+// //涔嬪墠宸茬粡鑾峰彇鍙傛暟鎴愬姛杩�
+// if (MqttInfoConfig.Current.IfGetMqttInfoSuccess)
+// {
+// //鍒ゆ柇鏄惁闇�瑕侀噸鏂拌幏鍙�
+// await CheckMQTTConnectAsync();
+// }
+// else
+// {
+// //寮�濮嬭幏鍙栬繙绋嬭繛鎺ュ弬鏁�
+// await StartMQTTGetInfo();
+// }
+
+// }
+// catch (Exception ex)
+// {
+// Utlis.WriteLine($"error:" + ex.Message);
+// if (IfDEBUG)
+// {
+// Utlis.ShowAlertOnMainThread("error: " + ex.Message);
+// }
+// }
+// finally
+// {
+// //鏈�缁堣閲婃斁杩炴帴鐘舵��
+// remoteMqttIsConnecting = false;
+
+// //lock (SendLocker) {
+// // remoteMqttIsConnecting = false;
+// //}
+
+// //杩炴帴鎴愬姛鎵嶅叧闂璍oading
+// if (remoteIsConnected)
+// {
+// //MainPage.LoadingTipHide();
+// ERRORCount = 0;
+// }
+// else
+// {
+// ERRORCount++;
+// //姣�5娆¢噸鏂版彁绀轰竴娆�
+// if (ERRORCount > 5)
+// {
+// ERRORCount = 0;
+// //MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.RemoteFailure));
+// //MainPage.LoadingTipHide();
+
+// }
+// }
+
+//#if DEBUG
+// Utlis.WriteLine($"StartCloudMqtt: 缁撴潫");
+//#endif
+// }
+
+// });
+// }
+
+// //static bool
+
+
+// /// <summary>
+// /// 妫�鏌ョ綉鍏虫槸鍚﹀湪绾跨嚎绋�
+// /// </summary>
+// static System.Threading.Thread CheckGatewaysThead;
+
+// /// <summary>
+// /// 妫�鏌ョ綉鍏虫槸鍚﹀湪绾�
+// /// </summary>
+// static void CheckGatewaysIfOnline()
+// {
+// if (GatewayCommon == null) return;
+
+// try
+// {
+// //鎻愮ず鎼滅储缃戝叧涓�
+// //MainPage.LoadingTipShow(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.SubscriptionSuccessful));
+
+// if (CheckGatewaysThead != null)
+// CheckGatewaysThead.Abort();
+
+// //CheckGatewaysThead = new System.Threading.Thread(() => {
+// // var returnBytes = Control.ControlBytesSendHasReturn(Command.ReadGateway, GatewayCommon.SubnetID, GatewayCommon.DeviceID, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) });
+// // //闅愯棌鎻愮ず
+// // MainPage.LoadingTipHide();
+// // if (CommonPage.IsRemote)
+// // {
+// // if (returnBytes == null)
+// // {
+// // Application.RunOnMainThread(() => {
+// // IsGatewayOnline = false;
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudOffline);
+// // MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.RemoteFailedGatewayOffline));
+// // //鍙戦�佷竴娆heckGateway涓婚
+// // MqttRemoteSend(new byte[] { 0 }, 3);
+// // });
+// // }
+// // else
+// // {
+// // MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
+
+// // IsGatewayOnline = true;
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudLink);
+// // Console.WriteLine("ReadGateway success");
+// // CheckIfNeedReadAllDeviceStatus();
+// // }
+// // }
+// //})
+// //{ IsBackground = true };
+
+// //CheckGatewaysThead.Start();
+// }
+// catch
+// {
+
+// }
+// }
+
+
+// /// <summary>
+// /// 妫�娴嬫槸鍚﹂渶瑕佸彂閫佸埛鏂拌幏鍙栨墍鏈夎澶囩殑鍛戒护
+// /// </summary>
+// static void CheckIfNeedReadAllDeviceStatus()
+// {
+// if (IfNeedReadAllDeviceStatus)
+// {
+// Utlis.WriteLine("ReadAllDeviceStatus");
+// IfNeedReadAllDeviceStatus = false;
+// //Shared.SimpleControl.Phone.UserMiddle.ReadAllDeviceStatus();
+// }
+
+// }
+
+
+
+// //杩炴帴閿欒娆℃暟缁熻
+// static int ERRORCount = 0;
+
+// /// <summary>
+// /// 鏄惁闇�瑕佹彁绀�
+// /// </summary>
+// static bool bNeedConnectTip = true;
+
+// /// <summary>
+// /// 浠庡紑濮嬪埌杩炴帴鎴愬姛锛屽彧鎻愮ず1娆�
+// /// </summary>
+// static bool bNeedStartTip = true;
+// /// <summary>
+// /// 姝e湪鑾峰彇杩炴帴鍙傛暟...
+// /// </summary>
+// static void ShowStartTip()
+// {
+// if (bNeedStartTip)
+// {
+// bNeedStartTip = false;
+// if (MainPage.IsRemote)
+// {
+// //MainPage.LoadingTipShow(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.GettingRemoteConnectionInfo));
+// }
+// }
+
+// }
+
+// /// <summary>
+// /// 妫�娴嬩箣鍓嶈幏鍙栫殑Mac涓庡綋鍓嶄綇瀹匨AC鏄惁涓�鑷� 涓嶄竴鑷翠粠鏂拌幏鍙�
+// /// </summary>
+// /// <returns></returns>
+// static async Task CheckMQTTConnectAsync()
+// {
+// //try
+// //{
+// // if (MqttInfoConfig.Current.HomeGatewayInfo != null && MqttInfoConfig.Current.HomeGatewayInfo.mac == UserConfig.Instance.GatewayMAC)
+// // {
+// // await MQTTConnectAsync();
+// // }
+// // else
+// // {
+// // //Mac 鍙樺寲浜嗛噸鏂拌幏鍙栧弬鏁�
+// // await StartMQTTGetInfo();
+// // }
+// //}
+// //catch
+// //{
+// // MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
+// //}
+
+// }
+
+// /// <summary>
+// /// 寮�濮嬭幏鍙朚qtt 杩滅▼鍙傛暟
+// /// </summary>
+// /// <returns></returns>
+// static async Task StartMQTTGetInfo()
+// {
+// ShowStartTip();
+
+// if (!MainPage.IsRemote)
+// {
+// return;
+// }
+
+// await GetMqttInfoAndMQTTConnectAsync();
+
+// ////--鍒ゆ柇鏄綋鍓嶆槸鍚﹀垎浜殑浣忓畢
+// //if (!UserConfig.Instance.CurrentRegion.IsOthreShare) {
+// // //涓昏处鍙疯幏鍙朚QTT 杩滅▼閾炬帴淇℃伅锛屽苟杩炴帴
+// // await GetMqttInfoAndMQTTConnectAsync ();
+// //} else {
+// // //濡傛灉鏄垎浜繃鏉ョ殑浣忓畢 璧颁笅闈㈡祦绋�
+// // //--绗竴姝ワ細鑾峰彇褰撳墠浣忓垎浜畢缃戝叧淇℃伅骞惰繛鎺QTT
+// // await GetSingleHomeGatewayPaggerAndMQTTConnectAsync ();
+// //}
+// }
+
+
+// /// <summary>
+// /// 杩炴帴MQTT
+// /// </summary>
+// static async Task MQTTConnectAsync()
+// {
+
+// if (!MainPage.IsRemote)
+// {
+// return;
+// }
+
+// //if (MqttInfoConfig.Current.HomeGatewayInfo != null && MqttInfoConfig.Current.mMqttInfo != null)
+// //{
+// // if (bNeedConnectTip)
+// // {
+// // bNeedConnectTip = false;
+// // MainPage.LoadingTipShow(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.GetSuccessfullyStartConnecting));
+// // }
+
+// // try
+// // {
+
+// // var url = MqttInfoConfig.Current.mMqttInfo.url;
+
+// // //url = HttpUtil.GetProxyEMQUrl (url);
+// // //#if DEBUG
+// // // url = HttpUtil.GetProxyEMQUrl (url);
+
+// // //#endif
+// // var clientId = MqttInfoConfig.Current.mMqttInfo.clientId;
+// // var username = MqttInfoConfig.Current.mMqttInfo.userName;
+// // var passwordRemote = MqttInfoConfig.Current.mMqttInfo.passWord;
+// // //鑾峰彇鍙傛暟鎴愬姛锛屼繚瀛樺埌鏈湴骞舵爣璁颁负true
+// // MqttInfoConfig.Current.IfGetMqttInfoSuccess = true;
+// // MqttInfoConfig.Current.Save();
+
+// // mqttEncryptKey = MqttInfoConfig.Current.HomeGatewayInfo.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()
+// // .WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311)
+// // .WithCommunicationTimeout(new TimeSpan(0, 0, 10))
+// // //.WithCommunicationTimeout (new TimeSpan (0, 0, 5))
+// // //.WithCommunicationTimeout (new TimeSpan (0, 1, 0))
+// // .Build();
+
+// // await DisConnectRemoteMqttClient("StartRemoteMqtt");
+
+// // var mResult = await RemoteMqttClient.ConnectAsync(options1);
+
+// // if (mResult.ResultCode == MQTTnet.Client.Connecting.MqttClientConnectResultCode.Success)
+// // {
+// // remoteIsConnected = true;
+// // IsDisConnectingWithSendCatch = false;
+// // UnsupportedProtocolVersionCount = 0;
+// // }
+// // else
+// // {
+// // //閲嶆柊涓績鏈嶅姟鍣ㄨ幏鍙栧弬鏁版爣璁�
+// // MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
+// // }
+
+// // }
+// // catch (Exception ex)
+// // {
+
+// // if (ex.Message == MqttCommunicationTimedOutException)
+// // {
+// // Console.WriteLine("Connect error TimedOut: " + ex.Message);
+// // }
+// // else
+// // {
+// // //閲嶆柊涓績鏈嶅姟鍣ㄨ幏鍙栧弬鏁版爣璁�
+// // MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
+// // Console.WriteLine("Connect error: " + ex.Message);
+// // }
+
+// // //Console.WriteLine ("Connect error: " + ex.Message);
+// // if (IfDEBUG)
+// // {
+// // MainPage.ShowAlertOnMainThread("Connect error: " + ex.Message);
+// // }
+// // }
+// // finally
+// // {
+
+// // }
+
+// //}
+// //else
+// //{
+// // MqttInfoConfig.Current.IfGetMqttInfoSuccess = false;
+// //}
+
+// }
+
+// static int UnsupportedProtocolVersionCount = 0;
+// static readonly string MqttCommunicationTimedOutException = "Exception of type 'MQTTnet.Exceptions.MqttCommunicationTimedOutException' was thrown.";
+// //
+// static readonly string UnsupportedProtocolVersion = "Connecting with MQTT server failed (UnsupportedProtocolVersion).";
+
+
+
+// /// <summary>
+// /// 鏀跺埌缃戝叧涓婄嚎娑堟伅
+// /// </summary>
+// static void ReceiveNotifyBusGateWayInfoChange()
+// {
+// try
+// {
+// SetGatewayOnlineResetCheck();
+// if (MainPage.IsRemote)
+// {
+// //#if DEBUG
+// //MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.GatewayLoginOnline));
+// //#endif
+// CheckIfNeedReadAllDeviceStatus();
+// }
+
+// GetSingleHomeGatewayPaggerAndMQTTConnectAsync(false);
+
+// }
+// catch { }
+// }
+
+// /// <summary>
+// /// 鏀跺埌缃戝叧鎺夌嚎淇℃伅
+// /// </summary>
+// static void ReceiveNotifyGateWayOffline()
+// {
+// Utlis.WriteLine("============>Mqtt GateWayOffline");
+// IsGatewayOnline = false;
+// if (MainPage.IsRemote)
+// {
+// //Utlis.ShowAppLinkStatus(AppLinkStatus.CloudOffline);
+// //MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.GatewayOffline));
+
+// }
+// }
+
+
+// /// <summary>
+// /// 鏀跺埌鎸や笅绾挎帹閫�
+// /// </summary>
+// static void ReceiveNotifySqueezeAsync(string mMes)
+// {
+
+// if (mMes == PushSignStr) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊
+
+// //鏂紑杩滅▼杩炴帴
+// MainPage.IsRemote = false;
+// if (!UserInfo.Current.IsLogin)
+// {
+// return;
+// }
+
+// DisConnectRemoteMqttClient("鎸や笅绾�");
+
+// UserInfo.Current.lastTime = DateTime.MinValue;
+// UserInfo.Current.SaveUserInfo();
+// //Room.Lists.Clear();
+
+// Application.RunOnMainThread(() =>
+// {
+// //Utlis.ShowAppLinkStatus(AppLinkStatus.WiFi);
+// //new Shared.SimpleControl.Phone.AccountLogin(MainPage.LoginUser.AccountString, "").Show();
+// //SharedMethod.SharedMethod.CurPageLayout = null;
+// ////CommonPage.IsRemote = false;
+
+// //MainPage.LoadingTipHide();
+// //MainPage.Loading.Hide();
+
+// //new Alert(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.Tip), Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.LoggedOnOtherDevices),
+// // Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.Close)).Show();
+// });
+
+// //2020-08-11 鍒犻櫎鎺ㄩ�佹暟鎹�
+// //HDLRequest.Current.PushserivceSignOut ();
+
+// //#if HDL
+// // if (!String.IsNullOrEmpty (MainPage.LoginUser.AllVisionRegisterDevUserNameGuid)) {
+// // com.freeview.global.Video.Logout ();
+// // }///BusGateWayToClient/320c1fea-1866-4708-8277-e2321a4dd236/NotifyGateWayInfoChange
+// //#endif
+
+
+// }
+
+// /// <summary>
+// /// 鏀跺埌CheckGateway涓婚
+// /// </summary>
+// static void ReceiveCheckGateway(string mMes)
+// {
+// if (!MainPage.IsRemote) return;
+
+// Utlis.WriteLine("ReceiveCheckGateway锛�");
+
+// //CheckIfNeedReadAllDeviceStatus ();
+
+// var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(mMes);
+// if (obj == null)
+// {
+// //SetGatewayOnlineResetCheck ();
+// return;
+// }
+
+// //switch (obj.StateCode)
+// //{
+// // case "HDLUdpDataForwardServerMqttClientNoOnLine":
+// // case "NoOnline":
+// // case "NetworkAnomaly"://涓嶅湪绾�
+// // IsGatewayOnline = false;
+// // MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.RemoteFailedGatewayOffline));
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudOffline);
+
+// // break;
+// // case "NoRecord"://MAC涓嶆纭�
+// // IsGatewayOnline = false;
+// // MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.MACError));
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudOffline);
+// // break;
+// // case "Success":
+// // SetGatewayOnlineResetCheck();
+// // IsGatewayOnline = true;
+// // //MainPage.AddTip (UserConfig.Instance.CurrentRegion.Name + ":" + Language.StringByID (Shared.SimpleControl.R.MyInternationalizationString.LinkSuccess));
+// // break;
+// // default:
+// // IsGatewayOnline = false;
+// // MainPage.AddTip(Language.StringByID(Shared.SimpleControl.R.MyInternationalizationString.LinkLoser));
+// // Utlis.ShowAppLinkStatus(AppLinkStatus.CloudOffline);
+// // break;
+// //}
+
+// }
+
+// /// <summary>
+// /// 鎺ㄩ�佹尋涓嬬嚎涓婚
+// /// </summary>
+// static void SendPushSignOut()
+// {
+// byte[] message = CommonPage.MyEncodingUTF8.GetBytes(PushSignStr);
+// MqttRemoteSend(message, 4);
+// }
+
+// /// <summary>
+// ///
+// /// </summary>
+// /// <param name="message">闄勫姞鏁版嵁鍖�</param>
+// /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁</param>
+// /// <returns></returns>
+// public static async Task MqttRemoteSend(byte[] message, int optionType = 0)
+// {
+// //return;
+
+// try
+// {
+// string topicName;
+// switch (optionType)
+// {
+// case 0:
+// topicName = $"/ClientToBusGateWay/{MqttInfoConfig.Current.HomeGatewayInfo.id}/Common/ON";
+// if (!string.IsNullOrEmpty(mqttEncryptKey))
+// {
+// message = Shared.Securitys.EncryptionService.AesEncryptPayload(message, mqttEncryptKey);
+// }
+// await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
+// break;
+// case 3:
+// topicName = $"/ClientToBusGateWay/{MqttInfoConfig.Current.HomeGatewayInfo.id}/Common/CheckGateway";
+// Shared.Utlis.WriteLine("CheckGateway");
+// await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
+// break;
+// case 4://鍙戝竷鏂版柟妗堢殑鎸や笅绾夸富棰�
+// topicName = $"/BusGateWayToClient/{MainPage.LoginUser.ID}" + PushNotifySqueeze;
+// //message = CommonPage.MyEncodingUTF8.GetBytes (PushSignStr);
+// await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
+// break;
+// }
+// }
+// catch (Exception e)
+// {
+// //Utlis.WriteLine ($"============>Mqtt MqttRemoteSend catch");
+// if (!IsDisConnectingWithSendCatch)
+// {
+// IsDisConnectingWithSendCatch = true;
+// await DisConnectRemoteMqttClient("SendCatch");
+// }
+// }
+// }
+// /// <summary>
+// /// SendCatch 鍚庢墽琛屼竴娆℃柇寮�鎿嶄綔
+// /// </summary>
+// static bool IsDisConnectingWithSendCatch = false;
+
+
+// /// <summary>
+// /// 鏄惁闇�瑕佽鍙栦竴娆℃墍鏈夎澶囩姸鎬�
+// /// </summary>
+// static bool IfNeedReadAllDeviceStatus = true;
+// public static bool IsGatewayOnline = true;
+// //static int CheckGatewayCount = 0;
+// //static DateTime mCheckGatewayTime;
+
+
+// /// <summary>
+// /// 璁剧疆缃戝叧鍦ㄧ嚎鏍囧織锛屽苟閲嶇疆CheckGateway鍙傛暟
+// /// </summary>
+// static void SetGatewayOnlineResetCheck()
+// {
+
+// //mCheckGatewayTime = DateTime.Now;
+// //CheckGatewayCount = 0;
+// if (MainPage.IsRemote)
+// {
+// if (!IsGatewayOnline)
+// {
+// IsGatewayOnline = true;
+// //Utlis.ShowAppLinkStatus(AppLinkStatus.CloudLink);
+// }
+// }
+// }
+
+
+// /// <summary>
+// /// 涓昏处鍙疯幏鍙朚QTT 杩滅▼閾炬帴淇℃伅锛屽苟杩炴帴
+// /// </summary>
+// /// <returns></returns>
+// static async Task GetMqttInfoAndMQTTConnectAsync()
+// {
+// var mqttInfoRequestResult_Obj = new HttpServerRequest().GetMqttRemoteInfo(GetRandomKey());
+// if (mqttInfoRequestResult_Obj != null)
+// {
+// //MqttInfoConfig.Current.mMqttInfo = mqttInfoRequestResult_Obj;
+// //if (UserConfig.Instance.GatewayList != null && UserConfig.Instance.GatewayList.Count > 0)
+// //{
+// // //----绗簩姝ユ壘鍑烘槸鍚﹀瓨鍦ㄥ尮閰嶅綋鍓嶄綇瀹呯殑mac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
+// // MqttInfoConfig.Current.HomeGatewayInfo = UserConfig.Instance.GatewayList[0];
+// // if (MqttInfoConfig.Current.HomeGatewayInfo != null)
+// // {
+// // //----绗笁姝� 寮�濮嬭繛鎺�
+// // await MQTTConnectAsync();
+// // }
+// //}
+// //else
+// //{
+// // Utlis.WriteLine("============>杩樻病缁戝畾缃戝叧");
+// //}
+
+// }
+// else
+// {
+// Utlis.WriteLine("============>MqttInfo null");
+// }
+
+// }
+
+
+// /// <summary>
+// /// 鍒嗕韩浣忓畢 鑾峰彇褰撳墠浣忓畢缃戝叧淇℃伅骞朵笖杩炴帴MQTT 鎴栬�呭埛鏂�
+// /// 2020-03-17
+// /// </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.RequestHttpsHostZigbee;
+// //if (requestObj3.IsOtherAccountCtrl) {
+// // urlHead = UserConfig.Instance.MasterAccountRequestBaseUrl;
+// // requestObj3.ReqDto.LoginAccessToken = UserConfig.Instance.MasterAccountToken;
+// //}
+
+// ////urlHead = MainPage.RequestHttpsHostZigbee;
+
+// //var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject (requestObj3);
+// //var revertObj3 = MainPage.RequestHttpsNew (API.GetSingleHomeGatewayPagger, requestJson3, urlHead);
+// //if (revertObj3.StateCode.ToUpper () == HttpUtil.SUCCESS_CODE) {
+// // var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<GetGatewayResult> (revertObj3.ResponseData.ToString ());
+// // if (bNeedConnect) {
+// // 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) {
+// // MqttInfoConfig.Instance.CurRemoteMACInfo = new RemoteMACInfo ();
+// // MqttInfoConfig.Instance.CurRemoteMACInfo.aesKey = mGatewayRes.AesKey;
+// // MqttInfoConfig.Instance.CurRemoteMACInfo.mac = mGatewayRes.GatewayUniqueId;
+// // MqttInfoConfig.Instance.CurRemoteMACInfo.macMark = mGatewayRes.MacMark;
+// // MqttInfoConfig.Instance.CurRemoteMACInfo.isValid = mGatewayRes.MqttOnlineStatus ? "Valid" : "InValid";
+// // //await MQTTConnectAsync ();
+
+// // var mqttInfoRequestPar = new ShareMemberConnMqttInfoObj () {
+// // LoginAccessToken = MainPage.LoginUser.LoginTokenString,
+// // PlatformStr = GetRandomKey(),
+// // PublishPayloadJsonStr = PushSignStr,
+// // MainUserDistributedMark = UserConfig.Instance.CurrentRegion.MainUserDistributedMark,
+// // HomeId = UserConfig.Instance.CurrentRegion.Id,
+// // IsRedirectSelectEmqServer = mGatewayRes.ExtensionPara//鏄惁鏄柊缃戝叧锛屾槸鍚﹁嚜鍔ㄩ�夋嫨鏈嶅姟鍣�
+// // };
+// // var mqttInfoRequestResult = MainPage.RequestHttpsNew (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) {
+// // MqttInfoConfig.Instance.mMqttInfo = mqttInfoRequestResult_info;
+
+// // //--绗笁姝ワ細杩炴帴mqtt
+// // await MQTTConnectAsync ();
+// // }
+
+// // } else {
+// // //Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛宮qttInfoRequestResult");
+// // }
+
+
+// // }
+
+
+// // } else {
+// // Shared.Utlis.WriteLine ("============>Mqtt 鍙栨秷杩炴帴锛屽綋鍓嶄綇瀹呮病缁戝畾缃戝叧");
+// // }
+// // } else {
+// // var mGatewayRes = infoResult.PageData.Find ((obj) => obj.GatewayUniqueId == UserConfig.Instance.CurrentRegion.HomeGateways [0].GatewayUniqueId);
+// // if (mGatewayRes != null) {
+// // MqttInfoConfig.Instance.CurRemoteMACInfo.aesKey = mGatewayRes.AesKey;
+// // mqttEncryptKey = MqttInfoConfig.Instance.CurRemoteMACInfo.isNewBusproGateway ? MqttInfoConfig.Instance.CurRemoteMACInfo.aesKey : "";
+// // //鑾峰彇AesKey鎴愬姛鍚庢洿鏂板苟淇濆瓨鍒版湰鍦�
+// // MqttInfoConfig.Instance.Save ();
+// // }
+
+// // }
+
+
+// //} else {
+// // //鑾峰彇涓讳汉token
+// // if (revertObj3.StateCode.ToUpper () == "HomeIdAndTokenNoConsistent") {
+// // UserConfig.Instance.CheckIfNeedGetMasterAccountToken ();
+// // }
+// //}
+
+// }
+// //}
+
+
+
+// }
+
+
+ public class RemoteRequestParameters
{
- static string mqttEncryptKey = "";
- static string checkGatewayTopicBase64 = "";
- static RemoteMACInfo CurRemoteMACInfo = null;
+ public string RequestVersion;
+ public int RequestSource;
+ public string LoginAccessToken;
+ public int RequestProtocolType;
+ public int HdlGatewayGatewayType = 0;
+ public bool IsRedirectSelectEmqServer = false;
/// <summary>
- /// 鎵嬫満鏍囪瘑
+ /// 骞冲彴绫诲瀷瀛楃涓�
/// </summary>
- static Guid currentGuid = Guid.NewGuid();
-
+ public string PlatformStr;
/// <summary>
- /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴
+ /// 鍙戝竷涓婚璐熻浇
/// </summary>
- static object isConnecting = false.ToString();
- /// <summary>
- /// 杩滅▼MqttClient
- /// </summary>
- public static IMqttClient RemoteMqttClient;
+ public string PublishPayloadJsonStr;
- static bool thisShowTip = true;
-
- public static async System.Threading.Tasks.Task Close(bool RemoveRemoteMqttClient = false)
- {
- try
- {
- if (RemoteMqttClient != null)
- {
- //thisShowTip = true;
- await RemoteMqttClient.DisconnectAsync();
- }
- if (RemoveRemoteMqttClient)
- {
- RemoteMqttClient = null;
- }
- CommonPage.IsRemote = false;
- }
- catch { }
- }
-
- static DateTime dateTime = DateTime.MinValue;
-
- /// <summary>
- /// 鍚姩杩滅▼Mqtt
- /// </summary>
- public static async System.Threading.Tasks.Task StartCloudMqtt()
- {
- /*
- try
- {
- Application.RunOnMainThread(() =>
- {
- if (5 < (DateTime.Now - dateTime).TotalSeconds)
- {
- return;
- }
- dateTime = DateTime.Now;
- });
- if (!MainPage.LoginUser.IsLogin)
- {
- isConnecting = false.ToString();
- return;
- }
- while (isConnecting.ToString() == true.ToString())
- {
- if (5 < (DateTime.Now - dateTime).TotalSeconds)
- {
- break;
- }
- await System.Threading.Tasks.Task.Delay(500);
- }
- lock (isConnecting)
- {
- if (isConnecting.ToString() == true.ToString())
- {
- return;
- }
- isConnecting = true.ToString();
- if (RemoteMqttClient != null)
- {
- MainPage.Log($"RemoteMqttClient.IsConnected: {RemoteMqttClient.IsConnected}");
- }
- //if (RemoteMqttClient != null && RemoteMqttClient.IsConnected) {
- // return;
- //}
-
- new System.Threading.Thread(async () =>
- {
- try
- {
- //鏂紑鍚庨噸鏂伴摼鎺ラ渶瑕侀噸鏂扮櫥褰曡幏鍙栬繛鎺ョ殑瀵嗙爜
- var requestObj = new LoginObj() { Account = MainPage.LoginUser.AccountString.ToLower(), Password = MainPage.LoginUser.Password, Company = 1 };
- var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj);
- var tempResult = HttpServerRequest.RequestHttps("Login", requestJson, "");
- if (tempResult == null)
- {
- //----------
- 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());
- //杩樻湁绉嶆儏鍐垫槸鍚屼竴涓狪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 (RemoteMqttClient == null)
- {
- var requestObj3 = new GatewayByRegionListObj() { RegionID = UserConfig.Instance.CurrentRegion.RegionID };
- MainPage.Log("Remote mqtt get Region MAC : " + UserConfig.Instance.CurrentRegion.RegionID);
- var requestJson3 = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj3);
- var revertObj3 = HttpServerRequest.RequestHttps("GatewayByRegionList", requestJson3, true);
- if (revertObj3.StateCode == "SUCCESS")
- {
- var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GatewayRes>>(revertObj3.ResponseData.ToString());
- var gatewayList = responseDataObj;
- if (gatewayList != null && gatewayList.Count > 0)
- {
- UserConfig.Instance.CurrentRegion.MAC = gatewayList[0].MAC;
- UserConfig.Instance.SaveUserConfig();
- MainPage.Log("Remote mqtt get Region MAC : " + gatewayList[0].MAC);
- }
- }
- else
- {
- MainPage.Log("Remote mqtt get Region MAC Erorr !!");
- }
-
- //(2)鍒涘缓Mqtt瀹㈡埛绔�
- RemoteMqttClient = new MqttFactory().CreateMqttClient();
- //(3)褰揫杩炴帴浜戠鐨凪qtt鎴愬姛鍚嶿鎴栬�匸浠ュ強鍚庨潰App閫氳繃浜戠Mqtt杞彂鏁版嵁缁欑綉鍏虫垚鍔熷悗],澶勭悊鎺ユ敹鍒颁簯绔暟鎹寘鍝嶅簲鏃跺湪mqttServerClient_ApplicationMessageReceived杩欎釜鏂规硶澶勭悊
- RemoteMqttClient.UseApplicationMessageReceivedHandler(async e =>
- {
- if (isConnecting.ToString() == true.ToString())
- isConnecting = false.ToString();
- var aesDecryptTopic = e.ApplicationMessage.Topic;
- var aesDecryptPayload = e.ApplicationMessage.Payload;
- MainPage.Log(aesDecryptTopic);
-
- if (aesDecryptTopic == $"NotifyBusGateWayInfoChagne/{CurRemoteMACInfo.md5_mac_string}")
- {//缃戝叧涓婄嚎锛岄渶瑕佹洿鏂癮eskey
- //----绗簩姝ワ細璇诲彇璐﹀彿涓嬮潰鐨勭綉鍏冲垪琛�
- var gatewayListUrl = @"https://developer.hdlcontrol.com/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰
- var gatewayListRequestPar = new RemoteRequestParameters() { Mac = CurRemoteMACInfo.mac, LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 };
- var gatewayListRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(gatewayListRequestPar), false, 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 (aesDecryptTopic == "YouIpAndPortNoRecord" || aesDecryptTopic == "DecryptFail")
- {// --> 浣犲綋鍓嶇殑IP鍙婄鍙e湪浜戠涓嶅瓨鍦�,璇烽噸鏂扮櫥褰曡繛鎺ヤ笅!
- await Close(true);
- //await MqttCheckGateway ();
- }
- else if (aesDecryptTopic == @"/BeingSqueezedOffline")
- {
- try
- {
-
- }
- catch (Exception ex)
- {
- MainPage.Log(ex.Message);
- }
- finally
- {
-
- }
- }
- else
- {
- if (!string.IsNullOrEmpty(mqttEncryptKey))
- {
- aesDecryptTopic = Shared.Securitys.EncryptionService.AesDecryptTopic(e.ApplicationMessage.Topic, mqttEncryptKey);
- aesDecryptPayload = Shared.Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
- }
- else
- {
- aesDecryptTopic = e.ApplicationMessage.Topic;
- aesDecryptPayload = e.ApplicationMessage.Payload;
- }
- }
- MainPage.Log($"Des Topic={aesDecryptTopic}");
-
-
- var packet = new Packet();
- packet.Bytes = aesDecryptPayload;
- packet.Manager();
-
- });
-
- RemoteMqttClient.UseDisconnectedHandler(e =>
- {
- if (thisShowTip)
- {
- if (CommonPage.IsRemote)
- {
- //----------
- }
- }
- else
- {
- thisShowTip = true;
- }
- });
- RemoteMqttClient.UseConnectedHandler(async e =>
- {
- if (CurRemoteMACInfo != null)
- {
- if (CurRemoteMACInfo.isValid == "InValid")
- {
- //----------
- }
- else
- {
- CommonPage.IsRemote = true;
- //----------
- }
- }
- });
- }
-
- if (clientId == null || username == null || passwordRemote == null)
- {
- return;
- }
-
- if (tempResult == null)
- {
- //----------
- return;
- }
- //--绗竴姝ワ細鑾峰彇mqtt閾炬帴鍙傛暟
- var mqttInfoUrl = @"https://developer.hdlcontrol.com/Center/Center/GetConnMqttInfo";//鑾峰彇杩炴帴杩滅▼浜戠Emq Mqtt 鏈嶅姟鍣ㄨ繛鎺ヤ俊鎭�
- var mqttInfoRequestPar = new RemoteRequestParameters() { LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 };
- var mqttInfoRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(mqttInfoRequestPar), false, mqttInfoUrl);
-
- if (mqttInfoRequestResult != null && mqttInfoRequestResult.ResponseData != null)
- {
- try
- {
- 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 = @"https://developer.hdlcontrol.com/Center/Center/GetGatewayPagger"; //App銆丅uspro杞欢鐧诲綍鍚庤幏鍙栫綉鍏冲垪琛� http 璇锋眰
- var gatewayListRequestPar = new RemoteRequestParameters() { LoginAccessToken = mqttRequestPar.Token, RequestVersion = "RequestVersion1", RequestProtocolType = 0, RequestSource = 1 };
- var gatewayListRequestResult = HttpServerRequest.RequestHttps("", Newtonsoft.Json.JsonConvert.SerializeObject(gatewayListRequestPar), false, gatewayListUrl);
- var gatewayListRequestResult_Obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MqttRemoteInfo>(gatewayListRequestResult.ResponseData.ToString());
- //--鎵惧嚭鏄惁瀛樺湪鍖归厤褰撳墠浣忓畢鐨刴ac锛屽瓨鍦ㄥ啀杩涜杩滅▼銆�
- CurRemoteMACInfo = gatewayListRequestResult_Obj.pageData.Find((obj) => obj.mac == UserConfig.Instance.CurrentRegion.MAC);
- 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, 10))
- .Build();
- await Close();
- await RemoteMqttClient.ConnectAsync(options1);
- await MqttRemoteSend(new byte[] { 0 }, 1);
- await MqttRemoteSend(new byte[] { 0 }, 2);
- }
- }
- }
- catch { }
- }
- }
- catch (Exception ex)
- {
- Application.RunOnMainThread(() =>
- {
- if (MqttCommon.RemoteMqttClient != null)
- {
- MqttCommon.RemoteMqttClient.Dispose();
- }
- if (MqttCommon.RemoteMqttClient != null)
- {
- MqttCommon.RemoteMqttClient = null;
- }
- });
- }
- finally
- {
- isConnecting = false.ToString();
- //----------
- }
- })
- { IsBackground = true }.Start();
- }
- }
- catch (Exception ex)
- {
- MainPage.Log("============>" + ex.Message);
- }
- finally
- {
- isConnecting = false.ToString();
- }
-
- */
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="message">闄勫姞鏁版嵁鍖�</param>
- /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁</param>
- /// <returns></returns>
- public static async Task MqttRemoteSend(byte[] message, int optionType = 0)
- {
- try
- {
- if (RemoteMqttClient == null || !RemoteMqttClient.IsConnected)
- {
- await StartCloudMqtt();
- }
- if (!RemoteMqttClient.IsConnected)
- {
- return;
- }
- var topicName = "";//@"/" + MainPage.LoginUser.AccountString.ToLower() + @"/" + currentGuid;//+ @"/" + UserConfig.Instance.CurrentRegion.MAC.Replace(".", "")
- switch (optionType)
- {
- case 0:
- if (!string.IsNullOrEmpty(mqttEncryptKey))
- {
- topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/OldON";
- }
- else
- {
- topicName = $"/ClientToBusGateWay/{CurRemoteMACInfo.macMark}/Common/NewON";
- }
- //base64鍔犲瘑
- var messageSend = Shared.Securitys.EncryptionService.AesEncryptPayload(message, mqttEncryptKey);
- var m = new MqttApplicationMessage { Topic = topicName, Payload = messageSend, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce };
- await RemoteMqttClient?.PublishAsync(m);
- break;
- case 1:
- topicName = $"/BusGateWayToClient/{CurRemoteMACInfo.macMark}/Common/#";
- 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}";
- await RemoteMqttClient?.SubscribeAsync(topicName);
- break;
- }
- }
- catch (Exception e)
- {
- isConnecting = false.ToString();
- }
- }
+ public string Mac = "";
+ public string GroupName = "";
}
-}
-public class RemoteRequestParameters
-{
- public string RequestVersion;
- public int RequestSource;
- public string LoginAccessToken;
- public int RequestProtocolType;
-
- public string Mac = "";
- public string GroupName = "";
-}
-
-public class MqttRemoteInfo
-{
- public List<RemoteMACInfo> pageData;
-
- public int pageIndex = 0;
- public int pageSize = 10;
- public int totalCount = 3;
- public int totalPages = 1;
- public bool hasPreviousPage = false;
- public bool hasNextPage = false;
-}
-
-public class MqttInfo
-{
- public string connEmqDomainPort;
- public string connEmqClientId;
- public string connEmqUserName;
- public string connEmqPwd;
-}
-
-public class RemoteMACInfo
-{
- public string mac;
- public string macMark;
- public string isValid;
- public string aesKey;
- public bool isNewBusproGateway;
- public string groupName;
- public string projectName;
- public string userName;
-
- //app鑷畾涔夋暟鎹�
- public string md5_mac_string;
- public string LoginAccessToken;
-}
-
-namespace Shared.Securitys
-{
- public partial class EncryptionService
+ public class MqttRemoteInfo
{
+ public List<RemoteMACInfo> pageData;
- #region 鍔犲瘑
- /// <summary>
- /// 鍔犲瘑涓婚涓築ase64
- /// </summary>
- /// <param name="pToEncrypt"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static string AesEncryptTopic(string pToEncrypt, string key)
- {
- if (string.IsNullOrEmpty(pToEncrypt)) return null;
- if (string.IsNullOrEmpty(key)) return pToEncrypt;
- //闇�瑕佸姞瀵嗗唴瀹圭殑鏄庢枃娴�
- Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt);
+ public int pageIndex = 0;
+ public int pageSize = 10;
+ public int totalCount = 3;
+ public int totalPages = 1;
+ public bool hasPreviousPage = false;
+ public bool hasNextPage = false;
+ }
- //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
- RijndaelManaged rm = new RijndaelManaged
- {
- Key = Encoding.UTF8.GetBytes(key),
- IV = Encoding.UTF8.GetBytes(key),
- Mode = CipherMode.CBC,
- Padding = PaddingMode.PKCS7
- };
+ public class MqttInfo
+ {
+ public string connEmqDomainPort;
+ public string connEmqClientId;
+ public string connEmqUserName;
+ public string connEmqPwd;
- //鍒涘缓AES鍔犲瘑鍣ㄥ璞�
- ICryptoTransform cTransform = rm.CreateEncryptor();
-
- //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
-
- //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓�
- return Convert.ToBase64String(resultArray, 0, resultArray.Length);
- }
-
-
- /// <summary>
- /// 鍔犲瘑璐熻浇涓轰簩杩涘埗娴�
- /// </summary>
- /// <param name="toEncryptArray"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key)
- {
- if (string.IsNullOrEmpty(key)) return toEncryptArray;
- //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
- var rm = new RijndaelManaged
- {
- Key = Encoding.UTF8.GetBytes(key),
- IV = Encoding.UTF8.GetBytes(key),
- Mode = CipherMode.CBC,
- Padding = PaddingMode.PKCS7
- };
-
- //鍒涘缓AES鍔犲瘑鍣ㄥ璞�
- var cTransform = rm.CreateEncryptor();
- //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍
- return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- }
- #endregion
-
-
- #region 瑙e瘑
- /// <summary>
- /// 瑙e瘑涓婚鏁版嵁
- /// </summary>
- /// <param name="pToDecrypt"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static string AesDecryptTopic(string pToDecrypt, string key)
- {
- //AES瀵嗘枃Base64杞垚瀛楃涓�
- Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt);
-
- //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
- RijndaelManaged rm = new RijndaelManaged
- {
- Key = Encoding.UTF8.GetBytes(key),
- IV = Encoding.UTF8.GetBytes(key),
- Mode = CipherMode.CBC,
- Padding = PaddingMode.PKCS7
- };
-
- //鍒涘缓AES瑙e瘑鍣ㄥ璞�
- ICryptoTransform cTransform = rm.CreateDecryptor();
-
- //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
-
- //杞垚瀛楃涓�
- return Encoding.UTF8.GetString(resultArray);
- }
-
- /// <summary>
- /// 閲囩敤Aes瑙e瘑璐熻浇鏁版嵁
- /// </summary>
- /// <param name="toEncryptArray"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key)
- {
- //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
- var rm = new RijndaelManaged
- {
- Key = Encoding.UTF8.GetBytes(key),
- IV = Encoding.UTF8.GetBytes(key),
- Mode = CipherMode.CBC,
- Padding = PaddingMode.PKCS7
- };
-
- //鍒涘缓AES瑙e瘑鍣ㄥ璞�
- var cTransform = rm.CreateDecryptor();
-
- //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
- return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- }
- #endregion
-
+ public List<RemoteMACInfo> AccountAllGateways;
}
-}
+
+ public class RemoteMACInfo
+ {
+ public string mac;
+ public string macMark;
+ public string isValid;
+ public string aesKey;
+ public bool isNewBusproGateway;
+ public string groupName;
+ public string projectName;
+ public string userName;
+
+ public string clientId;
+
+ //app鑷畾涔夋暟鎹�
+ public string md5_mac_string;
+ public string LoginAccessToken;
+ }
+
+ namespace Shared.Securitys
+ {
+ public partial class EncryptionService
+ {
+
+ #region 鍔犲瘑
+ /// <summary>
+ /// 鍔犲瘑涓婚涓築ase64
+ /// </summary>
+ /// <param name="pToEncrypt"></param>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public static string AesEncryptTopic(string pToEncrypt, string key)
+ {
+ if (string.IsNullOrEmpty(pToEncrypt)) return null;
+ if (string.IsNullOrEmpty(key)) return pToEncrypt;
+ //闇�瑕佸姞瀵嗗唴瀹圭殑鏄庢枃娴�
+ Byte[] toEncryptArray = Encoding.UTF8.GetBytes(pToEncrypt);
+
+ //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+ RijndaelManaged rm = new RijndaelManaged
+ {
+ Key = Encoding.UTF8.GetBytes(key),
+ IV = Encoding.UTF8.GetBytes(key),
+ Mode = CipherMode.CBC,
+ Padding = PaddingMode.PKCS7
+ };
+
+ //鍒涘缓AES鍔犲瘑鍣ㄥ璞�
+ ICryptoTransform cTransform = rm.CreateEncryptor();
+
+ //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍
+ Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+
+ //灏咥ES鐢熸垚鐨勫瘑鏂囧瓧鑺傛暟缁勮浆鎴怋ase64瀛楃涓�
+ return Convert.ToBase64String(resultArray, 0, resultArray.Length);
+ }
+
+
+ /// <summary>
+ /// 鍔犲瘑璐熻浇涓轰簩杩涘埗娴�
+ /// </summary>
+ /// <param name="toEncryptArray"></param>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public static byte[] AesEncryptPayload(byte[] toEncryptArray, string key)
+ {
+ if (string.IsNullOrEmpty(key)) return toEncryptArray;
+ //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+ var rm = new RijndaelManaged
+ {
+ Key = Encoding.UTF8.GetBytes(key),
+ IV = Encoding.UTF8.GetBytes(key),
+ Mode = CipherMode.CBC,
+ Padding = PaddingMode.PKCS7
+ };
+
+ //鍒涘缓AES鍔犲瘑鍣ㄥ璞�
+ var cTransform = rm.CreateEncryptor();
+ //浣跨敤AES灏嗘槑鏂囨祦杞垚瀵嗘枃瀛楄妭鏁扮粍
+ return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+ }
+ #endregion
+
+
+ #region 瑙e瘑
+ /// <summary>
+ /// 瑙e瘑涓婚鏁版嵁
+ /// </summary>
+ /// <param name="pToDecrypt"></param>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public static string AesDecryptTopic(string pToDecrypt, string key)
+ {
+ //AES瀵嗘枃Base64杞垚瀛楃涓�
+ Byte[] toEncryptArray = Convert.FromBase64String(pToDecrypt);
+
+ //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+ RijndaelManaged rm = new RijndaelManaged
+ {
+ Key = Encoding.UTF8.GetBytes(key),
+ IV = Encoding.UTF8.GetBytes(key),
+ Mode = CipherMode.CBC,
+ Padding = PaddingMode.PKCS7
+ };
+
+ //鍒涘缓AES瑙e瘑鍣ㄥ璞�
+ ICryptoTransform cTransform = rm.CreateDecryptor();
+
+ //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
+ Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+
+ //杞垚瀛楃涓�
+ return Encoding.UTF8.GetString(resultArray);
+ }
+
+ /// <summary>
+ /// 閲囩敤Aes瑙e瘑璐熻浇鏁版嵁
+ /// </summary>
+ /// <param name="toEncryptArray"></param>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public static byte[] AesDecryptPayload(byte[] toEncryptArray, string key)
+ {
+ //閰嶇疆AES鍔犲瘑Key(瀵嗛挜銆佸悜閲忋�佹ā寮忋�佸~鍏�)
+ var rm = new RijndaelManaged
+ {
+ Key = Encoding.UTF8.GetBytes(key),
+ IV = Encoding.UTF8.GetBytes(key),
+ Mode = CipherMode.CBC,
+ Padding = PaddingMode.PKCS7
+ };
+
+ //鍒涘缓AES瑙e瘑鍣ㄥ璞�
+ var cTransform = rm.CreateDecryptor();
+
+ //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
+ return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+ }
+ #endregion
+
+
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0