From 9f326f4000847e6167d8166fa2f6a66f53cb3734 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期四, 17 十二月 2020 09:07:13 +0800
Subject: [PATCH] 新云端Ver1.3

---
 ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/WiredGatewaySearchForm.cs |  219 +++++++++++++++++++++++++++++-------------------------
 1 files changed, 118 insertions(+), 101 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/WiredGatewaySearchForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/WiredGatewaySearchForm.cs
index 7d156a6..a24c285 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/WiredGatewaySearchForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Gateway/Add/WiredGatewaySearchForm.cs
@@ -30,9 +30,9 @@
         /// </summary>
         private bool newGatewayGetting = false;
         /// <summary>
-        /// 缃戝叧妫�娴嬩腑
+        /// 缃戝叧鎼滅储涓�
         /// </summary>
-        private string isGatewayChecking = "0";
+        private bool isGatewaySearching = true;
 
         #endregion
 
@@ -60,9 +60,9 @@
 
             //鍥炬爣
             var picGwImage = new FrameLayout();
-            picGwImage.Width = Application.GetMinRealAverage(861);
-            picGwImage.Height = Application.GetMinRealAverage(478);
-            picGwImage.Y = Application.GetRealWidth(251);
+            picGwImage.Width = this.GetPictrueRealSize(861);
+            picGwImage.Height = this.GetPictrueRealSize(478);
+            picGwImage.Y = Application.GetRealHeight(251);
             picGwImage.Gravity = Gravity.CenterHorizontal;
             picGwImage.BackgroundImagePath = "Gateway/WiredGatewaySearching.png";
             bodyFrameLayout.AddChidren(picGwImage);
@@ -77,6 +77,8 @@
 
             //鍒濆鍖栬繛鎺ョ殑鍋囨兂鍔ㄧ敾鏁堟灉
             this.InitConcetionAnimete(picGwImage, btnMsg);
+            //寮�鍚綉鍏虫娴嬬殑绾跨▼
+            this.StartCheckGatewayThread();
         }
 
         /// <summary>
@@ -89,8 +91,8 @@
 
             //鍥炬爣
             var picGwImage = new FrameLayout();
-            picGwImage.Width = Application.GetMinRealAverage(861);
-            picGwImage.Height = Application.GetMinRealAverage(478);
+            picGwImage.Width = this.GetPictrueRealSize(861);
+            picGwImage.Height = this.GetPictrueRealSize(478);
             picGwImage.Y = Application.GetRealWidth(158);
             picGwImage.Gravity = Gravity.CenterHorizontal;
             picGwImage.BackgroundImagePath = "Gateway/WiredGatewaySearching.png";
@@ -98,12 +100,12 @@
             var btnFailIcon = new PicViewControl(66, 66);
             btnFailIcon.UnSelectedImagePath = "Item/FailIcon.png";
             btnFailIcon.Gravity = Gravity.CenterHorizontal;
-            btnFailIcon.Y = Application.GetMinRealAverage(181);
+            btnFailIcon.Y = this.GetPictrueRealSize(181);
             picGwImage.AddChidren(btnFailIcon);
             //鎼滅储澶辫触
             var btnFailView = new NormalViewControl(300, 60, true);
             btnFailView.TextAlignment = TextAlignment.Center;
-            btnFailView.Y = Application.GetMinRealAverage(305);
+            btnFailView.Y = this.GetPictrueRealSize(305);
             btnFailView.Gravity = Gravity.CenterHorizontal;
             btnFailView.TextColor = UserCenterColor.Current.TextGrayColor3;
             btnFailView.TextID = R.MyInternationalizationString.uSearchFail;
@@ -115,7 +117,7 @@
             btnMsg1.Y = picGwImage.Bottom + Application.GetRealHeight(112);
             btnMsg1.TextID = R.MyInternationalizationString.uSearchGatewayFailMsg1;
             bodyFrameLayout.AddChidren(btnMsg1);
