黄学彪
2021-03-15 2f05a4874e64b3c2e60055e1246025f8a0367f78
红外宝最终版本
6个文件已修改
476 ■■■■■ 已修改文件
HDL_ON/Entity/FunctionList.cs 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothIOSLogic.cs 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection2Page.cs 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection4Page.cs 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs
@@ -201,7 +201,11 @@
        /// 加载功能列表
        /// </summary>
        /// <param name="filePath"></param>
        public void IniFunctionList(string filePath)
        /// <param name="checkRepeat">
        /// <para>考虑到性能问题追加此变量,是否检测重复,只对function有效</para>
        /// <para>true:当重复存在时,替换掉</para>
        /// <para>false:直接无条件添加</para></param>
        public void IniFunctionList(string filePath, bool checkRepeat = false)
        {
            // todo 增加设备,增加功能进功能列表
            if (filePath.StartsWith("FunctionData_"))
@@ -214,10 +218,21 @@
                    FileUtlis.Files.DeleteFile(filePath);
                    return;
                }
                if (checkRepeat == true)
                {
                    //检测重复
                    for (int i = 0; i < Functions.Count; i++)
                    {
                        if (Functions[i].deviceId == tempFunction.deviceId)
                        {
                            //先移除掉再加
                            Functions.RemoveAt(i);
                            Functions.Add(tempFunction);
                            return;
                        }
                    }
                }
                Functions.Add(tempFunction);
            }
            if (filePath.StartsWith("SceneData_"))
            {
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs
@@ -119,17 +119,20 @@
        /// <param name="FinishEvent">搜索结束的事件</param>
        public void ScanBluetooth(int waitTime, Action<List<BluetoothInfo>> FinishEvent)
        {
            //再次检测是否能够搜索蓝牙
            this.CheckCanScanBluetooth((result) =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                if (result == true)
                //再次检测是否能够搜索蓝牙
                this.CheckCanScanBluetooth((result) =>
                {
                    HdlThreadLogic.Current.RunThread(() =>
                    if (result == true)
                    {
                        //开始搜索蓝牙
                        this.DoScanBluetooth(waitTime, FinishEvent);
                    });
                }
                        HdlThreadLogic.Current.RunThread(() =>
                        {
                            //开始搜索蓝牙
                            this.DoScanBluetooth(waitTime, FinishEvent);
                        });
                    }
                });
            });
        }
@@ -142,24 +145,36 @@
        {
            var listBluetoothInfo = new List<BluetoothInfo>();
            var adapter = Android.Bluetooth.BluetoothAdapter.DefaultAdapter;
            var scanner = adapter.BluetoothLeScanner;
            BluetoothScanCallback scanCallback = null;
            Android.Bluetooth.BluetoothAdapter adapter = null;
            Android.Bluetooth.LE.BluetoothLeScanner scanner = null;
            var scanCallback = new BluetoothScanCallback();
            scanner.StartScan(null, new Android.Bluetooth.LE.ScanSettings.Builder().SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency).Build(), scanCallback);
            //以防万一,蓝牙都丢在主线程中运行
            HdlThreadLogic.Current.RunMain(() =>
            {
                adapter = Android.Bluetooth.BluetoothAdapter.DefaultAdapter;
                scanner = adapter.BluetoothLeScanner;
                scanCallback = new BluetoothScanCallback();
                scanner.StartScan(null, new Android.Bluetooth.LE.ScanSettings.Builder().SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency).Build(), scanCallback);
            }, ShowErrorMode.NO);
            //等待
            System.Threading.Thread.Sleep(waitTime * 1000);
            scanner.StopScan(scanCallback);
            adapter.Dispose();
            foreach (var data in scanCallback.listData)
            HdlThreadLogic.Current.RunMain(() =>
            {
                listBluetoothInfo.Add(data);
            }
            scanCallback.listData.Clear();
                scanner.StopScan(scanCallback);
                adapter.Dispose();
            FinishEvent?.Invoke(listBluetoothInfo);
                foreach (var data in scanCallback.listData)
                {
                    listBluetoothInfo.Add(data);
                }
                scanCallback.listData.Clear();
                FinishEvent?.Invoke(listBluetoothInfo);
            });
        }
        /// <summary>
