wei
2021-03-03 d4811b7d34b45ff6b21b97f11da128b5572ec526
HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -71,11 +71,6 @@
                    Utlis.WriteLine($"Remote主动断开_{s}");
                    //await RemoteMqttClient.DisconnectAsync(new MQTTnet.Client.Disconnecting.MqttClientDisconnectOptions { }, CancellationToken.None);
                    await RemoteMqttClient.DisconnectAsync();
                    if (Control.Ins.IsRemote)
                    {
                        Control.Ins.GatewayOnline = false;
                    }
                }
            }
            catch (Exception e)
@@ -138,9 +133,12 @@
                    try
                    {
                        System.Threading.Thread.Sleep(500);
                        //if (!Control.Ins.IsRemote) continue;
                        //进入后台不处理
                        if (MainPage.IsEnterBackground) continue;
                        if (MqttInfoConfig.Current.HomeGatewayInfo == null)
                        {
                            continue;
                        }
                        await StartCloudMqtt();
                        await SubscribeTopics();
@@ -198,11 +196,8 @@
                    var result = await RemoteMqttClient.SubscribeAsync(new MqttTopicFilter[] {  topicFilterPush2, topicAlinkStatus });
                    if (result.Items[0].ResultCode == MQTTnet.Client.Subscribing.MqttClientSubscribeResultCode.GrantedQoS0)
                    {
                        Control.Ins.GatewayOnline = true;
                        isSubscribeSuccess = true;
                        Utlis.WriteLine("订阅成功!");
                        MqttRemoteSend(new byte[] { 0 }, 3);
                    }
                }
                catch (Exception ex)