-            //1.闀挎寜ZB/RST閿�20绉掞紝缃戝叧鎭㈠鍑哄巶璁剧疆锛屾寚绀虹伅鍏ㄩ儴鐔勭伃鍚庯紝閲嶆柊鍏ョ綉銆�
+            //1.鐭寜HID/WCFG鎸夐敭锛岀郴缁熸寚绀虹伅蹇棯3绉掞紝缃戝叧杩涘叆鎹㈢粦妯″紡锛屽己鍒剁綉鍏崇粦瀹氬埌褰撳墠APP
             var btnMsg2 = new NormalViewControl(930, 100, true);
             btnMsg2.X = Application.GetRealWidth(75);
             btnMsg2.Y = btnMsg1.Bottom + Application.GetRealHeight(35);
@@ -124,7 +126,7 @@
             btnMsg2.TextColor = UserCenterColor.Current.TextGrayColor1;
             btnMsg2.IsMoreLines = true;
             bodyFrameLayout.AddChidren(btnMsg2);
-            //2.鐐规寜HID/WCFG閿紝杩涘叆缃戝叧鎹㈢粦妯″紡锛岀郴缁熸寚绀虹伅蹇棯5绉掋��
+            //2.闀挎寜缃戝叧ZB/RST鎸夐敭20绉掍互涓婏紝鐩村埌鎵�鏈夋寚绀虹伅鍚屾椂鐏紝鍗虫仮澶嶅嚭鍘傝缃苟閲嶅惎
             var btnMsg3 = new NormalViewControl(930, 100, true);
             btnMsg3.X = Application.GetRealWidth(75);
             btnMsg3.Y = btnMsg2.Bottom + Application.GetRealHeight(12);
@@ -151,7 +153,7 @@
             bodyFrameLayout.AddChidren(btnMsg5);
 
             //閲嶈瘯
-            var frameback = new FrameLayoutControl();
+            var frameback = new FrameLayoutStatuControl();
             frameback.UseClickStatu = false;
             frameback.Y = Application.GetRealHeight(1259);
             frameback.Gravity = Gravity.CenterHorizontal;
@@ -160,13 +162,14 @@
             frameback.BackgroundImagePath = "Item/BottomButtonGround.png";
             bodyFrameLayout.AddChidren(frameback);
             var btnReDo = new NormalViewControl(300, 65, true);
+            btnReDo.IsBold = true;
             btnReDo.TextColor = UserCenterColor.Current.White;
             btnReDo.TextSize = 16;
             btnReDo.Y = Application.GetRealHeight(49);
             btnReDo.Gravity = Gravity.CenterHorizontal;
             btnReDo.TextAlignment = TextAlignment.Center;
             btnReDo.TextID = R.MyInternationalizationString.uReDoAgain;
