wei
2020-12-24 d1af1b8337591363e60c286348501a841138dbb3
HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -119,7 +119,7 @@
        /// <summary>
        /// 外网的MQTT是否正在连接
        /// </summary>
        public static bool remoteMqttIsConnecting;
        public static bool RemoteMqttIsConnecting;
        static bool remoteIsConnected;
        static MqttClient()
@@ -138,6 +138,8 @@
                    {
                        System.Threading.Thread.Sleep(500);
                        if (!Control.Ins.IsRemote) continue;
                        //进入后台不处理
                        if (MainPage.IsEnterBackground) continue;
                        await StartCloudMqtt();
                        await SubscribeTopics();
@@ -184,9 +186,14 @@
                        Topic = $"/user/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/app/thing/property/send",
                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
                    };
                    var topicBusStatus = new MqttTopicFilter()
                    {
                        Topic = $"/BusGateWayToClient/MacMask/Common",
                        QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce
                    };
                    Utlis.WriteLine("开始订阅!");
                    var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] { topicFilterBusGateWayToClient, topicFilterPush2 , topicAlinkStatus });
                    var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] { topicFilterBusGateWayToClient, topicFilterPush2, topicAlinkStatus, topicBusStatus });
                    if (result.Items[0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0)
                    {
                        isSubscribeSuccess = true;
@@ -221,7 +228,7 @@
            }
            //追加:没有远程连接的权限
            if (remoteMqttIsConnecting || remoteIsConnected)
            if (RemoteMqttIsConnecting || remoteIsConnected)
            {
                return;
            }
@@ -232,7 +239,7 @@
                try
                {
                    #region 初始化远程Mqtt
                    remoteMqttIsConnecting = true;
                    RemoteMqttIsConnecting = true;
                    RemoteMqttClient = new MqttFactory().CreateMqttClient();
@@ -283,10 +290,19 @@
                                        {
                                            packet.Bytes = e.ApplicationMessage.Payload;
                                        }
#if DEBUG
                                        //string ddd = "";
                                        //foreach (var bb in packet.Bytes)
                                        //{
                                        //    ddd += bb + ",";
                                        //}
                                        //MainPage.Log($"mqtt bus data:{ddd}");
#endif
                                        packet.Manager();
                                    }
                                    else
                                    {
                                        MainPage.Log($"mqtt A-Link data");
                                        //A协议数据处理
                                        var revString = Encoding.UTF8.GetString(bytes);
                                        Control.Ins.UpdataFunctionStatus(revString,null);
@@ -309,25 +325,9 @@
                    //(3)ConnectedHandler
                    if (RemoteMqttClient.ConnectedHandler == null)
                    {
                        RemoteMqttClient.UseConnectedHandler(async (e) => {
                            if (DB_ResidenceData.Instance.HomeGateway.gatewayStatus)
                            {
                                Control.Ins.GatewayOnline = true;
                            }
                            else
                            {
                                //new System.Threading.Thread(() => {
                                //    while(true)
                                //    {
                                //        System.Threading.Thread.Sleep(1000);
                                //        if (DB_ResidenceData.Instance.HomeGateway.GatewayOnline)
                                //        {
                                //            Control.Ins.GatewayOnline = true;
                                //            break;
                                //        }
                                //    }
                                //}) { IsBackground = true }.Start();
                            }
                        RemoteMqttClient.UseConnectedHandler(async (e) =>
                        {
                            Control.Ins.GatewayOnline = true;
                            IfNeedReadAllDeviceStatus = true;
                            Utlis.WriteLine($"============>Mqtt远程连接成功");
                            SendPushSignOut();
@@ -357,7 +357,7 @@
                finally
                {
                    //最终要释放连接状态
                    remoteMqttIsConnecting = false;
                    RemoteMqttIsConnecting = false;
                    Utlis.WriteLine($"StartCloudMqtt: 结束");
                }
@@ -554,7 +554,12 @@
            DisConnectRemoteMqttClient("挤下线");
            HDLCommon.Current.CheckLogout();
            Application.RunOnMainThread(() =>
            {
                //弹窗提示被挤下线
                HDLCommon.Current.CheckLogout();
            });
            //UserInfo.Current.LastTime = DateTime.MinValue;
            //UserInfo.Current.SaveUserInfo();
@@ -647,7 +652,6 @@
        /// 是否需要读取一次所有设备状态
        /// </summary>
        static bool IfNeedReadAllDeviceStatus = true;
        //public static bool IsGatewayOnline = true;
        /// <summary>
        /// 设置网关在线标志,并重置CheckGateway参数