@@ -231,24 +246,35 @@
        /// <param name="connectEvent">因为需要对方反馈,所以使用回调(链接结果 false:连接失败 true:连接成功)</param>
        public void ContectBluetooth(BluetoothInfo bluetooth, Action<bool> connectEvent)
        {
            try
            HdlThreadLogic.Current.RunMain(() =>
            {
                this.nowBlufiClient = new Blufi.Espressif.BlufiClient(Application.Activity, bluetooth.Device);
                //一个回调事件
                var callback = new InnerGattCallback();
                callback.ConnectionStateEvent += (div, newState) =>
                try
                {
                    if (div == 1)
                    this.nowBlufiClient = new Blufi.Espressif.BlufiClient(Application.Activity, bluetooth.Device);
                    //一个回调事件
                    var callback = new InnerGattCallback();
                    callback.ConnectionStateEvent += (div, newState) =>
                    {
                        if (newState == Android.Bluetooth.ProfileState.Connected)
                        if (div == 1)
                        {
                            //链接建立成功
                            connectEvent?.Invoke(true);
                            //只通知一次
                            connectEvent = null;
                            if (newState == Android.Bluetooth.ProfileState.Connected)
                            {
                                //链接建立成功
                                connectEvent?.Invoke(true);
                                //只通知一次
                                connectEvent = null;
                            }
                            else if (newState == Android.Bluetooth.ProfileState.Disconnected)
                            {
                                //关闭链接
                                this.DisContectBluetooth();
                                connectEvent?.Invoke(false);
                                //只通知一次
                                connectEvent = null;
                            }
                        }
                        else if (newState == Android.Bluetooth.ProfileState.Disconnected)
                        else if (div == -1)
                        {
                            //关闭链接
                            this.DisContectBluetooth();
@@ -256,50 +282,42 @@
                            //只通知一次
                            connectEvent = null;
                        }
                    }
                    else if (div == -1)
                    {
                        //关闭链接
                        this.DisContectBluetooth();
                        connectEvent?.Invoke(false);
                        //只通知一次
                        connectEvent = null;
                    }
                };
                nowBlufiClient.SetGattCallback(callback);
                    };
                    nowBlufiClient.SetGattCallback(callback);
                //另外一个回调事件
                var blufiCall = new BlufiCallbackMain();
                blufiCall.StateEvent += (div, data) =>
                    //另外一个回调事件
                    var blufiCall = new BlufiCallbackMain();
                    blufiCall.StateEvent += (div, data) =>
                    {
                        //-1:异常 1:正常 2:发送数据成功 3:发送数据失败
                        if (div == StatuEnum.A异常)
                        {
                            //关闭链接
                            this.DisContectBluetooth();
                            connectEvent?.Invoke(false);
                            //只通知一次
                            connectEvent = null;
                        }
                        else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败)
                        {
                            sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0;
                        }
                        else if (div == StatuEnum.A蓝牙反馈)
                        {
                            //蓝牙返回的结果
                            this.ReceiveEvent?.Invoke(data);
                        }
                    };
                    nowBlufiClient.SetBlufiCallback(blufiCall);
                    //执行链接
                    nowBlufiClient.Connect();
                }
                catch
                {
                    //-1:异常 1:正常 2:发送数据成功 3:发送数据失败
                    if (div == StatuEnum.A异常)
                    {
                        //关闭链接
                        this.DisContectBluetooth();
                        connectEvent?.Invoke(false);
                        //只通知一次
                        connectEvent = null;
                    }
                    else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败)
                    {
                        sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0;
                    }
                    else if (div == StatuEnum.A蓝牙反馈)
                    {
                        //蓝牙返回的结果
                        this.ReceiveEvent?.Invoke(data);
                    }
                };
                nowBlufiClient.SetBlufiCallback(blufiCall);
                //执行链接
                nowBlufiClient.Connect();
            }
            catch
            {
                connectEvent?.Invoke(false);
                connectEvent = null;
            }
                    connectEvent?.Invoke(false);
                    connectEvent = null;
                }
            });
        }
        /// <summary>
@@ -488,9 +506,14 @@
            try
            {
                this.sendStatuValue = -1;
                //发送数据
                var byteData = System.Text.Encoding.UTF8.GetBytes(i_data);
                this.nowBlufiClient.PostCustomData(byteData);
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //发送数据
                    var byteData = System.Text.Encoding.UTF8.GetBytes(i_data);
                    this.nowBlufiClient.PostCustomData(byteData);
                }, ShowErrorMode.NO);
                if (waiTime == 0) { return true; }
                waiTime *= 5;
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothIOSLogic.cs
@@ -151,17 +151,20 @@
        /// <param name="FinishEvent">搜索结束的事件</param>
        public void ScanBluetooth(int waitTime, Action<List<BluetoothInfo>> FinishEvent)
        {
            //再次检测是否能够搜索蓝牙
            this.CheckCanScanBluetooth((result) =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                if (result == true)
                //再次检测是否能够搜索蓝牙
                this.CheckCanScanBluetooth((result) =>
                {
                    HdlThreadLogic.Current.RunThread(() =>
                    if (result == true)
                    {
                        //开始搜索蓝牙
                        this.DoScanBluetooth(waitTime, FinishEvent);
                    });
                }
                        HdlThreadLogic.Current.RunThread(() =>
                        {
                            //开始搜索蓝牙
                            this.DoScanBluetooth(waitTime, FinishEvent);
                        });
                    }
                });
            });
        }