-            frameback.AddChidren(btnReDo, ChidrenBindMode.BindEventOnly);
+            frameback.AddChidren(btnReDo, ChidrenBindMode.BindEvent);
             frameback.ButtonClickEvent += (sender, e) =>
             {
                 //鍒濆鍖栧垵濮嬩腑閮ㄦ帶浠�
@@ -177,7 +180,7 @@
             var btnGoBack = new BottomClickButton(688);
             btnGoBack.Y = Application.GetRealHeight(1495);
             btnGoBack.TextID = R.MyInternationalizationString.uGobackGatewayManage;
-            if (UserCenterResourse.DicActionForm.ContainsKey("GatewayListForm") == false)
+            if (HdlFormLogic.Current.IsFormOpen("GatewayListForm") == false)
             {
                 //杩斿洖涓婚〉
                 btnGoBack.TextID = R.MyInternationalizationString.uGobackToHomePage;
@@ -187,7 +190,7 @@
             {
                 this.CloseForm();
                 //鍏抽棴鎸囧畾鐣岄潰
-                this.CloseFormByFormName("NewGateWayMenuSelectForm");
+                HdlFormLogic.Current.CloseFormByFormName("NewGateWayMenuSelectForm");
             };
         }
 
@@ -201,11 +204,11 @@
         private void InitConcetionAnimete(FrameLayout picGwImage, NormalViewControl btnMsg)
         {
             //棣栨牸鐨刋杞�
-            int firstPoint = Application.GetMinRealAverage(288);
+            int firstPoint = this.GetPictrueRealSize(288);
             //涓�鏍肩殑瀹藉害
-            int width = Application.GetMinRealAverage(22);
+            int width = this.GetPictrueRealSize(22);
             //闂磋窛澶у皬
-            int space = Application.GetMinRealAverage(12);
+            int space = this.GetPictrueRealSize(12);
 
             //鐢熸垚鏍煎瓙鍧愭爣
             var listPoint = new List<int>();
@@ -218,17 +221,13 @@
             var btnRound = new PicViewControl(width, width, false);
             btnRound.Radius = (uint)width / 2;
             btnRound.BackgroundColor = UserCenterColor.Current.ConcetionRoundColor;
-            btnRound.Y = Application.GetMinRealAverage(202);
+            btnRound.Y = this.GetPictrueRealSize(202);
             btnRound.X = listPoint[0];
             picGwImage.AddChidren(btnRound);
 
             string strMsg = btnMsg.Text;
             HdlThreadLogic.Current.RunThread(() =>
             {
-                //娓呯┖鍏ㄩ儴鍒楄〃
-                HdlGatewayLogic.Current.ClearAllRealGateway();
-                ZigBee.Common.Application.IsSearchingGateway = true;
-
                 int index = 1;
                 int maxCount = 120 * 2;
                 int timeCount = 120;
@@ -236,39 +235,16 @@
                 {
                     System.Threading.Thread.Sleep(500);
                     maxCount--;
-                    if (maxCount % 4 == 0)
-                    {
-                        lock(isGatewayChecking)
-                        {
-                            if (isGatewayChecking != "1")
-                            {
-                                isGatewayChecking = "1";
-                                HdlThreadLogic.Current.RunThread(async () =>
-                                {
-                                    //姣�2绉掓娴嬫悳绱㈠埌鐨勭綉鍏�
-                                    await this.CheckZbGatewayAndSetRow();
-                                    lock (isGatewayChecking)
-                                    {
-                                        isGatewayChecking = "0";
-                                    }
-                                });
-                            }
-                        }
-                    }
-                    if (this.newGatewayGetting == true)
-                    {
-                        //鑾峰彇寰楀埌鏂扮綉鍏�,鍒欎腑鏂嚎绋�
-                        break;
-                    }
                     if (maxCount % 2 == 0)
                     {
                         timeCount--;
                     }
-                    if (maxCount <= 0)
+                    if (maxCount <= 0 || this.newGatewayGetting == true)
                     {
+                        //鑾峰彇寰楀埌鏂扮綉鍏�,鍒欎腑鏂嚎绋�
                         break;
                     }
-                    Application.RunOnMainThread(() =>
+                    HdlThreadLogic.Current.RunMain(() =>
                     {
                         btnRound.X = listPoint[index];
                         index++;
@@ -278,9 +254,13 @@
                         }
                         //姝e湪鎼滅储缃戝叧鈥Xs
                         btnMsg.Text = strMsg + timeCount + "s";
-                    });
+                    }, ShowErrorMode.NO);
                 }
-                if (maxCount <= 0)
+                //鎼滅储缁撴潫
+                this.isGatewaySearching = false;
+
+                //2020.07.14杩藉姞:鍊掕鏃剁粨鏉熸椂,鍝�曟槸宸茬粡缁戝畾浜嗙殑缃戝叧,涔熸樉绀哄嚭鏉�
+                if (maxCount <= 0 && listZbGateway.Count == 0)
                 {
                     HdlThreadLogic.Current.RunMain(() =>
                     {
@@ -288,14 +268,14 @@
                         this.InitFailMiddleFrame();
                     });
                 }
-                else if (newGatewayGetting == true)
+                else if (newGatewayGetting == true || listZbGateway.Count > 0)
                 {
                     HdlThreadLogic.Current.RunMain(() =>
                     {
                         if (this.Parent != null)
                         {
                             var form = new GatewayManage.GatewaySearchListForm();
-                            this.AddFromAndRemoveNowForm(form, listZbGateway, dicZbGatewayDiv);
+                            this.AddFormAndCloseNowForm(form, listZbGateway, dicZbGatewayDiv);
                         }
                     });
                 }
@@ -307,19 +287,57 @@
         #region 鈻� 缃戝叧妫�娴媉__________________________
 
         /// <summary>
+        /// 寮�鍚綉鍏虫娴嬬殑绾跨▼
+        /// </summary>
+        private void StartCheckGatewayThread()
+        {
+            this.isGatewaySearching = true;
+            this.dicZbGatewayDiv = new Dictionary<string, int>();
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                //娓呯┖鍏ㄩ儴鍒楄〃
+                HdlGatewayLogic.Current.ClearAllRealGatewayConection(true);
+                ZigBee.Common.Application.IsSearchingGateway = true;
+
+                int count = 0;
+                while (this.Parent != null && this.isGatewaySearching == true)
+                {
+                    //姣�2绉掓娴嬫悳绱㈠埌鐨勭綉鍏�
+                    System.Threading.Thread.Sleep(500);
+                    count++;
+                    if (count < 4)
+                    {
+                        //涓昏涓轰簡蹇竴鐐硅兘澶熶腑鏂繖涓嚎绋�
+                        continue;
+                    }
+                    count = 0;
+
+                    this.CheckZbGatewayAndSetRow();
+
+                    if (this.newGatewayGetting == true)
+                    {
+                        //鑾峰彇寰楀埌鏂扮綉鍏�,鍒欎腑鏂嚎绋�
+                        break;
+                    }
+                }
+            });
+        }
+
+        /// <summary>
         /// 妫�娴嬫悳绱㈠埌鐨勭綉鍏筹紝鐒跺悗娣诲姞鍒扮敾闈㈢殑琛岄噷闈�
         /// </summary>
