From da3634e011bbda29cf4e1c168997b780fe795b20 Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期三, 13 五月 2020 09:05:23 +0800
Subject: [PATCH] 优化新风模块和新风面板的测试功能,请合并代码

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs |  730 +++++++++++++++-----------------------------------------
 1 files changed, 197 insertions(+), 533 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
index 3e23033..2a1b88a 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -611,6 +611,9 @@
             }
             //鍒囨崲缃戝叧,淇濆瓨缂撳瓨
             this.SaveGatewayIdToLocation(gatewayId);
+            //鍒囨崲缃戝叧鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+            UserView.UserPage.Instance.RefreshForm = true;
+
             return true;
         }
 
@@ -794,9 +797,8 @@
         /// 鍒锋柊缃戝叧鐨勫湪绾跨姸鎬�(娉ㄦ剰,鍒锋柊鐨勬槸缂撳瓨,璇疯皟鐢–heckGatewayOnlineByFlag鏉ュ垽鏂槸鍚﹀湪绾�)
         /// </summary>
         /// <param name="listGateway"></param>
-        /// <param name="waitTime">灞�鍩熺綉鐨勬椂鍊�,鏃跺�欑瓑寰�3绉掑欢杩�</param>
         /// <returns></returns>
-        public void RefreshGatewayOnlineStatu(List<ZbGateway> listGateway, bool waitTime = true)
+        public void RefreshGatewayOnlineStatu(List<ZbGateway> listGateway)
         {
             var listRealWay = new List<ZbGateway>();
             for (int i = 0; i < listGateway.Count; i++)
@@ -811,29 +813,18 @@
                 {
                     //铏氭嫙鐗╃悊缃戝叧
                     listRealWay.Add(listGateway[i]);
-                    if (waitTime == false)
-                    {
-                        //涓嶇瓑寰呯殑璇�,鏍囪瘑鎸囧畾缃戝叧涓轰笉鍦ㄧ嚎
-                        this.SetGatewayNotOnLineFlag(listRealWay[i]);
-                    }
                 }
-                if (waitTime == true)
-                {
-                    //鍙湁绛夊緟鐨勬椂鍊�,鎵嶆爣璇嗘寚瀹氱綉鍏充负涓嶅湪绾�
-                    this.SetGatewayNotOnLineFlag(listRealWay[i]);
-                }
+                //鏍囪瘑鎸囧畾缃戝叧涓轰笉鍦ㄧ嚎
+                listRealWay[i].GatewayOnlineFlage = false;
             }
 
-            if (waitTime == true)
+            //杩欐槸绗竴閬撳潕,寮哄埗妫�鏌IFI:绛夊緟2绉�(鍥犱负wifi鐨勬椂鍊欙紝瀹冧細鑷姩鍘诲埛鏂癴lage)
+            System.Threading.Thread.Sleep(2000);
+            //妫�鏌ユ槸鍚︽嫢鏈夌綉鍏冲瓨鍦ㄤ簬WIFi涓�
+            if (this.CheckHadGatewayInWifi(listRealWay) == false)
             {
-                //杩欐槸绗竴閬撳潕,寮哄埗妫�鏌IFI:绛夊緟2绉�(鍥犱负wifi鐨勬椂鍊欙紝瀹冧細鑷姩鍘诲埛鏂癴lage)
-                System.Threading.Thread.Sleep(2000);
-                //妫�鏌ユ槸鍚︽嫢鏈夌綉鍏冲瓨鍦ㄤ簬WIFi涓�
-                if (this.CheckHadGatewayInWifi(listRealWay) == false)
-                {
-                    //绗簩閬撳潕锛氬湪杩滅▼鐨勬儏鍐典笅鍒锋柊缃戝叧鐨勫湪绾跨姸鎬�
-                    this.RefreshGatewayOnlineOnRemode(listRealWay);
-                }
+                //绗簩閬撳潕锛氬湪杩滅▼鐨勬儏鍐典笅鍒锋柊缃戝叧鐨勫湪绾跨姸鎬�
+                this.RefreshGatewayOnlineOnRemode(listRealWay);
             }
 
             //鍒锋柊缂撳瓨鐨勫湪绾挎爣璇�
@@ -845,7 +836,6 @@
                     continue;
                 }
                 this.dicGateway[gwID].GatewayOnlineFlage = zbway.GatewayOnlineFlage;
-                this.dicGateway[gwID].ReSave();
             }
         }
 
@@ -887,26 +877,11 @@
                     continue;
                 }
                 string strId = this.GetGatewayId(way);