@@ -218,45 +221,48 @@
        /// <param name="connectEvent">因为需要对方反馈,所以使用回调(链接结果 false:连接失败 true:连接成功)</param>
        public void ContectBluetooth(BluetoothInfo bluetooth, Action<bool> connectEvent)
        {
            try
            HdlThreadLogic.Current.RunMain(() =>
            {
                //添加事件
                ((BlueWifiDelegate)blufiClient.BlufiDelegate).StateEvent += (div, data) =>
                try
                {
                    //-1:异常 1:正常 2:发送数据成功 3:发送数据失败
                    if (div == StatuEnum.A异常)
                    //添加事件
                    ((BlueWifiDelegate)blufiClient.BlufiDelegate).StateEvent += (div, data) =>
                    {
                        //关闭链接
                        this.DisContectBluetooth();
                        connectEvent?.Invoke(false);
                        //只通知一次
                        connectEvent = null;
                    }
                    else if (div == StatuEnum.A正常)
                    {
                        //链接建立成功
                        connectEvent?.Invoke(true);
                        //只通知一次
                        connectEvent = null;
                    }
                    else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败)
                    {
                        sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0;
                    }
                    else if (div == StatuEnum.A蓝牙反馈)
                    {
                        //蓝牙返回的结果
                        this.ReceiveEvent?.Invoke(data);
                    }
                };
                //执行链接
                this.blufiClient.Connect(bluetooth.Address);
            }
            catch
            {
                connectEvent?.Invoke(false);
                connectEvent = null;
            }
                        //-1:异常 1:正常 2:发送数据成功 3:发送数据失败
                        if (div == StatuEnum.A异常)
                        {
                            //关闭链接
                            this.DisContectBluetooth();
                            connectEvent?.Invoke(false);
                            //只通知一次
                            connectEvent = null;
                        }
                        else if (div == StatuEnum.A正常)
                        {
                            //链接建立成功
                            connectEvent?.Invoke(true);
                            //只通知一次
                            connectEvent = null;
                        }
                        else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败)
                        {
                            sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0;
                        }
                        else if (div == StatuEnum.A蓝牙反馈)
                        {
                            //蓝牙返回的结果
                            this.ReceiveEvent?.Invoke(data);
                        }
                    };
                    //执行链接
                    this.blufiClient.Connect(bluetooth.Address);
                }
                catch
                {
                    connectEvent?.Invoke(false);
                    connectEvent = null;
                }
            });
        }
        #endregion
@@ -307,27 +313,17 @@
            try
            {
                this.sendStatuValue = -1;
                if (waiTime == 0)
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //发送数据
                    var data = new Foundation.NSData();
                    data = i_data;
                    blufiClient.PostCustomData(data);
                    //直接返回成功
                    return true;
                }
                else
                {
                    //或许他用的是线程来调用
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        //发送数据
                        var data = new Foundation.NSData();
                        data = i_data;
                        blufiClient.PostCustomData(data);
                    }, ShowErrorMode.NO);
                }
                }, ShowErrorMode.NO);
                if (waiTime == 0) { return true; }
                waiTime *= 5;
                while (this.sendStatuValue == -1 && waiTime > 0)
                {
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection2Page.cs
@@ -21,6 +21,10 @@
        /// wifi密码
        /// </summary>
        private string wifiPassword = string.Empty;
        /// <summary>
        /// 蓝牙设备
        /// </summary>
        private List<HdlBluetoothLogic.BluetoothInfo> listDevice = new List<HdlBluetoothLogic.BluetoothInfo>();
        #endregion
@@ -73,24 +77,8 @@
            this.AddListMsgControls(bodyFrameLayout, strMsg, CSS.CSS_FontSize.TextFontSize,
                CSS.CSS_Color.FirstLevelTitleColor, Application.GetRealHeight(20), btnSearch.Bottom + Application.GetRealHeight(4));
            //搜索时间(秒)
            int searchTime = 5;
            //搜索蓝牙(特效问题,加1秒)
            this.StartSearchBluetooth(searchTime + 1);
            HdlThreadLogic.Current.RunThread(() =>
            {
                //进度条特效
                for (int i = 0; i <= searchTime; i++)
                {
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        btnProgress.SetValue(i + 1, searchTime);
                    });
                    System.Threading.Thread.Sleep(1000);
                }
            });
            //开启进度条特效
            this.StartProgressSpecialEffects(btnProgress);
        }
        #endregion
