From b71dfb3ca100340005d56e1298292807da82322d Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 08 六月 2020 15:04:21 +0800
Subject: [PATCH] 20200608

---
 HDL_ON/DAL/Net/MqttCommon.cs |  487 +++++++++++++++++------------------------------------
 1 files changed, 158 insertions(+), 329 deletions(-)

diff --git a/HDL_ON/DAL/Net/MqttCommon.cs b/HDL_ON/DAL/Net/MqttCommon.cs
index 5b097f1..279056c 100644
--- a/HDL_ON/DAL/Net/MqttCommon.cs
+++ b/HDL_ON/DAL/Net/MqttCommon.cs
@@ -1,331 +1,198 @@
 锘縰sing System.Collections.Generic;
 using System;
 using MQTTnet.Client;
-using System.Threading.Tasks;
 using System.Text;
 using System.Security.Cryptography;
 using MQTTnet;
+using MQTTnet.Client.Options;
+using System.Net.Sockets;
+using System.Threading.Tasks;
+//using System.Net;
+//using Newtonsoft.Json.Linq;
+//using HDL_ON.DAL;
+//using Newtonsoft.Json;
 
 namespace HDL_ON.DAL.Net
 {
     public static class MqttCommon
     {
-        static string mqttEncryptKey = "";
-        static string checkGatewayTopicBase64 = "";
-        static RemoteMACInfo CurRemoteMACInfo = null;
-
         /// <summary>
-        /// 鎵嬫満鏍囪瘑
+        /// MqttClient
         /// </summary>
-        static Guid currentGuid = Guid.NewGuid();
+        public static IMqttClient mqttClient_A;
+        public static string mqttClientIP;
+        public static string mqttGatewayMAC;
+        static bool remoteIsConnected;
 
-        /// <summary>
-        /// 澶栫綉鐨凪QTT鏄惁姝e湪杩炴帴
-        /// </summary>
-        static object isConnecting = false.ToString();
-        /// <summary>
-        /// 杩滅▼MqttClient
-        /// </summary>
-        public static IMqttClient RemoteMqttClient;
+        static bool onConnection = false;
 
-        static bool thisShowTip = true;
-
-        public static async System.Threading.Tasks.Task Close(bool RemoveRemoteMqttClient = false)
+        static MqttCommon()
         {
-            try
-            {
-                if (RemoteMqttClient != null)
-                {
-                    //thisShowTip = true;
-                    await RemoteMqttClient.DisconnectAsync();
-                }
-                if (RemoveRemoteMqttClient)
-                {
-                    RemoteMqttClient = null;
-                }
-                CommonPage.IsRemote = false;
-            }
-            catch { }
+            InitMqtt();
         }
 
-        static DateTime dateTime = DateTime.MinValue;
+        /// <summary>
+        /// 鏂紑杩滅▼Mqtt鐨勯摼鎺�
+        /// </summary>
+        public static async 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 mqttClient_A.DisconnectAsync();
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine($"Remote鏂紑閫氳杩炴帴鍑哄紓甯�:{e.Message}");
+            }
+        }
+
+        static bool isSubscribeSuccess;
+        static async Task SubscribeTopics()
+        {
+            if (remoteIsConnected && !isSubscribeSuccess)
+            {
+                try
+                {
+                    var Topic1 = $"/BusGateWayToApp/{mqttGatewayMAC}/Common/Json";
+                    try
+                    {
+                        await mqttClient_A.SubscribeAsync(Topic1);
+                    }
+                    catch (Exception ex)
+                    {
+                        await DisConnectRemoteMqttClient(ex.Message);
+                        await StartMqtt();
+                        if (remoteIsConnected)
+                        {
+                            await mqttClient_A.SubscribeAsync(Topic1);
+                        }
+                    }
+                }
+                catch { }
+            }
+        }
+
+        static void InitMqtt()
+        {
+            new System.Threading.Thread(async () => {
+                while (true)
+                {
+                    try
+                    {
+                        System.Threading.Thread.Sleep(1000);
+                        //if (!CommonPage.IsRemote)
+                        //    continue;
+                        if (remoteIsConnected)
+                            continue;
+                        await StartMqtt();
+                        await SubscribeTopics();
+                    }
+                    catch { }
+                }
+            })
+            { IsBackground = true }.Start();
+        }
 
         /// <summary>
-        /// 鍚姩杩滅▼Mqtt
+        /// 鍚姩A鍗忚Mqtt
         /// </summary>
