陈嘉乐
2021-03-16 902f19750cbf3e0e3dba7139947421ecb461f93f
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection4Page.cs
@@ -61,12 +61,9 @@
            //这个界面的背景需要白色
            bodyFrameLayout.BackgroundColor = UI.CSS.CSS_Color.MainBackgroundColor;
#if __IOS__
#endif
#if __Android__
            //添加接收蓝牙反馈的事件
            HdlAndroidBluetoothLogic.Current.AddReceiveEvent(this.BluetoothReceiveEvent);
#endif
            HdlBluetoothLogic.Current.AddReceiveEvent(this.BluetoothReceiveEvent);
            //添加云端反馈事件
            HdlCloudReceiveLogic.Current.AddCloudReceiveEvent("AddMiniRemoteControlDirection4Page", this.CloudReceiveEvent);
@@ -212,6 +209,19 @@
            bodyFrameLayout.AddChidren(btnUse);
            btnUse.ButtonClickEvent += (sender, e) =>
            {
                //关掉界面
                this.CloseForm();
                HdlFormLogic.Current.CloseFormByFormName("AddThirdPartyDeviceMenuListPage");
                HDL_ON.UI.UI2.PersonalCenter.PirDevice.Method.GetPirDeviceList(this, () =>
                {
                    Application.RunOnMainThread(() =>
                    {
                        var page = new UI2.PersonalCenter.PirDevice.PirMain();
                        MainPage.BasePageView.AddChidren(page);
                        page.Show();
                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    });
                });
            };
        }
@@ -255,7 +265,9 @@
            btnReDo.ButtonClickEvent += (sender, e) =>
            {
                //重新初始化中部信息
                this.InitMiddleFrame();
                this.CloseForm();
                var form = new AddMiniRemoteControlDirection2Page();
                form.AddForm(this.wifiName, this.wifiPsw);
            };
        }
@@ -268,14 +280,99 @@
        /// </summary>
        private void SendAccountAndPswToBluetooth()
        {
#if __IOS__
#endif
#if __Android__
            //获取发送到蓝牙的数据
            var sendData = this.GetSendToBluetoothData();
            //不等待
            HdlAndroidBluetoothLogic.Current.SendData(sendData);
#endif
            HdlBluetoothLogic.Current.SendData(sendData);
        }
        #endregion
        #region ■ 红外宝相关方法_____________________
        /// <summary>
        /// 检测是否是新的红外宝
        /// </summary>
        /// <param name="pushEnum">推送枚举</param>
        /// <param name="i_data">推送的数据</param>
        /// <returns></returns>
        private bool CheckIsNewMiniRemoteControl(CloudPushEnum pushEnum, string i_data)
        {
            if (pushEnum != CloudPushEnum.A新设备上报) { return false; }
            try
            {
                var strSpk = string.Empty;
                //转为json
                var json = Newtonsoft.Json.Linq.JObject.Parse(i_data);
                var linqArry = json["objects"] as Newtonsoft.Json.Linq.JArray;
                if (linqArry != null)
                {
                    //数组类型
                    if (linqArry.Count == 0) { return false; }
                    strSpk = linqArry[0]["spk"].ToString();
                }
                else
                {
                    //非数组类型
                    strSpk = json["objects"]["spk"].ToString();
                }
                if (strSpk != Entity.SPK.IrModule)
                {
                    //如果不是红外宝的话
                    return false;
                }
                return true;
            }
            catch { return false; }
        }
        /// <summary>
        /// 刷新红外宝信息
        /// </summary>
        /// <param name="successEvent">成功的回调事件</param>
        private void RefreshMiniRemoteControlInfo(Action successEvent)
        {
            var pra = new Dictionary<string, object>();
            pra.Add("homeId", Entity.DB_ResidenceData.Instance.CurrentRegion.RegionID);
            pra.Add("spk", Entity.SPK.IrModule);
            var requestJson = DAL.Server.HttpUtil.GetSignRequestJson(pra);
            HdlThreadLogic.Current.RunThread(() =>
            {
                int count = 0;
                while (this.Parent != null)
                {
                    try
                    {
                        //超过5次都不成功,真不处理了
                        count++;
                        if (count > 5) { return; }
                        //获取全部红外宝列表
                        var result = DAL.Server.HttpUtil.RequestHttpsPostFroHome(DAL.Server.NewAPI.Api_Post_GetDevcieList, requestJson);
                        if (result == null || result.Code != DAL.Server.StateCode.SUCCESS)
                        {
                            System.Threading.Thread.Sleep(3000);
                            continue;
                        }
                        var listDevice = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.DevcieApiPack>(result.Data.ToString());
                        foreach (var newFunction in listDevice.list)
                        {
                            //添加到缓存当中
                            newFunction.SaveFunctionFile();
                            Entity.FunctionList.List.IniFunctionList(newFunction.savePath, true);
                        }
                        //调用回调函数
                        successEvent?.Invoke();
                        return;
                    }
                    catch
                    {
                        System.Threading.Thread.Sleep(3000);
                    }
                }
            });
        }
        #endregion
@@ -289,15 +386,22 @@
        /// <param name="i_data">推送的内容</param>
        private void CloudReceiveEvent(CloudPushEnum pushEnum, string i_data)
        {
            if (pushEnum != CloudPushEnum.A新设备上报) { return; }
            //检测是否是新的红外宝
            if (this.CheckIsNewMiniRemoteControl(pushEnum, i_data) == false)
            {
                return;
            }
            //刷新红外宝信息
            this.RefreshMiniRemoteControlInfo(() =>
            {
                //移除这个事件
                HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
                //停止线程
                this.timeoutThreadActivity = false;
            //接收到就移除这个事件
            HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
            //停止线程
            this.timeoutThreadActivity = false;
            //添加设备成功之后,处理一些东西
            this.DoSomethingAfterAddDeviceSuccess();
                //添加设备成功之后,处理一些东西
                this.DoSomethingAfterAddDeviceSuccess();
            });
        }
        /// <summary>
@@ -367,8 +471,8 @@
        {
            HdlThreadLogic.Current.RunThread(() =>
            {
                //300秒超时
                int timeout = 300;
                //360秒超时
                int timeout = 360;
                while (this.timeoutThreadActivity == false && this.Parent != null)
                {
                    System.Threading.Thread.Sleep(1000);
@@ -399,11 +503,7 @@
        public override void CloseFormBefore()
        {
            //摧毁蓝牙
#if __IOS__
#endif
#if __Android__
            HdlAndroidBluetoothLogic.Current.Dispone();
#endif
            HdlBluetoothLogic.Current.Dispone();
            HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
            base.CloseFormBefore();