@@ -98,15 +86,13 @@
        #region ■ 搜索蓝牙___________________________
        /// <summary>
        /// 安卓搜索蓝牙
        /// 搜索蓝牙
        /// </summary>
        /// <param name="i_searchTime">搜索时间(秒)</param>
        private void StartSearchBluetooth(int i_searchTime)
        private void StartSearchBluetooth()
        {
            //开始搜索蓝牙
            HdlBluetoothLogic.Current.ScanBluetooth(i_searchTime, (listBluetooth) =>
            HdlBluetoothLogic.Current.ScanBluetooth(2, (listBluetooth) =>
            {
                var listDevice = new List<HdlBluetoothLogic.BluetoothInfo>();
                foreach (var device in listBluetooth)
                {
                    //只有这个标识,才是红外宝
@@ -120,18 +106,13 @@
                {
                    //摧毁蓝牙缓存
                    HdlBluetoothLogic.Current.Dispone();
                    //显示失败界面
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        this.ShowFailView();
                    });
                }
                else if (listDevice.Count == 1)
                {
                    //如果只检测到一个,则直接连接
                    HdlBluetoothLogic.Current.ContectBluetooth(listDevice[0], (result) =>
                    {
                        if (result == true)
                        if (result == true && this.Parent != null)
                        {
                            //连接成功,则跳转到下一个界面
                            HdlThreadLogic.Current.RunMain(() =>
@@ -180,6 +161,63 @@
            });
        }
        /// <summary>
        /// 开启进度条特效
        /// </summary>
        private void StartProgressSpecialEffects(ProgressRowBar btnProgress)
        {
            //搜索时间(秒)
            int searchTime = 180;
            HdlThreadLogic.Current.RunThread(() =>
            {
                //进度条特效
                for (int i = 1; i <= searchTime; i++)
                {
                    System.Threading.Thread.Sleep(1000);
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        //进度条特效
                        btnProgress.SetValue(i, searchTime);
                    });
                    //界面关闭
                    if (this.Parent == null)
                    {
                        break;
                    }
                    //如果已经搜索到蓝牙,则直接到100%
                    if (listDevice.Count > 0)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            btnProgress.SetValue(searchTime, searchTime);
                        });
                        break;
                    }
                    if (i % 5 == 1)
                    {
                        //每5秒搜索一次
                        this.StartSearchBluetooth();
                    }
                    //超时
                    if (i >= searchTime)
                    {
                        System.Threading.Thread.Sleep(3000);
                        //最后的时间还是搜不到的话
                        if (listDevice.Count == 0)
                        {
                            //显示失败界面
                            HdlThreadLogic.Current.RunMain(() =>
                            {
                                this.ShowFailView();
                            });
                        }
                        break;
                    }
                }
            });
        }
        #endregion
        #region ■ 显示选择蓝牙列表的界面_____________
@@ -191,6 +229,8 @@
        /// <param name="selectEvent">选择事件(考虑到Ios和安卓,所以这样定参数)</param>
        private void ShowBluetoothListView(List<string> listName, Action<int> selectEvent)
        {
            if (this.Parent == null) { return; }
            HdlThreadLogic.Current.RunMain(() =>
            {
                var contr = new BottomItemSelectControl(listName.Count, Language.StringByID(StringId.ChooseInfraredRemoteControl), false);
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection4Page.cs
@@ -317,13 +317,49 @@
        /// <summary>
        /// 刷新红外宝信息
        /// </summary>
        private void RefreshMiniRemoteControlInfo()
        /// <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);
            DAL.Server.HttpUtil.RequestHttpsPostFroHome(DAL.Server.NewAPI.Api_Post_GetDevcieList, requestJson);
            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
@@ -343,15 +379,16 @@
                return;
            }
            //刷新红外宝信息
            this.RefreshMiniRemoteControlInfo();
            this.RefreshMiniRemoteControlInfo(() =>
            {
                //移除这个事件
                HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
                //停止线程
                this.timeoutThreadActivity = false;
            //接收到就移除这个事件
            HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page");
            //停止线程
            this.timeoutThreadActivity = false;
            //添加设备成功之后,处理一些东西
            this.DoSomethingAfterAddDeviceSuccess();
                //添加设备成功之后,处理一些东西
                this.DoSomethingAfterAddDeviceSuccess();
            });
        }
        /// <summary>
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -337,11 +337,6 @@
                        == false ? StringId.Administrators : StringId.Member
            };
            userTypeView.AddChidren(btnUserTypeName);
            btnUserTypeIcon.MouseUpEventHandler += (sender, e) =>
            {
                var form = new AddThirdPartyDeviceMenuListPage();
                form.AddForm("Evoyo");
            };
            #endregion
            #region 住宅管理