-        private async Task<bool> CheckZbGatewayAndSetRow()
+        private bool CheckZbGatewayAndSetRow()
         {
             List<string> listId = new List<string>();
             for (int i = 0; i < ZbGateway.GateWayList.Count; i++)
             {
-                if (ZbGateway.GateWayList[i].getGatewayBaseInfo.IpAddress == string.Empty)
+                if (ZbGateway.GateWayList[i].GwIP == string.Empty)
                 {
                     //IP娌℃湁鐨勭綉鍏筹紝鎴戜篃涓嶇煡閬撳畠鏄共鍢涚殑
                     continue;
                 }
-                string gwId = HdlGatewayLogic.Current.GetGatewayId(ZbGateway.GateWayList[i]);
+                string gwId = ZbGateway.GateWayList[i].GwId;
                 //閲嶅娣诲姞妫�娴�
                 if (this.dicIdCheckCount.ContainsKey(gwId) == false)
                 {
@@ -341,32 +359,46 @@
             }
             for (int i = 0; i < listId.Count; i++)
             {
-                ZbGateway way = ZbGateway.GateWayList.Find((obj) => HdlGatewayLogic.Current.GetGatewayId(obj) == listId[i]);
+                ZbGateway way = ZbGateway.GateWayList.Find((obj) => obj.GwId == listId[i]);
                 if (way == null)
                 {
                     continue;
                 }
+                //2020.09.18 鏈湴杩炴帴娌℃湁杩炴帴涓�,鍒欎笉澶勭悊
+                if (way.LocalIsConnected == false)
+                {
+                    string strMsg = "鎼滅储鍒颁簡缃戝叧,浣嗘槸鏈湴閾炬帴涓嶄笂  ID:" + way.GwId + " IP:" + way.GwIP + " 鍚嶇О:" + way.GwName;
+                    HdlLogLogic.Current.WriteLog(-1, strMsg);
+                    continue;
+                }
 
                 //缃戝叧缁戝畾妯″紡
-                GatewayBindMode mode = GatewayBindMode.BindAgain;
-                //濡傛灉鏄涓�娆$粦瀹�,鎴栬�呮槸浠ュ墠宸茬粡缁戝畾杩囦簡鐨�
-                if (HdlGatewayLogic.Current.HomeIdIsEmpty(way) == true
-                    || way.getGatewayBaseInfo.HomeId == Common.Config.Instance.HomeId)
+                var mode = GatewayBindMode.BindAgain;
+                //浣忓畢ID涓虹┖ 绗竴娆$粦瀹�
+                if (HdlGatewayLogic.Current.HomeIdIsEmpty(way) == true)
                 {
-                    if (way.getGatewayBaseInfo.HomeId != Common.Config.Instance.HomeId)
-                    {
-                        //绗竴娆$粦瀹�,涔熷氨鏄綉鍏充綇瀹匢D涓虹┖
-                        mode = GatewayBindMode.First;
-                    }
-                    else
-                    {
-                        //宸茬粡缁戝畾杩囦簡
-                        mode = GatewayBindMode.Binded;
-                    }
-
+                    mode = GatewayBindMode.First;
+                }
+                //浣忓畢ID涓嶇浉绛� 闇�瑕侀噸鏂扮粦瀹�
+                else if (way.HomeId != Common.Config.Instance.HomeId)
+                {
+                    mode = GatewayBindMode.BindAgain;
+                }
+                //濡傛灉鏈湴涓嶅瓨鍦ㄧ殑璇�,褰撳仛绗竴娆$粦瀹氬鐞�
+                else if (HdlGatewayLogic.Current.IsGatewayExist(way) == false)
+                {
+                    mode = GatewayBindMode.First;
+                }
+                //浣忓畢ID涓�鏍�,鍒欐槸宸茬粡缁戝畾杩囦簡
+                else
+                {
+                    mode = GatewayBindMode.Binded;
+                }
+                //杩欎袱绉嶆儏鍐甸兘鏄渶瑕侀噸鏂版坊鍔�(宸茬粡缁戝畾杩囦簡鐨�,鏈夊彲鑳戒綇瀹匢D娌″啓杩涘幓,瀹冩湁鍙兘鏄汉涓虹殑娓呯┖浣忓畢ID)
+                if (mode == GatewayBindMode.First || mode == GatewayBindMode.Binded)
+                {
                     //娣诲姞鎼滅储鍒扮殑缃戝叧鍒扮紦瀛�(鎵ц缃戝叧淇濆瓨鎿嶄綔)
-                    ShowErrorMode showMode = this.dicIdCheckCount[listId[i]] == 0 ? ShowErrorMode.YES : ShowErrorMode.NO;
-                    var result = await HdlGatewayLogic.Current.AddNewGateway(way, ShowErrorMode.NO);
+                    var result = HdlGatewayLogic.Current.AddNewGateway(way, ShowErrorMode.NO, WriteLogMode.YES);
                     if (result == false)
                     {
                         continue;
@@ -394,12 +426,19 @@
                 {
                     //闇�瑕侀噸鏂扮粦瀹�
                     this.dicZbGatewayDiv[listId[i]] = 2;
+                    //鑾峰彇鍒颁簡鏂扮綉鍏�
+                    this.newGatewayGetting = true;
                 }
 
-                if (mode == GatewayBindMode.First)
+                if (mode == GatewayBindMode.First || mode == GatewayBindMode.Binded)
                 {
                     //鎴戣寰楄繖閲岄渶瑕佽幏鍙栦竴涓嬫柊缃戝叧鐨勮澶囧垪琛�
-                    Common.LocalDevice.Current.SetDeviceToMemmoryByGateway(way);
+                    HdlDeviceCommonLogic.Current.SetDeviceToMemmoryByGateway(way.GwId, true);
+                    if (way.IsMainGateWay == true)
+                    {
+                        //濡傛灉瀹冩槸涓荤綉鍏�,鍒欏埛鏂板満鏅垪琛�
+                        HdlSceneLogic.Current.RefreshSceneUIList(true);
+                    }
                 }
             }
             return true;
@@ -412,33 +451,11 @@
         /// <summary>
         /// 鐢婚潰鍏抽棴
         /// </summary>
-        public override void CloseForm()
+        public override void CloseFormBefore()
         {
             ZigBee.Common.Application.IsSearchingGateway = false;
-            //鏂紑娌℃湁鎵ц缁戝畾鐨勭綉鍏崇殑mqtt
-            var list = new List<ZbGateway>();
-            for (int i = 0; i < ZbGateway.GateWayList.Count; i++)
-            {
-                if (HdlGatewayLogic.Current.IsGatewayExist(ZbGateway.GateWayList[i]) == false)
-                {
-                    list.Add(ZbGateway.GateWayList[i]);
-                }
-            }
-            if (list.Count > 0)
-            {
-                foreach (var way in list)
-                {
-                    ZbGateway.GateWayList.RemoveAll((obj) => HdlGatewayLogic.Current.GetGatewayId(obj) == HdlGatewayLogic.Current.GetGatewayId(way));
-                    way.DisConnect("Search");
-                }
-            }
-            if (UserCenterResourse.listActionFormId.Contains("UserMainForm") == false)
-            {
-                //鍒锋柊涓婚〉
-                UserView.UserPage.Instance.Fresh();
-            }
-
-            base.CloseForm();
+          
+            base.CloseFormBefore();
         }
 
         #endregion

--
Gitblit v1.8.0