-                if (dicDbGateway.ContainsKey(strId) == true //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
-                    && dicDbGateway[strId].MqttOnlineStatus == true //濡傛灉浜戠涓婇潰杩欎釜缃戝叧鏄湪绾跨殑
-                    )
+                if (dicDbGateway.ContainsKey(strId) == true) //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
                 {
-                    way.GatewayOnlineFlage = true;
+                    way.GatewayOnlineFlage = dicDbGateway[strId].MqttOnlineStatus;
                 }
             }
-        }
-
-        /// <summary>
-        /// 鏍囪瘑鎸囧畾缃戝叧涓轰笉鍦ㄧ嚎
-        /// </summary>
-        /// <param name="zbGateway"></param>
-        public void SetGatewayNotOnLineFlag(ZbGateway zbGateway)
-        {
-            if (zbGateway == null)
-            {
-                return;
-            }
-            zbGateway.GatewayOnlineFlage = false;
         }
 
         /// <summary>
@@ -1924,272 +1899,6 @@
             }
         }
 
-        #endregion
-
-        #region 鈻� 缃戝叧鐩戣___________________________
-
-        #region 鈻� 鍙橀噺澹版槑___________________________
-
-        /// <summary>
-        /// 褰撳墠鐨勭綉缁滆繛鎺ユā寮�
-        /// </summary>
-        private GatewayConnectMode nowGwConnectMode = GatewayConnectMode.None;
-        /// <summary>
-        /// 鏄惁瀛樺湪缃戝叧姝e湪鍗囩骇
-        /// </summary>
-        private bool hadGatewayUpdate = false;
-
-        #endregion
-
-        #region 鈻� 缃戝叧杩炴帴鏂瑰紡鍙樻洿___________________
-
-        /// <summary>
-        /// 褰撶綉鍏崇殑杩炴帴鏂瑰紡鏀瑰彉鏃�,妫�娴嬬綉鍏�,鐒跺悗鏄剧ず鐗规晥
-        /// </summary>
-        /// <param name="connectMode">缃戝叧鍙樻洿鍚庣殑杩炴帴鏂瑰紡</param>
-        public void CheckGatewayByConnectChanged(GatewayConnectMode connectMode)
-        {
-            if (this.nowGwConnectMode == connectMode || this.hadGatewayUpdate == true)
-            {
-                //鐩稿悓鐨勮繛鎺ユā寮�,鎴栬�呮湁缃戝叧姝e湪鍗囩骇,鍒欎笉闇�瑕佹搷浣�
-                return;
-            }
-
-            //娌℃湁缃戠粶
-            if (connectMode == GatewayConnectMode.NoLine)
-            {
-                nowGwConnectMode = GatewayConnectMode.NoLine;
-                //鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-            }
-            //鍙互鍙�4G
-            else if (connectMode == GatewayConnectMode.Remote)
-            {
-                nowGwConnectMode = GatewayConnectMode.Remote;
-                //鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-                this.CheckGatewayStatuByRemote();
-            }
-            //WIFI
-            else if (connectMode == GatewayConnectMode.WIFI)
-            {
-                nowGwConnectMode = GatewayConnectMode.WIFI;
-                //鍦╓IFI鐨勬潯浠朵笅锛屾鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-                this.CheckGatewayStatuByWIFI();
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 妫�鏌ョ綉鍏�(WIFI)_____________________
-
-        /// <summary>
-        /// 鍦╓IFI鐨勬潯浠朵笅锛屾鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-        /// </summary>
-        private void CheckGatewayStatuByWIFI()
-        {
-            if (this.dicGateway.Count == 0)
-            {
-                //濡傛灉鏈湴閮芥病鏈夌綉鍏崇殑璇濓紝涓嶉渶瑕佸鐞�
-                return;
-            }
-
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                var dicStatu = this.GetNowOnlineStatuBeforeCheck();
-                //绛変釜3绉掞紝鍑嗗涓�涓�
-                System.Threading.Thread.Sleep(3000);
-                if (nowGwConnectMode != GatewayConnectMode.WIFI)
-                {
-                    //缃戠粶涓存椂鍙樻洿锛燂紵
-                    return;
-                }
-
-                //浠庣綉鍏宠幏鍙栧叏閮ㄧ殑缃戝叧
-                List<ZbGateway> list = this.GetAllGatewayFromGateway();
-                foreach (var way in list)
-                {
-                    string gwId = this.GetGatewayId(way);
-                    if (this.dicGateway.ContainsKey(gwId) == true)
-                    {
-                        //鍒锋柊涓�涓嬬紦瀛�
-                        this.dicGateway[gwId].GatewayOnlineFlage = way.GatewayOnlineFlage;
-                    }
-                    if (this.CheckGatewayOnlineByFlag(way) == true)
-                    {
-                        //缃戝叧鍦ㄧ嚎
-                        dicStatu[gwId] = true;
-                    }
-                }
-                //灏嗗彉鍖栫殑缃戝叧鎺ㄩ�佸埌鐣岄潰涓�
-                this.PushGatewayOnlineStatuToForm(dicStatu);
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 妫�鏌ョ綉鍏�(4G)_______________________
-
-        /// <summary>
-        /// 鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-        /// </summary>
-        private void CheckGatewayStatuByRemote()
-        {
-            if (this.dicGateway.Count == 0)
-            {
-                //濡傛灉鏈湴閮芥病鏈夌綉鍏崇殑璇濓紝涓嶉渶瑕佸鐞�
-                return;
-            }
-
-            HdlThreadLogic.Current.RunThread(() =>
-            {
-                //鍏堣幏鍙栫幇鍦ㄥ叏閮ㄧ殑缃戝叧锛屽垵鏈熷�よ缃负涓嶅湪绾�
-                var dicStatu = this.GetNowOnlineStatuBeforeCheck();
-
-                //鑾峰彇浜戠涓婇潰鐨勭綉鍏�
-                Dictionary<string, GatewayResult> dicDbGateway = HdlGatewayLogic.Current.GetGateWayListFromDataBase();
-                if (nowGwConnectMode != GatewayConnectMode.Remote || dicDbGateway == null)
-                {
-                    //缃戠粶涓存椂鍙樻洿锛燂紵
-                    return;
-                }
-
-                bool hadOnline = false;
-                lock (dicGateway)
-                {
-                    foreach (var way in this.dicGateway.Values)
-                    {
-                        //寰幆澶勭悊鏈湴鍏ㄩ儴鐨勭綉鍏冲垪琛�
-                        string gwId = this.GetGatewayId(way);
-                        if (dicDbGateway.ContainsKey(gwId) == true//濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
-                            && dicDbGateway[gwId].MqttOnlineStatus == true//濡傛灉浜戠涓婇潰杩欎釜缃戝叧鏄湪绾跨殑
-                            )
-                        {
-                            dicGateway[gwId].GatewayOnlineFlage = true;
-                            //瀹冩槸鍦ㄧ嚎鐨�
-                            dicStatu[gwId] = true;
-                            hadOnline = true;
-                        }
-                    }
-                }
-
-                //灏嗗彉鍖栫殑缃戝叧鎺ㄩ�佸埌鐣岄潰涓�
-                this.PushGatewayOnlineStatuToForm(dicStatu);
-
-                //濡傛灉娌℃湁缃戝叧鍦ㄧ嚎
-                if (hadOnline == false)
-                {
-                    //杩滅▼杩炴帴瓒呮椂,娌℃湁缃戝叧鍦ㄧ嚎
-                    string msg = Language.StringByID(R.MyInternationalizationString.uRemoteTimeOutAndNotGatewaiOnline);
-                    //this.ShowTipMsg(msg);
-                }
-            });
-        }
-
-        #endregion
-
-        #region 鈻� 妫�鏌ョ綉鍏�(鏃犵綉缁�)___________________
-
-        /// <summary>
-        /// 鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��(缃戠粶鍙樻洿鏃惰Е鍙�)
-        /// </summary>
-        private void CheckGatewayStatuByNotNet()
-        {
-            //褰撳墠鏃犵綉缁滆繛鎺�,璇风‘璁ょ綉缁�
-            string msg = Language.StringByID(R.MyInternationalizationString.uNowIsDonotNetworkAndCheckNetwork);
-            this.ShowTipMsg(msg);
-        }
-
-        #endregion
-
-        #region 鈻� 缃戝叧鎺ㄩ�乢__________________________
-
-        /// <summary>
-        /// 灏嗗彉鍖栫殑缃戝叧鎺ㄩ�佸埌鐣岄潰涓�
-        /// </summary>
-        /// <param name="dicStatu"></param>
-        private void PushGatewayOnlineStatuToForm(Dictionary<string, bool> dicStatu)
-        {
-            List<ZbGateway> listChange = new List<ZbGateway>();
-            List<bool> listChangeStatu = new List<bool>();
-            foreach (string gwid in dicStatu.Keys)
-            {
-                //缃戝叧涓嶅锛岀洿鎺ユ帹閫�,涓嶅垽鏂槸鍚︽敼鍙樹簡
-                ZbGateway zbGateway = this.GetLocalGateway(gwid);
-                if (zbGateway != null)
-                {
-                    listChange.Add(zbGateway);
-                    listChangeStatu.Add(dicStatu[gwid]);
-
-                    zbGateway.GatewayOnlineFlage = dicStatu[gwid];
-                }
-            }
-
-            if (listChange.Count == 0)
-            {
-                return;
-            }
-            //淇濆瓨褰撳墠婵�娲荤殑鐣岄潰ID
-            var listId = new List<string>();
-            listId.AddRange(UserCenterResourse.listActionFormId);
-            for (int i = 0; i < listId.Count; i++)
-            {
-                if (UserCenterResourse.DicActionForm.ContainsKey(listId[i]) == false)
-                {
-                    continue;
-                }
-                //缃戝叧鍦ㄧ嚎鎺ㄩ��
-                for (int j = 0; j < listChange.Count; j++)
-                {
-                    UserCenterResourse.DicActionForm[listId[i]]?.GatewayOnlinePush(listChange[j], listChangeStatu[j]);
-                }
-            }
-        }
-
-        #endregion
-
-        #region 鈻� 涓�鑸柟娉昣__________________________
-
-        /// <summary>
-        /// 璁剧疆瀛樺湪缃戝叧姝e湪鍗囩骇鐨勬爣璇�
-        /// </summary>
-        /// <param name="update">鏄惁鏈夌綉鍏冲湪鍗囩骇</param>
-        public void SetHadGatewayUpdateFlage(bool update)
-        {
-            this.hadGatewayUpdate = update;
-        }
-
-        /// <summary>
-        /// 鍦ㄧ綉缁滆繛鎺ュ彉鏇翠箣鍚庯紝缃戝叧杩炴帴妫�娴嬩箣鍓嶏紝璁剧疆鍏ㄩ儴缃戝叧涓虹绾跨姸鎬�(浠ユ湰鍦扮綉鍏充负鏍囧噯)
-        /// </summary>
-        /// <returns></returns>
-        private Dictionary<string, bool> GetNowOnlineStatuBeforeCheck()
-        {
-            //鍏堣幏鍙栫幇鍦ㄥ叏閮ㄧ殑缃戝叧
-            List<ZbGateway> listOldGateway = this.GetAllGatewayFromGateway();
-            var dicOldZb = new Dictionary<string, ZbGateway>();
-            foreach (var zb in listOldGateway)
-            {
-                string gwID = this.GetGatewayId(zb);
-                dicOldZb[gwID] = zb;
-            }
-
-            var dicStatu = new Dictionary<string, bool>();
-            lock (dicGateway)
-            {
-                foreach (string gwId in this.dicGateway.Keys)
-                {
-                    if (dicOldZb.ContainsKey(gwId) == true)
-                    {
-                        //鏍囪涓轰笉鍦ㄧ嚎
-                        this.SetGatewayNotOnLineFlag(dicOldZb[gwId]);
-                    }
-                    dicStatu[gwId] = false;
-                }
-            }
-            return dicStatu;
-        }
-
-        #endregion
-
         #endregion
 
         #region 鈻� 浠庝簯绔幏鍙栧叏閮ㄧ綉鍏冲垪琛↖D___________
@@ -2477,253 +2186,208 @@
 
         #endregion
 
-        #region 鈻� 鎭㈠缃戝叧___________________________
+        #region 鈻� 缃戝叧鐩戣___________________________
 
         /// <summary>
-        /// 鎭㈠缃戝叧閰嶇疆
+        /// 褰撳墠鐨勭綉缁滆繛鎺ユā寮�
         /// </summary>
-        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
-        /// <param name="listGatewayFile">缃戝叧閲岄潰鎷ユ湁鐨勬枃浠�</param>
-        /// <param name="backDirectory">浜戠涓嬭浇鐨勫浠芥暟鎹殑鏂囦欢澶瑰悕瀛�</param>
-        /// <returns></returns>
-        public async Task<bool> RecoverGatewaySettion(ZbGateway zbGateway, List<string> listGatewayFile, string backDirectory)
+        private GatewayConnectMode nowGwConnectMode = GatewayConnectMode.None;
+        /// <summary>
+        /// 鏄惁瀛樺湪缃戝叧姝e湪鍗囩骇
+        /// </summary>
+        private bool hadGatewayUpdate = false;
+
+        /// <summary>
+        /// 褰撶綉鍏崇殑杩炴帴鏂瑰紡鏀瑰彉鏃�,璁板綍褰撳墠鐨勮繛鎺ユ柟寮�
+        /// </summary>
+        /// <param name="connectMode">缃戝叧鍙樻洿鍚庣殑杩炴帴鏂瑰紡</param>
+        public void CheckGatewayByConnectChanged(GatewayConnectMode connectMode)
         {
-            //鑾峰彇浠庝簯绔偅閲屽緱鏉ョ殑鍏ㄩ儴鏂囦欢
-            var listBackFile = HdlAutoBackupLogic.GetFileFromDirectory(UserCenterLogic.CombinePath(backDirectory));
-            listBackFile.Sort();
-            //娣诲姞闄勫姞鎯呮姤:杩樺師璁惧閰嶇疆
-            ProgressBar.SetAppendText(Language.StringByID(R.MyInternationalizationString.uRecoverDeviceSettion));
-            ProgressBar.SetMaxValue(listBackFile.Count);
-            ProgressBar.Show();
-
-            var listSaveFile = new HashSet<string>();
-            foreach (string fileName in listBackFile)
-            {
-                if (fileName.Length < 10 || fileName.StartsWith("Device_") == false)
-                {
-                    //涓嶆槸璁惧澶囦唤鏂囦欢
-                    continue;
-                }
-                //鎭㈠璁惧閰嶇疆
-                var result = await this.RecoverDeviceSettion(backDirectory, fileName);
-                if (result == -1)
-                {
-                    ProgressBar.Close();
-                    return false;
-                }
-                if (result == 1 || result == 2)
-                {
-                    listSaveFile.Add(fileName);
-                }
-
-                ProgressBar.SetValue(1);
-                listGatewayFile.Remove(fileName);
-            }
-            //娣诲姞闄勫姞鎯呮姤:瑕嗙洊缃戝叧澶囦唤涓�
-            ProgressBar.SetAppendText(Language.StringByID(R.MyInternationalizationString.uGatewayBackupDataIsCovering));
-            foreach (var file in listSaveFile)
-            {
-                //鍒涘缓鏂囦欢瀵硅薄
-                var result = await zbGateway.CreateFileAsync(file);
-                if (result == null || result.Result != 0)
-                {
-                    Application.RunOnMainThread(() =>
-                    {
-                        //瑕嗙洊缃戝叧澶囦唤澶辫触
-                        string msg = Language.StringByID(R.MyInternationalizationString.uCoverGatewayBackupDataFail);
-                        var control = new ShowMsgControl(ShowMsgType.Tip, msg);
-                        control.Show();
-                    });
-                    ProgressBar.Close();
-                    return false;
-                }
-                //鍙戦�佹暟鎹祦
-                var byteData = Shared.Common.Global.ReadFileByDirectory(backDirectory, file);
-                var result2 = await zbGateway.SendFileAsync(byteData);
-                if (result2 == null || result2.Result != 0)
-                {
-                    Application.RunOnMainThread(() =>
-                    {
-                        //瑕嗙洊缃戝叧澶囦唤澶辫触
-                        string msg = Language.StringByID(R.MyInternationalizationString.uCoverGatewayBackupDataFail);
-                        var control = new ShowMsgControl(ShowMsgType.Tip, msg);
-                        control.Show();
-                    });
-                    ProgressBar.Close();
-                    return false;
-                }
-            }
-            //鍒犻櫎澶氫綑鐨勬枃浠�
-            foreach (var deleteFile in listGatewayFile)
-            {
-                if (deleteFile.Length > 12)
-                {
-                    string deviceFileName = deleteFile.Substring(5);
-                    if (deviceFileName.StartsWith("Device_") == false)
-                    {
-                        //涓嶆槸璁惧鏂囦欢
-                        continue;
-                    }
-                    string[] strArry = deviceFileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
-                    if (strArry.Length < 4 || listSaveFile.Contains(deleteFile) == true)
-                    {
-                        //鎴戜篃涓嶇煡閬撳畠鏄粈涔堟枃浠�,鎴栬�呰繖涓枃浠舵槸瑕嗙洊鐨�
-                        continue;
-                    }
-                    //杩欎釜鎴栬鍙互涓嶇悊浠�
-                    var result = await zbGateway.DelFileOrDirAsync("/etc/hdlDat/" + deleteFile);
-                }
-            }
-            ProgressBar.Close();
-
-            return true;
+            this.nowGwConnectMode = connectMode;
         }
 
         /// <summary>
-        /// 鎭㈠璁惧閰嶇疆
+        /// 寮�鍚娴嬬綉鍏冲湪绾跨姸鎬佺殑绾跨▼(姝ゆ柟娉曟槸缁欒澶囧垪琛ㄧ晫闈㈢敤鐨�)
         /// </summary>
-        /// <param name="backDirectory">浜戠涓嬭浇鐨勫浠芥暟鎹殑鏂囦欢澶瑰悕瀛�</param>
-        /// <param name="backFileName">缃戝叧鐨勮澶囧浠藉悕瀛�</param>
-        /// <returns></returns>
-        private async Task<int> RecoverDeviceSettion(string backDirectory, string backFileName)
+        /// <param name="frameLayout">鐣岄潰瀵硅薄</param>
+        public void StartCheckGatewayOnlineThread(EditorCommonForm frameLayout)
         {
-            string deviceFileName = backFileName.Substring(0, backFileName.Length - 5);
-            string[] strArry = deviceFileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
-            if (strArry.Length < 4)
+            HdlThreadLogic.Current.RunThread(() =>
             {
-                //鎴戜篃涓嶇煡閬撳畠鏄粈涔堟枃浠�
-                return 0;
-            }
-            var device = Common.LocalDevice.Current.GetDevice(strArry[2], Convert.ToInt32(strArry[3]));
-            if (device == null)
-            {
-                //杩欎釜璁惧涓嶈浜�
-                return 2;
-            }
-
-            var byteData = Shared.Common.Global.ReadFileByDirectory(backDirectory, backFileName);
-            var backType = (GatewayBackupEnum)Convert.ToInt32(backFileName.Substring(backFileName.Length - 5, 5));
-
-            bool result = true;
-            if (backType == GatewayBackupEnum.AMac鍚嶇О)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await Common.LocalDevice.Current.ReMacName(new List<CommonDevice>() { device }, recoverData);
-            }
-            else if (backType == GatewayBackupEnum.A绔偣鍚嶇О)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await Common.LocalDevice.Current.ReName(device, recoverData);
-            }
-            else if (backType == GatewayBackupEnum.APir鐏厜閰嶇疆)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.ConfigureParamates>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDevicePirSensorLogic.Current.SetPirSensorSettion((IASZone)device, recoverData);
-            }
-            else if (backType == GatewayBackupEnum.A骞叉帴鐐归鑹茶皟鑺�)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel.KeyColorData>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDevicePanelLogic.Current.SetPanelEpointColorInfo((Panel)device, recoverData);
-            }
-            else if (backType == GatewayBackupEnum.A骞叉帴鐐逛寒搴﹁皟鑺�)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(System.Text.Encoding.UTF8.GetString(byteData));
-                int directionsLevel = Convert.ToInt32(recoverData["directionsLevel"]);
-                int backlightLevel = Convert.ToInt32(recoverData["backlightLevel"]);
-                result = await HdlDevicePanelLogic.Current.SetDeviceLightSettion((Panel)device, directionsLevel, backlightLevel);
-            }
-            else if (backType == GatewayBackupEnum.A骞叉帴鐐硅妭鑳芥ā寮�)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(System.Text.Encoding.UTF8.GetString(byteData));
-                bool modeEnable = Convert.ToBoolean(recoverData["modeEnable"]);
-                int modeTime = Convert.ToInt32(recoverData["modeTime"]);
-                int level = Convert.ToInt32(recoverData["level"]);
-                result = await HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode((Panel)device, modeEnable, modeTime, level);
-            }
-            else if (backType == GatewayBackupEnum.A骞叉帴鐐圭涓夌骇鍒鏈夊睘鎬�)
-            {
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDevicePanelLogic.Current.EditorDryContactThirdFunction((Panel)device, recoverData);
-            }
-            else if (backType == GatewayBackupEnum.A绐楀笜鏂瑰悜)
-            {
-                var statu = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDeviceCurtainLogic.Current.SetCurtainDirection((Rollershade)device, statu);
-            }
-            else if (backType == GatewayBackupEnum.A绐楀笜鎵嬫媺鎺у埗)
-            {
-                var statu = Newtonsoft.Json.JsonConvert.DeserializeObject<bool>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDeviceCurtainLogic.Current.SetHandPullControl((Rollershade)device, statu);
-            }
-            else if (backType == GatewayBackupEnum.A绐楀笜涓婁笅闄愪綅)
-            {
-                var curtainDevice = (Rollershade)device;
-                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(System.Text.Encoding.UTF8.GetString(byteData));
-                int upLimit = Convert.ToInt32(recoverData["upLimit"]);
-                int downLimit = Convert.ToInt32(recoverData["downLimit"]);
-                //鍏堥噸缃獥甯�
-                result = await HdlDeviceCurtainLogic.Current.RestoreCurtain(curtainDevice);
-                if (result == false) { return -1; }
-                await Task.Delay(5000);
-                //閲嶇疆涓婇檺浣�
-                result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.UpLimit);
-                if (result == false) { return -1; }
-                //灏嗙獥甯樿皟鏁村埌鎸囧畾鐧惧垎姣�
-                curtainDevice.WcdGoToTiltValue(upLimit);
-                await Task.Delay(3000);
-                //鎵ц纭鍙婅鐩栫獥甯橀檺浣嶇偣
-                result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.UpLimit, -1, -1);
-                if (result == false) { return -1; }
-
-                await Task.Delay(2000);
-                //閲嶇疆涓嬮檺浣�
-                result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.DownLimit);
-                if (result == false) { return -1; }
-                //灏嗙獥甯樿皟鏁村埌鎸囧畾鐧惧垎姣�
-                curtainDevice.WcdGoToTiltValue(downLimit);
-                await Task.Delay(3000);
-                //鎵ц纭鍙婅鐩栫獥甯橀檺浣嶇偣
-                result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.DownLimit, -1, -1);
-            }
-            else if (backType == GatewayBackupEnum.A绌鸿皟鑷畾涔夋ā寮�)
-            {
-                var data = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(System.Text.Encoding.UTF8.GetString(byteData));
-                result = await HdlDeviceAirConditionerLogic.Current.SetAcModeSupport((AC)device, data);
-                if (result == true)
+                int waitCount = 0;
+                //濡傛灉浣忓畢ID鍙樻洿浜�,鍒欎笉鍐嶅鐞�
+                while (frameLayout.Parent != null)
                 {
-                    //杞崲涓轰簩杩涘埗
-                    var value = Convert.ToString(data, 2).PadLeft(16, '0');
-                    //杩欎簲涓缃槸鏀惧湪鍚庨潰鐨�
-                    var fixValue = value.Substring(0, value.Length - 5);
-                    var reportValue = value.Substring(fixValue.Length);
-                    //鏇存敼缂撳瓨
-                    for (int i = 0; i < reportValue.Length; i++)
+                    System.Threading.Thread.Sleep(1000);
+                    if (this.hadGatewayUpdate == true)
                     {
-                        ((AC)device).listSupportMode[i] = Convert.ToInt32(reportValue[i]);
+                        //缃戝叧姝e湪鍗囩骇,涓嶉渶瑕佹搷浣�
+                        continue;
                     }
-                    device.ReSave();
+
+                    waitCount++;
+                    if (this.nowGwConnectMode == GatewayConnectMode.Remote)
+                    {
+                        //杩滅▼姣�10绉掓娴嬩竴娆�
+                        if (waitCount < 10) { continue; }
+                    }
+                    else if (this.nowGwConnectMode == GatewayConnectMode.WIFI)
+                    {
+                        //灞�鍩熺綉姣�3绉掓娴嬩竴娆�
+                        if (waitCount < 3) { continue; }
+                    }
+                    waitCount = 0;
+
+                    //鑾峰彇鍓嶅洖缃戝叧鐨勫湪绾跨姸鎬�
+                    Dictionary<string, bool> dicOldOnline = this.GetOldGatewayOnlineStatu();
+                    if (dicOldOnline == null)
+                    {
+                        //鍒欎笉澶勭悊
+                        continue;
+                    }
+                    //鍙互鍙�4G
+                    if (this.nowGwConnectMode == GatewayConnectMode.Remote)
+                    {
+                        //鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��
+                        this.CheckGatewayStatuByRemote(dicOldOnline);
+                    }
+                    //WIFI
+                    else if (this.nowGwConnectMode == GatewayConnectMode.WIFI)
+                    {
+                        //鍦╓IFI鐨勬潯浠朵笅锛屾鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��
+                        this.CheckGatewayStatuByWIFI(dicOldOnline);
+                    }
+                }
+            }, ShowErrorMode.NO);
+        }
+
+        /// <summary>
+        /// 鍦╓IFI鐨勬潯浠朵笅锛屾鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��
+        /// </summary>
+        private void CheckGatewayStatuByWIFI(Dictionary<string, bool> dicOldOnline)
+        {
+            //浠庣綉鍏宠幏鍙栧叏閮ㄧ殑缃戝叧
+            List<ZbGateway> list = this.GetAllGatewayFromGateway();
+            foreach (var way in list)
+            {
+                //灏嗘爣璇嗙疆涓篺alse
+                way.GatewayOnlineFlage = false;
+            }
+            //绛変釜2绉�
+            System.Threading.Thread.Sleep(2000);
+
+            foreach (var way in list)
+            {
+                string gwId = this.GetGatewayId(way);
+                if (dicOldOnline.ContainsKey(gwId) == true)
+                {
+                    //缃戝叧涔熶笉澶�,鐩存帴鎺ㄩ�佸惂
+                    this.PushGatewayOnlineStatuToForm(gwId, way.GatewayOnlineFlage);
+                }
+                else
+                {
+                    //娌℃湁鍖呭惈,榛樿涓篺alse
+                    this.PushGatewayOnlineStatuToForm(gwId, false);
                 }
             }
-            return result == true ? 1 : -1;
+        }
+
+        /// <summary>
+        /// 鍦ㄨ繙绋嬬殑鏉′欢涓嬶紝妫�鏌ョ綉鍏崇殑鍦ㄧ嚎鐘舵��
+        /// </summary>
+        private void CheckGatewayStatuByRemote(Dictionary<string, bool> dicOldOnline)
+        {
+            //鑾峰彇浜戠涓婇潰鐨勭綉鍏�
+            Dictionary<string, GatewayResult> dicDbGateway = HdlGatewayLogic.Current.GetGateWayListFromDataBase();
+            if (dicDbGateway == null)
+            {
+                //濡傛灉缃戠粶涓嶉��,鍒欎篃寰�涓嬭蛋
+                dicDbGateway = new Dictionary<string, GatewayResult>();
+            }
+
+            foreach (var gwId in dicOldOnline.Keys)
+            {
+                //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
+                if (dicDbGateway.ContainsKey(gwId) == true)
+                {
+                    //缃戝叧涔熶笉澶�,鐩存帴鎺ㄩ��
+                    this.PushGatewayOnlineStatuToForm(gwId, dicDbGateway[gwId].MqttOnlineStatus);
+                }
+                else
+                {
+                    //浜戠涓嶅寘鍚殑,褰撲笉鍦ㄧ嚎澶勭悊
+                    this.PushGatewayOnlineStatuToForm(gwId, false);
+                }
+            }
+
+           
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍓嶅洖缃戝叧鐨勫湪绾跨姸鎬�
+        /// </summary>
+        /// <returns></returns>
+        private Dictionary<string, bool> GetOldGatewayOnlineStatu()
+        {
+            if (this.dicGateway.Count == 0)
+            {
+                //娌℃湁缃戝叧,鍒欎笉澶勭悊
+                return null;
+            }
+
+            try
+            {
+                var dicOldOnline = new Dictionary<string, bool>();
+                //濡傛灉鍦ㄥ惊鐜殑杩囩▼涓�,鍔ㄤ簡閲岄潰鐨勪笢瑗�,鎶ラ敊鍒欎笉鐞嗗畠,涓嬩竴鍥炲悎
+                foreach (var zbway in this.dicGateway.Values)
+                {
+                    //鑾峰彇鍓嶅洖鐨勫湪绾跨姸鎬�
+                    string gwId = this.GetGatewayId(zbway);
+                    dicOldOnline[gwId] = zbway.GatewayOnlineFlage;
+                }
+                return dicOldOnline;
+            }
+            catch { return null; }
+        }
+
+        /// <summary>
+        /// 灏嗗彉鍖栫殑缃戝叧鎺ㄩ�佸埌鐣岄潰涓�
+        /// </summary>
+        /// <param name="gwId"></param>
+        /// <param name="online"></param>
+        private void PushGatewayOnlineStatuToForm(string gwId, bool online)
+        {
+            try
+            {
+                for (int i = 0; i < UserCenterResourse.listActionFormId.Count; i++)
+                {
+                    string formId = UserCenterResourse.listActionFormId[i];
+                    if (UserCenterResourse.DicActionForm.ContainsKey(formId) == false)
+                    {
+                        continue;
+                    }
+                    //缃戝叧鍦ㄧ嚎鎺ㄩ��
+                    var zbway = this.GetLocalGateway(gwId);
+                    zbway.GatewayOnlineFlage = online;
+
+                    UserCenterResourse.DicActionForm[formId]?.GatewayOnlinePush(zbway, online);
+                }
+            }
+            catch { }
+        }
+
+        /// <summary>
+        /// 璁剧疆瀛樺湪缃戝叧姝e湪鍗囩骇鐨勬爣璇�
+        /// </summary>
+        /// <param name="update">鏄惁鏈夌綉鍏冲湪鍗囩骇</param>
+        public void SetHadGatewayUpdateFlage(bool update)
+        {
+            this.hadGatewayUpdate = update;
         }
 
         #endregion
 
-        #region 鈻� 涓�鑸柟娉昣__________________________
-
-        /// <summary>
-        /// 寮瑰嚭缃戝叧涓嶅湪绾跨殑
-        /// </summary>
-        private void ShowGatewayNotOnlineMsg()
-        {
-            Application.RunOnMainThread(() =>
-            {
-                //缃戝叧杩炴帴澶辫触,璇风‘璁ょ綉缁�
-                string msg = Language.StringByID(R.MyInternationalizationString.uGatewayIsNotLinkAndCheckNetwork);
-                var control = new ShowMsgControl(ShowMsgType.Tip, msg);
-                control.Show();
-            });
-        }
+        #region 鈻� 涓�鑸柟娉昣__________________________
 
         /// <summary>
         /// 鏄剧ず閿欒淇℃伅绐楀彛

--
Gitblit v1.8.0