-        public static async Task StartCloudMqtt()
+        public static async Task StartMqtt()
         {
-            /*
             try
             {
-                Application.RunOnMainThread(() =>
-                {
-                    if (5 < (DateTime.Now - dateTime).TotalSeconds)
-                    {
-                        return;
-                    }
-                    dateTime = DateTime.Now;
-                });
-                if (!MainPage.LoginUser.IsLogin)
-                {
-                    isConnecting = false.ToString();
+                if (remoteIsConnected)
                     return;
-                }
-                while (isConnecting.ToString() == true.ToString())
+                if (onConnection)
+                    return;
+                onConnection = true;
+                new System.Threading.Thread(async () =>
                 {
-                    if (5 < (DateTime.Now - dateTime).TotalSeconds)
-                    {
-                        break;
-                    }
-                    await System.Threading.Tasks.Task.Delay(500);
-                }
-                lock (isConnecting)
-                {
-                    if (isConnecting.ToString() == true.ToString())
-                    {
+                    if (remoteIsConnected)
                         return;
-                    }
-                    isConnecting = true.ToString();
-                    if (RemoteMqttClient != null)
+                    try
                     {
-                        MainPage.Log($"RemoteMqttClient.IsConnected: {RemoteMqttClient.IsConnected}");
-                    }
-                    //if (RemoteMqttClient != null && RemoteMqttClient.IsConnected) {
-                    //    return;
-                    //}
+                        if (mqttClient_A == null)
+                        {
+                            mqttClient_A = new MqttFactory().CreateMqttClient();
+                            mqttClient_A.UseApplicationMessageReceivedHandler(async e =>
+                            {
+                                var aesDecryptTopic = e.ApplicationMessage.Topic;
+                                var aesDecryptPayload = e.ApplicationMessage.Payload;
+                                MainPage.Log(aesDecryptTopic);
+                                MainPage.Log($"Des Topic={aesDecryptTopic}");
+                            });
 
-                    new System.Threading.Thread(async () =>
-                    {
+                            mqttClient_A.UseConnectedHandler(async (e) => {
+                                MainPage.Log("mqtt connected !!");
+                                onConnection = false;
+                            });
+                        }
                         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)
+                            int readCount = 0;
+                            BusSocket.Stop();
+                            System.Threading.Thread.Sleep(1000);
+                            BusSocket.Start(6688);
+                            System.Threading.Thread.Sleep(1000);
+                            Control.ReadGatewayIPAddress();
+                            while(true)
                             {
-                                //----------
-                                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.DB_ResidenceData.residenceData.residecenInfo
+                                if (!string.IsNullOrEmpty(mqttClientIP))
                                 {
-                                    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);
-                                    }
+                                    break;
+                                }
+                                else if (readCount > 10)
+                                {
+                                    onConnection = false;
+                                    return;
                                 }
                                 else
                                 {
-                                    MainPage.Log("Remote mqtt get Region MAC Erorr !!");
+                                    Control.ReadGatewayIPAddress();
+                                    System.Threading.Thread.Sleep(200);
                                 }
-
-                                //(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;
-                                            //----------
-                                        }
-                                    }
-                                });
                             }
+                            BusSocket.Stop();
+                            System.Threading.Thread.Sleep(1000);
+                            BusSocket.Start(6000);
+                            System.Threading.Thread.Sleep(1000);
 
-                            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 { }
-                            }
+                            var options = new MqttClientOptionsBuilder()//MQTT杩炴帴鍙傛暟濉厖
+                                .WithClientId(Guid.NewGuid().ToString().Substring(0, 5))//瀹㈡埛绔疘D
+                                .WithTcpServer(mqttClientIP, 1883)//MQTTServerIP.Text, Int32.Parse(MQTTServerPort.Text.ToString()))//TCP鏈嶅姟绔�  1883  锛屽嵆MQTT鏈嶅姟绔�
+                                .WithCredentials("", "")//"", "")//鍑瘉  甯愬彿 瀵嗙爜
+                                .WithCommunicationTimeout(new TimeSpan(0, 0, 60)) //閲嶈繛瓒呮椂鏃堕棿锛岄粯璁�5s
+                                .WithKeepAlivePeriod(new TimeSpan(0, 0, 15)) //淇濇寔杩炴帴鏃堕棿锛岄粯璁�5s锛屽績璺冲寘
+                                .Build();
+                            await mqttClient_A.ConnectAsync(options);
+                            remoteIsConnected = true;
                         }
-                        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 { }
+                    }
+                    catch (Exception ex)
+                    {
+                    }
+                    finally
+                    {
+                        onConnection = false;
+                    }
+                })
+                { IsBackground = true }.Start();
             }
             catch (Exception ex)
             {
                 MainPage.Log("============>" + ex.Message);
             }
-            finally
-            {
-                isConnecting = false.ToString();
-            }
-
-    */
         }
+
+
+
 
         /// <summary>
         /// 
@@ -333,64 +200,24 @@
         /// <param name="message">闄勫姞鏁版嵁鍖�</param>
         /// <param name="optionType">鎿嶄綔绫诲瀷锛�0=缃戝叧鎺у埗锛�1=璁㈤槄缃戝叧鏁版嵁;2=璁㈤槄缃戝叧涓婄嚎鏁版嵁</param>
         /// <returns></returns>
-        public static async Task MqttRemoteSend(byte[] message, int optionType = 0)
+        public static async Task MqttRemoteSend(byte[] message)
         {
             try
             {
-                if (RemoteMqttClient == null || !RemoteMqttClient.IsConnected)
+                if (mqttClient_A == null || !mqttClient_A.IsConnected)
                 {
-                    await StartCloudMqtt();
+                    await StartMqtt();
                 }
-                if (!RemoteMqttClient.IsConnected)
+                if (!mqttClient_A.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;
-                }
+                var topicName = $"/AppToBusGateWay/{mqttGatewayMAC}/Common/Json";
+                var m = new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce };
+                await mqttClient_A?.PublishAsync(m);
             }
             catch (Exception e)
             {
-                isConnecting = false.ToString();
             }
         }
     }
@@ -567,3 +394,5 @@
 
     }
 }
+
+

--
Gitblit v1.8.0