From 304dca51c28183a9dfc192c6b93ea1c00bdd5d97 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期三, 01 七月 2020 15:00:40 +0800
Subject: [PATCH] 添加了写入功能类型

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs |  998 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 997 insertions(+), 1 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
index ddcca6f..58ce04e 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelSimpleMutilfunctionTargetsForm.cs
@@ -1,10 +1,1006 @@
 锘縰sing System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using Newtonsoft.Json.Linq;
+using Shared.Common;
+using Shared.Phone.UserCenter.Device.Bind;
+using Shared.Phone.UserCenter.Safety;
+using ZigBee.Device;
+using static ZigBee.Device.BindObj;
+using static ZigBee.Device.Panel;
 namespace Shared.Phone.UserCenter.DeviceBind
 {
+    /// <summary>
+    /// 绠�绾﹀鍔熻兘闈㈡澘
+    /// 褰撳墠鐣岄潰榛樿閫夋嫨绗竴涓ゼ灞傦紝绗竴涓被鍨�
+    /// </summary>
     public class PanelSimpleMutilfunctionTargetsForm : BindCommonLayout
     {
-        public PanelSimpleMutilfunctionTargetsForm()
+        #region  鏋勯�犲嚱鏁�
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="deviceMac">绠�绾﹀鍔熻兘闈㈡澘Mac</param> 
+        public PanelSimpleMutilfunctionTargetsForm(string deviceMac)
         {
+            curControlDev = new Panel();
+            var dev = Common.LocalDevice.Current.GetDevice(deviceMac, 62);//绠�绾﹂潰鏉块殢渚夸竴涓洖璺潵鑾峰彇璁惧
+            if (dev != null)
+            {
+                curControlDev.CurrentGateWayId = dev.CurrentGateWayId;
+            }
+            curControlDev.Type = DeviceType.OnOffSwitch;
+            curControlDev.DeviceAddr = deviceMac;
         }
+        #endregion
+
+        #region  鍙橀噺鐢虫槑 
+        /// <summary>
+        /// 鎺у埗璁惧
+        /// </summary>
+        Panel curControlDev;
+        /// <summary>
+        /// 鏄剧ず琚粦瀹氳澶囨垨鍦烘櫙鐨剉iew
+        /// </summary>
+        VerticalFrameRefreshControl midVerticalScrolViewLayout;
+        /// <summary>
+        /// 鏄剧ず缁戝畾绫诲瀷 
+        /// </summary>
+        FrameLayout typeFrameLayout;
+        /// <summary>
+        /// 缁戝畾绫诲瀷鎻愮ず鏂囨湰
+        /// </summary>
+        Button btnTipText;
+        /// <summary>
+        /// 淇濆瓨瀹屾垚鎸夐挳
+        /// </summary>
+        Button btnFinifh;
+        /// <summary>
+        /// 鏈湴璁惧鍒楄〃
+        /// </summary>
+        private System.Collections.Generic.List<CommonDevice> localDeviceList = new System.Collections.Generic.List<CommonDevice>();
+        /// <summary>
+        /// 鏈湴鍦烘櫙鍒楄〃 
+        /// </summary>
+        private System.Collections.Generic.List<SceneUI> scList = new System.Collections.Generic.List<SceneUI> { };
+        /// <summary>
+        /// 褰撳墠绫诲瀷鐨勭粦瀹氳〃
+        /// </summary>
+        public List<BindListAllInfo> curBindTypeList = new List<BindListAllInfo>();
+        /// <summary>
+        /// 褰撳墠绫诲瀷
+        /// 0:鍦烘櫙  1:寮�鍏�  2:鎻掑骇  3:鐏厜  4:閬槼 5:绌鸿皟 6:鏂伴
+        /// </summary>
+        int curBindType = 0;
+        /// <summary>
+        /// 鏄惁鏀寔璇诲彇
+        /// </summary>
+        bool IsRead = false;
+        /// <summary>
+        /// 鏄惁鏀寔鍐嶆璇诲彇銆愬綋鐩爣璇诲彇涓嶅叏鎯呭喌涓嬮噸鏂拌鍙栥��
+        /// </summary>
+        bool IsAgain = false;
+        /// <summary>
+        /// 涓婁竴娆¤鍙栫鐐孤�
+        /// </summary>
+        private int oldReadEpoint = 2;
+        /// <summary>
+        /// 鐗规畩绫诲瀷鐨勪釜鏁般�愬紑鍏�/鎻掑骇/鐏厜銆戦渶瑕佽绠楁樉绀虹殑涓暟聽
+        /// </summary>
+        int specialTypeCount = 0;
+
+        private Action bindReceiveAction = null;
+        /// <summary>
+        /// 鍥炶皟缁戝畾鐩爣椤甸潰鍒锋柊
+        /// </summary>
+        public Action<List<BindListResponseObj>> action;
+        #endregion
+
+        #region UI璁捐 
+        /// <summary>
+        /// 鐩爣椤垫樉绀�
+        /// </summary>
+        public void Show()
+        {
+            //鏍囬鏍�
+            TitleUI();
+            //涓儴UI銆愭爣棰樻爮涓嬬殑UI銆�
+            MidFrameLayouUI();
+            //绫诲瀷鏍廢I
+            BindTypeUI();
+
+            CommonPage.Loading.Start("");
+            InitLocalDeviceList();
+            if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Count == 0)
+            {
+                IsRead = true;
+            }
+            else
+            {
+                IsRead = false;
+            }
+            InitData();
+        }
+
+        /// <summary>
+        /// 鏍囬鏍�
+        /// </summary>
+        void TitleUI()
+        {
+            string titleText = "";
+            titleText = Language.StringByID(R.MyInternationalizationString.uBindTargets);
+
+            this.TopFrameLayout(this, titleText);
+            EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
+            {
+                RemoveFromParent();
+            };
+            this.btnTitle.Width = Application.GetRealWidth(1080 - 161 - 300);
+            this.btnBack.MouseUpEventHandler += eHandlerBack;
+            this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
+            this.MidFrameLayout(this);
+
+            var btnAddFrameLayout = new FrameLayout()
+            {
+                X = Application.GetRealWidth(772 - 58),
+                Width = Application.GetRealWidth(192),
+            };
+            this.titleFrameLayout.AddChidren(btnAddFrameLayout);
+
+            var btnBindAdd = new Button
+            {
+                X = Application.GetRealWidth(62),
+                Height = Application.GetMinReal(72),
+                Width = Application.GetMinReal(72),
+                UnSelectedImagePath = "BindPic/BindAdd.png",
+            };
+            btnAddFrameLayout.AddChidren(btnBindAdd);
+            EventHandler<MouseEventArgs> eHandlerAdd = (sender, e) =>
+            {
+                var simpleMutilfunctionBindTargetsForm = new Shared.Phone.UserCenter.DeviceBind.PanelSimpleMutilfunctionAddTargetsForm(curControlDev.DeviceAddr, curBindType);
+                Shared.Phone.UserView.HomePage.Instance.AddChidren(simpleMutilfunctionBindTargetsForm);
+                Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
+                simpleMutilfunctionBindTargetsForm.Show();
+                Action action = () =>
+                {
+                    RefreshBindListUI();
+                };
+                simpleMutilfunctionBindTargetsForm.actionRefreshBindList += action;
+            };
+            btnBindAdd.MouseDownEventHandler += eHandlerAdd;
+            btnAddFrameLayout.MouseDownEventHandler += eHandlerAdd;
+        }
+
+        /// <summary>
+        /// 涓儴UI銆愭爣棰樻爮涓嬬殑UI銆�
+        /// </summary>
+        void MidFrameLayouUI()
+        {
+            //绫诲瀷鏍�1
+            typeFrameLayout = new FrameLayout
+            {
+                X = Application.GetRealWidth(58 / 2),
+                Height = Application.GetRealHeight(323),
+            };
+            this.midFrameLayout.AddChidren(typeFrameLayout);
+
+            //璁惧鏍�
+            midVerticalScrolViewLayout = new VerticalFrameRefreshControl()
+            {
+                Y = Application.GetRealHeight(323),
+                Height = Application.GetRealHeight(1065),
+            };
+            this.midFrameLayout.AddChidren(midVerticalScrolViewLayout);
+            midVerticalScrolViewLayout.BeginHeaderRefreshingAction += () =>
+            {
+                midVerticalScrolViewLayout.BeginHeaderRefreshing();
+                IsRead = true;
+                InitData();
+            };
+
+            //搴曢儴淇濆瓨鏍�
+            var bottomFrameLayout = new FrameLayout()
+            {
+                Width = LayoutParams.MatchParent,
+                Height = Application.GetRealHeight(84 * 2 + 127),
+                Y = Application.GetRealHeight(1388),
+            };
+            this.midFrameLayout.AddChidren(bottomFrameLayout);
+
+            btnTipText = new Button()
+            {
+                Height = Application.GetRealHeight(84),
+                TextID = R.MyInternationalizationString.Tip,
+                TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                TextSize = 12,
+                Text = MutilfunctionPanelMethod.MatchTypeBindTextTip(curBindType),
+                TextAlignment = TextAlignment.Center,
+            };
+            bottomFrameLayout.AddChidren(btnTipText);
+
+            btnFinifh = new Button()
+            {
+                Width = Application.GetRealWidth(907),
+                Height = Application.GetRealHeight(127),
+                Y = Application.GetRealHeight(49 + 35),
+                Gravity = Gravity.CenterHorizontal,
+                Radius = (uint)Application.GetRealHeight(127) / 2,
+                TextID = R.MyInternationalizationString.Save,
+                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
+                TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
+                IsBold = true,
+                TextSize = 16,
+            };
+            bottomFrameLayout.AddChidren(btnFinifh);
+            btnFinifh.MouseUpEventHandler += (sender, e) =>
+            {
+                SaveTarget();
+            };
+        }
+
+        /// <summary>
+        /// 绫诲瀷鏍廢I
+        /// </summary>
+        void BindTypeUI()
+        {
+            //鍖归厤鐨勭被鍨嬪垪琛�
+            var typeList = GetTypeList();
+            int index = 0;
+            Button curentOldType = null;
+            FrameLayout curentOldTypeLayout = null;
+            foreach (var typeText in typeList)
+            {
+                var btnTypeLayout = new FrameLayout
+                {
+                    Height = Application.GetMinRealAverage(159),
+                    Width = Application.GetMinRealAverage(255),
+                    Y = Application.GetRealHeight(23),
+                    BackgroundImagePath = "Item/RoomIconBackground.png",
+                    BorderWidth = 1,
+                };
+                typeFrameLayout.AddChidren(btnTypeLayout);
+
+                var btnType = new Button
+                {
+                    Height = Application.GetRealHeight(58),
+                    Width = Application.GetRealWidth(127),
+                    Y = Application.GetRealHeight(58),
+                    X = Application.GetRealWidth(14),
+                    Text = typeText,
+                    TextSize = 12,
+                    TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
+                    Gravity = Gravity.Center,
+                };
+                btnTypeLayout.AddChidren(btnType);
+
+                btnType.IsSelected = false;
+
+                if (index == 0)
+                {
+                    btnTypeLayout.Y = Application.GetRealHeight(0);
+                    btnTypeLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
+                    btnType.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite;
+                    curentOldType = btnType;
+                    curentOldTypeLayout = btnTypeLayout;
+                }
+                else
+                {
+                    btnTypeLayout.Y = Application.GetRealHeight(0);
+                    btnTypeLayout.X = index * Application.GetRealWidth(260);
+                    if (index > 3)
+                    {
+                        btnTypeLayout.Y = Application.GetRealHeight(58 + 78);
+                        if (index == 4)
+                        {
+                            btnTypeLayout.X = Application.GetRealWidth(0);
+                        }
+                        else
+                        {
+                            btnTypeLayout.X = (index - 4) * Application.GetRealWidth(260);
+                        }
+                    }
+                }
+
+                EventHandler<MouseEventArgs> eHandlerRoom = (sender, e) =>
+                {
+                    if (!curentOldType.IsSelected)
+                    {
+                        if (curentOldType != null)
+                        {
+                            curentOldType.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3;
+                        }
+                        curentOldType = btnType;
+                        curentOldType.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite;
+                    }
+
+                    if (btnTypeLayout.BorderWidth == 1)
+                    {
+                        if (curentOldTypeLayout != null)
+                        {
+                            curentOldTypeLayout.BorderWidth = 1;
+                            curentOldTypeLayout.BorderColor = Shared.Common.ZigbeeColor.Current.XMOrange;
+                            curentOldTypeLayout.BackgroundImagePath = "Item/RoomIconBackground.png";
+                        }
+                        curentOldTypeLayout = btnTypeLayout;
+                        curentOldTypeLayout.BorderWidth = 0;
+                        curentOldTypeLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png";
+                    }
+
+                    if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.scene))
+                    {
+                        curBindType = 0;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId13))
+                    {
+                        curBindType = 1;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId14))
+                    {
+                        curBindType = 2;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId15))
+                    {
+                        curBindType = 3;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId100))
+                    {
+                        curBindType = 4;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId3600))
+                    {
+                        curBindType = 5;
+                        RefreshBindListUI();
+                    }
+                    else if (curentOldType.Text == Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2310))
+                    {
+                        curBindType = 6;
+                        RefreshBindListUI();
+                    }
+                };
+                btnType.MouseUpEventHandler += eHandlerRoom;
+                btnTypeLayout.MouseUpEventHandler += eHandlerRoom;
+                index++;
+            }
+        }
+
+        /// <summary>
+        /// 缁戝畾琛ㄦ樉绀�
+        /// </summary> 
+        void RefreshBindListUI()
+        {
+            midVerticalScrolViewLayout.RemoveAll();
+            curBindTypeList = MutilfunctionPanelMethod.GetMatchBindList(curBindType);
+            int curIndex = 0;
+            for (int i = 0; i < curBindTypeList.Count; i++)
+            {
+                curIndex = i;
+                var bindObj = curBindTypeList[i];
+                SceneUI curSceneUI = null;
+
+                var rowLayout = new RowLayoutControl(midVerticalScrolViewLayout.rowSpace / 2);
+                rowLayout.BackgroundColor = ZigbeeColor.Current.XMWhite;
+                midVerticalScrolViewLayout.AddChidren(rowLayout);
+                rowLayout.frameTable.UseClickStatu = false;
+                var devicePic = rowLayout.frameTable.AddLeftIcon();
+                devicePic.Y = Application.GetRealHeight(25);//49
+                devicePic.UnSelectedImagePath = "DoorLock/DoorLockUserPic.png";
+
+                #region 缁戝畾鏁版嵁澶勭悊
+                int currentIndex = i;
+                var btnBindNameText = "";
+                var btnFloorRoomNameText = "";
+                if (currentIndex == curBindTypeList.Count - 1)
+                {
+                    rowLayout.LineColor = Shared.Common.ZigbeeColor.Current.XMWhite;
+                }
+
+                if (curBindType == 0)
+                {
+                    //Scene
+                    curSceneUI = HdlSceneLogic.Current.GetSceneUIBySceneId(bindObj.BindScenesId);
+                    devicePic.UnSelectedImagePath = "Scene/SceneIcon.png";
+                    if (curSceneUI == null)
+                    {
+                        if (string.IsNullOrEmpty(bindObj.ESName))
+                        {
+                            btnBindNameText = Language.StringByID(R.MyInternationalizationString.OffLineScene) + "_" + "ID" + "_" + bindObj.BindScenesId.ToString();
+                        }
+                        else
+                        {
+                            btnBindNameText = Language.StringByID(R.MyInternationalizationString.OffLineScene) + "_" + bindObj.ESName;
+                        }
+                        btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
+                    }
+                    else
+                    {
+                        btnBindNameText = curSceneUI.Name;
+                        string myName = HdlSceneLogic.Current.GetZoneById(curSceneUI.Id);
+                        if (myName != null)
+                        {
+                            btnFloorRoomNameText = myName;
+                        }
+                        else
+                        {
+                            btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
+                        }
+                    }
+                }
+                else
+                {
+                    //琚粦瀹氳澶囧浘鐗囥�愬彲鑳藉拰澶栭潰璁惧绛夊浘鐗囦笉鍚岋紝鍥犱负杩欓噷鏄互鍔熻兘鏉ョ粦瀹氱殑銆�
+                    //devicePic.UnSelectedImagePath = tempDev.IconPath;
+                    var device = LocalDevice.Current.GetDevice(bindObj.BindMacAddr, bindObj.BindEpoint);
+                    switch (curBindType)
+                    {
+                        case 1:
+                            devicePic.UnSelectedImagePath = "BindPic/Switch.png";
+                            break;
+                        case 2:
+                            devicePic.UnSelectedImagePath = "Device/Socket1.png";
+                            break;
+                        case 3:
+                            devicePic.UnSelectedImagePath = "Device/Light.png";
+                            break;
+                        case 4:
+                            if (device != null)
+                            {
+                                if (device.Type == DeviceType.WindowCoveringDevice)
+                                {
+                                    var tempCur = device as Rollershade;
+                                    if (tempCur.WcdType == 4)
+                                    {
+                                        devicePic.UnSelectedImagePath = "BindPic/Curtain.png";
+                                    }
+                                    else
+                                    {
+                                        devicePic.UnSelectedImagePath = "BindPic/Roller.png";
+                                    }
+                                }
+                            }
+                            break;
+                        case 5:
+                            devicePic.UnSelectedImagePath = "Device/AirConditionerEpoint.png";
+                            break;
+                        case 6:
+                            devicePic.UnSelectedImagePath = "Device/FreshAirEpoint.png";
+                            break;
+                    }
+
+                    if (device != null)
+                    {
+                        //璁惧鍚嶅瓧
+                        btnBindNameText = Common.LocalDevice.Current.GetDeviceEpointName(device);
+
+                        //鑾峰彇璁惧鎵�灞炴埧闂�
+                        var tempDevRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
+
+                        if (tempDevRoom != null)
+                        {
+                            var tempDevFloorId = tempDevRoom.FloorId;
+                            //鑾峰彇鎴块棿鐨勫悕瀛�
+                            var tempDevRoomName = tempDevRoom.Name;
+                            //鑾峰彇妤煎眰鐨勫悕瀛�
+                            var tempDevFloorName = HdlResidenceLogic.Current.GetFloorNameById(tempDevFloorId);
+                            if (string.IsNullOrEmpty(tempDevFloorName))
+                            {
+                                if (string.IsNullOrEmpty(tempDevRoomName))
+                                {
+                                    btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
+                                }
+                                else
+                                {
+                                    btnFloorRoomNameText = tempDevRoomName;
+                                }
+                            }
+                            else
+                            {
+                                if (string.IsNullOrEmpty(tempDevRoomName))
+                                {
+                                    btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
+                                }
+                                else
+                                {
+                                    btnFloorRoomNameText = tempDevFloorName + "," + tempDevRoomName;
+                                }
+                            }
+                        }
+                        else
+                        {
+                            btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
+                        }
+                    }
+                    else
+                    {
+                        devicePic.TextAlignment = TextAlignment.CenterLeft;
+                        devicePic.TextColor = UserCenterColor.Current.Gray;
+                        devicePic.Text = Language.StringByID(R.MyInternationalizationString.uOffLine);
+                    }
+                }
+
+                var btnBindName = rowLayout.frameTable.AddTopView(btnBindNameText, 800);
+                var btnFloorRoomName = rowLayout.frameTable.AddBottomView(btnFloorRoomNameText, 800);
+                rowLayout.frameTable.AddBottomLine();
+                var btnDel = rowLayout.AddDeleteControl();
+                btnDel.ButtonClickEvent += (sender, e) =>
+                {
+                    RemoveTargets(bindObj, btnDel);
+                };
+                #endregion
+            }
+
+            switch (curBindType)
+            {
+                case 1:
+                    btnTipText.Text = MutilfunctionPanelMethod.MatchTypeBindTextTip(curBindType, MutilfunctionPanelMethod.curSwitchCount + MutilfunctionPanelMethod.curSocketCount + MutilfunctionPanelMethod.curLightFromRelayCount);
+                    break;
+                case 2:
+                    btnTipText.Text = MutilfunctionPanelMethod.MatchTypeBindTextTip(curBindType, MutilfunctionPanelMethod.curSwitchCount + MutilfunctionPanelMethod.curSocketCount + MutilfunctionPanelMethod.curLightFromRelayCount);
+                    break;
+                case 3:
+                    btnTipText.Text = MutilfunctionPanelMethod.MatchTypeBindTextTip(curBindType, MutilfunctionPanelMethod.curSwitchCount + MutilfunctionPanelMethod.curSocketCount + MutilfunctionPanelMethod.curLightFromRelayCount + MutilfunctionPanelMethod.curLightCount);
+                    break;
+                default:
+                    btnTipText.Text = MutilfunctionPanelMethod.MatchTypeBindTextTip(curBindType, curBindTypeList.Count);
+                    break;
+            }
+            midVerticalScrolViewLayout.AdjustTableHeight(Application.GetRealHeight(23));
+        }
+
+        #endregion
+
+        #region 鏁版嵁澶勭悊
+        /// <summary>
+        /// 鑾峰彇鏈湴鍒楄〃
+        /// </summary>
+        void InitLocalDeviceList()
+        {
+            localDeviceList.Clear();
+            scList.Clear();
+            //璁惧
+            foreach (var dev in Shared.Common.LocalDevice.Current.listAllDevice)
+            {
+                localDeviceList.Add(dev);
+            }
+            //鍦烘櫙
+            scList = HdlSceneLogic.Current.GetAllRoomSceneList();
+        }
+        /// <summary>
+        /// 鍒濆鍖栬澶囨暟鎹�
+        /// </summary>
+        void InitData()
+        {
+            System.Threading.Tasks.Task.Run(async () =>
+            {
+                try
+                {
+                    //璇诲彇鎸夐敭褰撳墠缁戝畾鐩爣  澶氬姛鑳介潰鏉跨洰鏍囨�诲叡闇�瑕佽鍙栨湰椤电殑鐩爣60涓紝3绉掑乏鍙筹紙3绉�+200姣锛�
+                    GetDeviceBindResponseAllData getBindList = null;
+                    if (IsRead)
+                    {
+                        MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Clear();
+                        var epointList = new List<int>();
+                        for (int i = 2; i < 62; i++)
+                        {
+                            epointList.Add(i);
+                        }
+                        //璇诲彇涓婃娌¤鍏ㄨ鐩爣
+                        if (IsAgain)
+                        {
+                            epointList.Clear();
+                            for (int i = oldReadEpoint; i < 62; i++)
+                            {
+                                epointList.Add(i);
+                            }
+                        }
+
+                        foreach (var epoint in epointList)
+                        {
+                            curControlDev.DeviceEpoint = epoint;
+                            getBindList = HdlDeviceBindLogic.Current.GetDeviceBindAsync(curControlDev);
+                            if (getBindList != null && getBindList.getAllBindResponseData != null)
+                            {
+                                var bList = new List<BindListAllInfo>();
+                                foreach (var dev in getBindList.getAllBindResponseData.BindList)
+                                {
+                                    var curD = new BindListAllInfo();
+                                    curD.KeyMacAddr = curControlDev.DeviceAddr;
+                                    curD.KeyEpoint = epoint;
+                                    curD.BindCluster = dev.BindCluster;
+                                    curD.BindScenesId = dev.BindScenesId;
+                                    curD.BindMacAddr = dev.BindMacAddr;
+                                    curD.BindEpoint = dev.BindEpoint;
+                                    curD.ESName = dev.ESName;
+                                    curD.BindType = dev.BindType;
+                                    bList.Add(curD);
+                                }
+                                MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Add(curControlDev.DeviceAddr + curControlDev.DeviceEpoint, bList);
+
+                                oldReadEpoint++;
+                            }
+                            else
+                            {
+                                if (oldReadEpoint < 62)
+                                {
+                                    IsAgain = true;
+                                }
+                                Application.RunOnMainThread(() =>
+                                {
+                                    RefreshBindListUI();
+                                    midVerticalScrolViewLayout.EndHeaderRefreshing();
+                                    CommonPage.Loading.Hide();
+                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
+                                });
+                                break;
+                            }
+                        }
+                        if (oldReadEpoint >= 61)
+                        {
+                            IsAgain = false;
+                            oldReadEpoint = 2;
+                        }
+
+                        //鑾峰彇鎵�鏈夌被鍨嬬殑缁戝畾鐩爣涓暟
+                        for (int i = 0; i < 7; i++)
+                        {
+                            curBindTypeList = MutilfunctionPanelMethod.GetMatchBindList(i);
+                        }
+
+                        Application.RunOnMainThread(() =>
+                        {
+                            RefreshBindListUI();
+                            midVerticalScrolViewLayout.EndHeaderRefreshing();
+                            CommonPage.Loading.Hide();
+                        });
+                    }
+                    else
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            RefreshBindListUI();
+                            CommonPage.Loading.Hide();
+                        });
+                    }
+                }
+                catch (Exception ex)
+                {
+                    var mess = ex.Message;
+                }
+            });
+        }
+
+        /// <summary>
+        /// 淇濆瓨鐩爣
+        /// </summary>
+        /// <param name="curControlDev"></param>
+        void SaveTarget()
+        {
+            RemoveFromParent();
+        }
+
+        /// <summary>
+        /// 鍒犻櫎澶氬姛鑳介潰鏉跨殑鐩爣
+        /// </summary>
+        /// <param name="bindDevice"></param>
+        /// <param name="btnDel"></param>
+        /// <returns></returns>
+        private void RemoveTargets(BindListAllInfo bindDevice, Button btnDel)
+        {
+            var delDevice = new DelDeviceBindData();
+            delDevice.DeviceAddr = bindDevice.KeyMacAddr;
+            delDevice.Epoint = bindDevice.KeyEpoint;
+
+            if (bindDevice.BindType == 0 || bindDevice.BindType == 1)
+            {
+                var removeDevice = new RemoveBindListObj();
+                removeDevice.BindCluster = bindDevice.BindCluster;
+                removeDevice.BindType = 0;
+                removeDevice.BindMacAddr = bindDevice.BindMacAddr;
+                removeDevice.BindEpoint = bindDevice.BindEpoint;
+                delDevice.RemoveBindList.Add(removeDevice);
+
+                //閮ㄥ垎鐩爣闇�瑕佷簩娆$粦瀹氱浜岀鍔熻兘 
+                switch (curBindType)
+                {
+                    case 3:
+                        var device = LocalDevice.Current.GetDevice(bindDevice.BindMacAddr, bindDevice.BindEpoint);
+                        if (device != null)
+                        {
+                            if (device.Type == DeviceType.DimmableLight)
+                            {
+                                //鐏厜涓鸿皟鍏夋椂闇�瑕佺Щ闄�6锛�8
+                                var removeDevice2 = new RemoveBindListObj();
+                                removeDevice2.BindCluster = 6;
+                                removeDevice2.BindType = 0;
+                                removeDevice2.BindMacAddr = bindDevice.BindMacAddr;
+                                removeDevice2.BindEpoint = bindDevice.BindEpoint;
+                                delDevice.RemoveBindList.Add(removeDevice2);
+                            }
+                        }
+                        break;
+                    case 5:
+                        //瑕佺Щ闄ょ┖璋冿細闇�瑕佺Щ闄�513锛�514
+                        var removeDevice3 = new RemoveBindListObj();
+                        removeDevice3.BindCluster = 514;
+                        removeDevice3.BindType = 0;
+                        removeDevice3.BindMacAddr = bindDevice.BindMacAddr;
+                        removeDevice3.BindEpoint = bindDevice.BindEpoint;
+                        delDevice.RemoveBindList.Add(removeDevice3);
+                        break;
+                }
+            }
+            else if (bindDevice.BindType == 2)
+            {
+                var removeDevice = new RemoveBindListObj();
+                removeDevice.BindCluster = bindDevice.BindCluster;
+                removeDevice.BindType = 1;
+                removeDevice.BindScenesId = bindDevice.BindScenesId;
+                delDevice.RemoveBindList.Add(removeDevice);
+            }
+
+            System.Threading.Tasks.Task.Run(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        CommonPage.Loading.Start("");
+                    });
+                    var delResult = new DelDeviceBindResponseAllData();
+                    delResult = HdlDeviceBindLogic.Current.DelDeviceBindAsync(delDevice);
+                    if (delResult == null)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance);
+                            CommonPage.Loading.Hide();
+                        });
+                        return;
+                    }
+                    else
+                    {
+                        if (delResult.removeBindResultResponseData == null)
+                        {
+                            if (delResult.delDeviceBindResponseData != null)
+                            {
+                                foreach (var d in delResult.delDeviceBindResponseData.RemoveBindList)
+                                {
+                                    if (d.Result == 0 || d.Result == 1)
+                                    {
+                                        if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(bindDevice.KeyMacAddr + bindDevice.KeyEpoint))
+                                        {
+                                            MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Remove(bindDevice.KeyMacAddr + bindDevice.KeyEpoint);
+                                        }
+                                        Application.RunOnMainThread(() =>
+                                        {
+                                            RefreshBindListUI();
+                                            CommonPage.Loading.Hide();
+                                        });
+                                    }
+                                    else
+                                    {
+                                        Application.RunOnMainThread(() =>
+                                        {
+                                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance);
+                                            CommonPage.Loading.Hide();
+                                        });
+                                        return;
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                Application.RunOnMainThread(() =>
+                                {
+                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance);
+                                    CommonPage.Loading.Hide();
+                                });
+                                return;
+                            }
+                        }
+                        else
+                        {
+                            if (delResult.removeBindResultResponseData.Result == 0)
+                            {
+                                if (MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.ContainsKey(bindDevice.KeyMacAddr + bindDevice.KeyEpoint))
+                                {
+                                    MutilfunctionPanelMethod.bindTargetsFromMutilfunctionPanelList.Remove(bindDevice.KeyMacAddr + bindDevice.KeyEpoint);
+                                }
+                                Application.RunOnMainThread(() =>
+                                {
+                                    RefreshBindListUI();
+                                    CommonPage.Loading.Hide();
+                                });
+                            }
+                            else
+                            {
+                                Application.RunOnMainThread(() =>
+                                {
+                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance);
+                                    CommonPage.Loading.Hide();
+                                });
+                                return;
+                            }
+                        }
+                    }
+                }
+                catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        CommonPage.Loading.Hide();
+                    });
+                }
+            });
+        }
+
+
+
+        /// <summary>
+        /// 鍖归厤鐨勭被鍨嬪垪琛�
+        /// </summary>
+        /// <returns></returns>
+        private List<string> GetTypeList()
+        {
+            List<string> textTypelist = new List<string> { };
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.scene));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId13));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId14));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId15));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId100));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId3600));
+            textTypelist.Add(Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2310));
+            return textTypelist;
+        }
+
+        #endregion
+
+        #region 鍏朵粬鏂规硶
+        /// <summary>
+        /// 鏄剧ず缁戝畾璁惧绾跨▼鏄惁宸茬粡寮�鍚�
+        /// </summary>
+        private bool isDeviceThreadStart = false;
+        /// <summary>
+        /// 涓婚瓒呮椂鐨勭嚎绋嬫槸鍚﹀紑鍚�
+        /// </summary>
+        private bool isTopicTimeOutThreadStart = false;
+        /// <summary>
+        /// 绛夊緟璁惧鐨勫洖棣堢殑瓒呮椂鏃堕棿(鍗曚綅锛氱櫨姣)
+        /// </summary>
+        private int waitDeviceTimeOut = 20;
+        /// <summary>
+        /// 缃戝叧ID
+        /// </summary>
+        private string gatewayId = string.Empty;
+        /// <summary>
+        /// 鎺ユ敹涓暟
+        /// </summary>
+        private int countBind = 0;
+        /// <summary>
+        /// 鏂颁笂鎶ョ殑璁惧
+        /// </summary>
+        private Dictionary<int, GetPanelBindResponseDataByMac> dicPanelResInfo = new Dictionary<int, GetPanelBindResponseDataByMac>();
+
+        ///<summary >
+        /// 鍙戦�佽幏鍙栭潰鏉垮懡浠閫氳繃DeviceAddr鑾峰彇]
+        /// </summary>
+        private void SendPanelCommand()
+        {
+            var jObject = new JObject { { "DeviceAddr", curControlDev.DeviceAddr }, { "Cluster_ID", 0 }, { "Command", 5009 } };
+            curControlDev.Gateway.Send(("SearchNewDevice"), jObject.ToString());
+        }
+
+        /// <summary>
+        /// 妫�娴嬭澶囩粦瀹氱殑涓婚
+        /// </summary>
+        /// <param name="topic"></param>
+        /// <param name="resultData"></param>
+        /// <returns></returns>
+        public bool CheckIsDeviceBindTopic(string topic)
+        {
+            if (topic == gatewayId + "Bind/GetDeviceLocalBind_Respon")
+            {
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 澶勭悊闈㈡澘缁戝畾鐨勮澶囷紝鍜岀鐐规病鏈夊叧绯�
+        /// </summary>
+        /// <param name="topic">涓婚</param>
+        /// <param name="resultData">涓婃姤鏁版嵁</param>
+        private void AdjustGatewayResultData(string topic, string resultData)
+        {
+
+            //鎺ユ敹缁戝畾璁惧锛屽紑鍚帴鏀剁粦瀹氳澶囦俊鎭殑绾跨▼(閲岄潰浼氱瓑寰呬笁绉掕繖鏍�)
+            this.ReceiveSuccessFormThread();
+
+            var result = this.CheckIsDeviceBindTopic(topic);
+            if (result)
+            {
+                lock (dicPanelResInfo)
+                {
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(resultData);
+                    var info = Newtonsoft.Json.JsonConvert.DeserializeObject<GetPanelBindResponseDataByMac>(jobject["Data"].ToString());
+                    countBind = info.MaxNumItems;
+                    if (info != null)
+                    {
+                        foreach (var bDev in info.BindList)
+                        {
+                            if (this.dicPanelResInfo.ContainsKey(bDev.ControllerEpoint) == false)
+                            {
+                                this.dicPanelResInfo[bDev.ControllerEpoint] = info;
+                            }
+                        }
+                    }
+
+                    if (this.dicPanelResInfo.Count == countBind)
+                    {
+                        //鍋滄鎺ユ敹
+                        curControlDev.Gateway.GwResDataAction -= this.AdjustGatewayResultData;
+                        //鍒锋柊瓒呮椂鏃堕棿
+                        this.waitDeviceTimeOut = -1;
+                    }
+                    else
+                    {
+                        //鍒锋柊瓒呮椂鏃堕棿
+                        this.waitDeviceTimeOut = 20;
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 寮�鍚帴鏀剁粦瀹氳澶囩殑瓒呮椂绾跨▼  
+        /// </summary>
+        private void ReceiveSuccessFormThread()
+        {
+            if (this.isDeviceThreadStart == true)
+            {
+                //绾跨▼宸茬粡寮�鍚�
+                return;
+            }
+            this.isDeviceThreadStart = true;
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                System.Console.WriteLine($"1AAAAA");
+                while (this.waitDeviceTimeOut >= 0)
+                {
+                    //绛夊緟涓嬩竴涓洖璺�
+                    System.Threading.Thread.Sleep(100);
+                    this.waitDeviceTimeOut--;
+                    System.Console.WriteLine($"2AAAAA");
+                }
+                System.Console.WriteLine($"3AAAAA");
+                //鍋滄鎺ユ敹
+                bindReceiveAction.Invoke();
+                curControlDev.Gateway.GwResDataAction -= this.AdjustGatewayResultData;
+                System.Console.WriteLine($"4AAAAA");
+                System.Threading.Thread.Sleep(200);
+                System.Console.WriteLine($"5AAAAA");
+
+                //鐩墠灏卞紕涓�涓�
+                Application.RunOnMainThread(() =>
+                {
+                    if (this.dicPanelResInfo.Count < countBind)
+                    {
+                        //鍝嶅簲瓒呮椂,璇烽噸鏂颁笅鎷夊埛鏂拌幏鍙栫粦瀹氫俊鎭�
+                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.uResponseTimeoutsAndReAccessNetwork), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
+                        //鍋滄鎺ユ敹
+                        curControlDev.Gateway.GwResDataAction -= this.AdjustGatewayResultData;
+                    }
+                    System.Console.WriteLine($"6AAAAA");
+                });
+            });
+        }
+        #endregion
+
     }
 }

--
Gitblit v1.8.0