@@ -251,6 +246,7 @@
                            try
                            {
                                var topic = e.ApplicationMessage.Topic;
                                MainPage.Log($"收到mqtt主题:{topic}");
                                //一端口主题处理
                                if (DB_ResidenceData.Instance.GatewayType == 0 && !DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
                                {
@@ -271,7 +267,7 @@
                                    else if (topic == $"/BusGateWayToClient/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway")
                                    {
                                        var ss = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
                                        ReceiveCheckGateway(ss);
                                        //ReceiveCheckGateway(ss);
                                        return;
                                    }
                                }
@@ -287,12 +283,12 @@
                                {
                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
                                    var revString = Encoding.UTF8.GetString(bytes);
                                    Control.Ins.UpdataFunctionStatus(revString, null);
                                    Control.Ins.UpdataFunctionStatus(revString, null,true);
                                }
                                //一端口数据解析
                                else
                                {
                                    SetGatewayOnlineResetCheck();
                                    //SetGatewayOnlineResetCheck();
                                    var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
                                    //bus数据解析
                                    var packet = new Packet();
@@ -327,6 +323,7 @@
                        RemoteMqttClient.UseConnectedHandler(async (e) =>
                        {
                            IfNeedReadAllDeviceStatus = true;
                            Control.Ins.GatewayOnline_Cloud = true;
                            Utlis.WriteLine($"============>Mqtt远程连接成功");
                            SendPushSignOut();
                        });
@@ -407,11 +404,6 @@
        /// <returns></returns>
        static async Task StartMQTTGetInfo()
        {
            //if (!Control.Ins.IsRemote)
            //{
            //    return;
            //}
            await GetMqttInfoAndMQTTConnectAsync();
            ////--判断是当前是否分享的住宅
@@ -430,12 +422,6 @@
        /// </summary>
        static async Task MQTTConnectAsync()
        {
            //if (!Control.Ins.IsRemote)
            //{
            //    return;
            //}
            //if (MqttInfoConfig.Current.HomeGatewayInfo != null && MqttInfoConfig.Current.mMqttInfo != null)
            //没有网关情况下,也需要连接mqtt,涂鸦第三方设备不需要网关
            if (MqttInfoConfig.Current.mMqttInfo != null)
@@ -457,10 +443,7 @@
                    MqttInfoConfig.Current.Save();
                    if (MqttInfoConfig.Current.HomeGatewayInfo == null)
                    {
                        MqttInfoConfig.Current.HomeGatewayInfo = new Server.HomeGatewayInfo();
                    }
                    mqttEncryptKey = MqttInfoConfig.Current.HomeGatewayInfo.aesKey;
                    //解密密钥规则:已现有的住宅ID为基准,从右边一一获取值,最后如果不够16位,则往右补零
                    string aesKey = string.Empty;
@@ -526,12 +509,11 @@
        {
            try
            {
                SetGatewayOnlineResetCheck();
                if (Control.Ins.IsRemote)
                //SetGatewayOnlineResetCheck();
                if (Control.Ins.GatewayOnline_Cloud)
                {
                    CheckIfNeedReadAllDeviceStatus();
                }
            }
            catch { }
        }
@@ -541,22 +523,33 @@
        /// </summary>
        static void ReceiveNotifyGateWayOffline()
        {
            if (Control.Ins.IsRemote)
            {
                Control.Ins.GatewayOnline = false;
            }
            Control.Ins.GatewayOnline_Cloud = false;
        }
        /// <summary>
        /// 收到挤下线推送
        /// </summary>
        static void ReceiveNotifySqueezeAsync(string mMes)
        {
            if (mMes == PushSignStr) return;//是自己的登录推送不处理
            if (mMes == PushSignStr ) return;//是自己的登录推送不处理//或者当前不是远程链接状态
            //测试账号,不挤下线
            switch (UserInfo.Current.AccountString)
            {
                case "13415629083":
                case "18316120654":
                case "15622703419":
                case "18824864143":
                case "464027401@qq.com":
                case "2791308028@qq.com":
                case "13697499568":
                case "18666455392":
                case "13375012446":
                case "13602944661":
                case "18778381374":
                case "18316672920":
                    return;
            }
            //断开远程连接
            Control.Ins.IsRemote = false;
            if (!UserInfo.Current.IsLogin)
            {
                return;
@@ -583,20 +576,20 @@
            //HDLRequest.Current.PushserivceSignOut ();
        }
        /// <summary>
        /// 收到CheckGateway主题
        /// </summary>
        static void ReceiveCheckGateway(string mMes)
        {
            if (!Control.Ins.IsRemote) return;
        ///// <summary>
        ///// 收到CheckGateway主题
        ///// </summary>
        //static void ReceiveCheckGateway(string mMes)
        //{
        //    if (!Control.Ins.IsRemote) return;
            Utlis.WriteLine("ReceiveCheckGateway!");
        //    Utlis.WriteLine("ReceiveCheckGateway!");
            //CheckIfNeedReadAllDeviceStatus ();
        //    //CheckIfNeedReadAllDeviceStatus ();
            //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(mMes);
            Control.Ins.GatewayOnline = true;
        }
        //    //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(mMes);
        //    Control.Ins.GatewayOnline = true;
        //}
        /// <summary>
        /// 推送挤下线主题
@@ -628,11 +621,6 @@
                        }
                        await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Payload = message, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
                        break;
                    case 3:
                        topicName = $"/ClientToBusGateWay/{MqttInfoConfig.Current.HomeGatewayInfo.gatewayId}/Common/CheckGateway";
                        Utlis.WriteLine("CheckGateway");
                        await RemoteMqttClient.PublishAsync(new MqttApplicationMessage { Topic = topicName, Retain = false, QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce });
                        break;
                    case 4://发布新方案的挤下线主题
                        topicName = $"/BusGateWayToClient/{UserInfo.Current.ID}" + PushNotifySqueeze;
                        //message = Encoding.UTF8.GetBytes (PushSignStr);
@@ -661,27 +649,27 @@
        /// </summary>
        static bool IfNeedReadAllDeviceStatus = true;
        /// <summary>
        /// 设置网关在线标志,并重置CheckGateway参数
        /// </summary>
        static void SetGatewayOnlineResetCheck()
        {
            if (Control.Ins.IsRemote)
            {
                if (!Control.Ins.GatewayOnline)
                {
                    try
                    {
                        if (DB_ResidenceData.Instance.HomeGateway != null)
                        {
                            DB_ResidenceData.Instance.HomeGateway.gatewayStatus = true;
                        }
                        Control.Ins.GatewayOnline = true;
                    }
                    catch { }
                }
            }
        }
        ///// <summary>
        ///// 设置网关在线标志,并重置CheckGateway参数
        ///// </summary>
        //static void SetGatewayOnlineResetCheck()
        //{
        //    if (Control.Ins.IsRemote)
        //    {
        //        if (!Control.Ins.GatewayOnline)
        //        {
        //            try
        //            {
        //                if (DB_ResidenceData.Instance.HomeGateway != null)
        //                {
        //                    DB_ResidenceData.Instance.HomeGateway.gatewayStatus = true;
        //                }
        //                Control.Ins.GatewayOnline = true;
        //            }
        //            catch { }
        //        }
        //    }
        //}
        /// <summary>