From f1c3921b08bb22ac6f5db22d620e01d7e8e5c49f Mon Sep 17 00:00:00 2001
From: WJC <wjc@hdlchina.com.cn>
Date: 星期一, 30 十二月 2019 13:32:33 +0800
Subject: [PATCH] 2019-12-30-1

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs |  326 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 204 insertions(+), 122 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
index 491eb05..ea5c735 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -117,10 +117,20 @@
             {
                 return;
             }
+
+            List<string> listBackupGwId = new List<string>();
+            var fileData = Global.ReadFileByDirectory(DirNameResourse.LocalMemoryDirectory, DirNameResourse.BackupGatewayIdFile);
+            if (fileData != null)
+            {
+                //鏂板锛氳櫧鐒舵鐜囦綆锛屼絾鏄‘瀹炲彂鐢熶簡銆傚鏋滄湁缃戠粶鏃讹紝App閲嶆柊缁戝畾璁板綍鐨勭綉鍏冲け璐ョ殑璇�
+                //涓嶅簲璇ュ垹闄ゅ畠
+                listBackupGwId = JsonConvert.DeserializeObject<List<string>>(System.Text.Encoding.UTF8.GetString(fileData));
+            }
+
             List<string> listDelete = new List<string>();
             foreach (var gatewayId in this.dicGateway.Keys)
             {
-                if (result.ContainsKey(gatewayId) == false)
+                if (result.ContainsKey(gatewayId) == false && listBackupGwId.Contains(gatewayId) == false)
                 {
                     //鏈湴瀛樺湪浜戠涓嶅瓨鍦ㄧ殑缃戝叧锛屽垯鍒犻櫎
                     listDelete.Add(gatewayId);
@@ -707,7 +717,7 @@
             //绉婚櫎
             ZbGateway.GateWayList.RemoveAll((obj) => this.GetGatewayId(obj) == zbGatewayID);
             //鏂紑mqtt杩炴帴
-            realWay.DisConnect("GD");
+            realWay.DisConnectLocalMqttClient("GD");
 
             return true;
         }
@@ -1043,14 +1053,14 @@
                 this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg));
                 return -1;
             }
-            ChannelIdInfo data = null;
+            int data = -1;
             Action<string, string> action = (topic, message) =>
             {
                 var gatewayID = topic.Split('/')[0];
                 if (topic == gatewayID + "/" + "ZbGw/GetChannel_Respon")
                 {
                     var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-                    data = Newtonsoft.Json.JsonConvert.DeserializeObject<ChannelIdInfo>(jobject["Data"].ToString());
+                    data = Convert.ToInt32(jobject["Data"]["Channel"].ToString());
                 }
             };
             realWay.Actions += action;
@@ -1059,34 +1069,22 @@
             realWay.Send("ZbGw/GetChannel", jObject.ToString());
 
             int TimeOut = 0;
-            while (data == null && TimeOut < 30)
+            while (data == -1 && TimeOut < 30)
             {
                 System.Threading.Thread.Sleep(100);
                 TimeOut++;
             }
 
             realWay.Actions -= action;
-            if (data == null)
+            if (data == -1)
             {
                 //鑾峰彇鍗忚皟鍣ㄤ俊閬撳け璐�
                 string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayChannelIdFail);
                 msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
                 this.ShowTipMsg(msg);
-                return -1;
             }
 
-            return data.Channel;
-        }
-
-        /// <summary>
-        /// 缃戝叧淇¢亾淇℃伅
-        /// </summary>
-        private class ChannelIdInfo
-        {
-            /// <summary>
-            /// 缃戝叧淇¢亾
-            /// </summary>
-            public int Channel = -1;
+            return data;
         }
 
         #endregion
@@ -1107,14 +1105,14 @@
                 this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg));
                 return null;
             }
-            CoordinatorMacInfo data = null;
+            string data = null;
             Action<string, string> action = (topic, message) =>
             {
                 var gatewayID = topic.Split('/')[0];
                 if (topic == gatewayID + "/" + "ZbGw/GetMac_Respon")
                 {
                     var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-                    data = Newtonsoft.Json.JsonConvert.DeserializeObject<CoordinatorMacInfo>(jobject["Data"].ToString());
+                    data = jobject["Data"]["MacAddr"].ToString();
                 }
             };
             realWay.Actions += action;
@@ -1136,21 +1134,9 @@
                 string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayCoordinatorMacFail);
                 msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
                 this.ShowTipMsg(msg);
-                return null;
             }
 
-            return data.MacAddr;
-        }
-
-        /// <summary>
-        /// 缃戝叧鍗忚皟鍣∕ac淇℃伅
-        /// </summary>
-        private class CoordinatorMacInfo
-        {
-            /// <summary>
-            /// 璋冨櫒Mac
-            /// </summary>
-            public string MacAddr = string.Empty;
+            return data;
         }
 
         #endregion
@@ -1171,14 +1157,14 @@
                 this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg));
                 return -1;
             }
-            PanIdInfo data = null;
+            int panId = -1;
             Action<string, string> action = (topic, message) =>
             {
                 var gatewayID = topic.Split('/')[0];
                 if (topic == gatewayID + "/" + "ZbGw/GetPanId_Respon")
                 {
                     var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-                    data = Newtonsoft.Json.JsonConvert.DeserializeObject<PanIdInfo>(jobject["Data"].ToString());
+                    panId = Convert.ToInt32(jobject["Data"]["PANID"].ToString());
                 }
             };
             realWay.Actions += action;
@@ -1187,34 +1173,128 @@
             realWay.Send("ZbGw/GetPanId", jObject.ToString());
 
             int TimeOut = 0;
-            while (data == null && TimeOut < 30)
+            while (panId == -1 && TimeOut < 30)
             {
                 System.Threading.Thread.Sleep(100);
                 TimeOut++;
             }
 
             realWay.Actions -= action;
-            if (data == null)
+            if (panId == -1)
             {
                 //鑾峰彇鍗忚皟鍣≒anID澶辫触
                 string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayPanIDFail);
                 msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
                 this.ShowTipMsg(msg);
-                return -1;
             }
 
-            return data.PANID;
+            return panId;
+        }
+
+        #endregion
+
+        #region 鈻� 缃戝叧鑷姩澶囦唤璁剧疆___________________
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧鑷姩澶囦唤璁剧疆(-1:寮傚父 0:鍏抽棴 1:鎵撳紑)
+        /// </summary>
+        /// <param name="zbGateway"></param>
+        /// <returns></returns>
+        public int GetGatewayAutoBackupStatu(ZbGateway zbGateway)
+        {
+            ZbGateway realWay = null;
+            if (this.GetRealGateway(ref realWay, zbGateway) == false)
+            {
+                //閿欒:缃戝叧瀵硅薄涓㈠け
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg));
+                return -1;
+            }
+            int statu = -1;
+            Action<string, string> action = (topic, message) =>
+            {
+                var gatewayID = topic.Split('/')[0];
+                if (topic == gatewayID + "/GatewayAutoBackup_Respon")
+                {
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+                    statu = Convert.ToInt32(jobject["Data"]["AutoBackupStatus"].ToString());
+                }
+            };
+            realWay.Actions += action;
+
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 6205 } };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AutoBackup", 1 } };
+            jObject.Add("Data", data);
+            realWay.Send("GatewayAutoBackup", jObject.ToString());
+
+            int TimeOut = 0;
+            while (statu == -1 && TimeOut < 60)
+            {
+                System.Threading.Thread.Sleep(100);
+                TimeOut++;
+            }
+
+            realWay.Actions -= action;
+            if (statu == -1)
+            {
+                //鑾峰彇缃戝叧鑷姩澶囦唤璁剧疆澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uGetGatewayAutoBackupStatuFail);
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
+                this.ShowTipMsg(msg);
+            }
+
+            return statu;
         }
 
         /// <summary>
-        /// 缃戝叧PanId淇℃伅
+        /// 璁剧疆缃戝叧鑷姩澶囦唤璁剧疆
         /// </summary>
-        private class PanIdInfo
+        /// <param name="zbGateway"></param>
+        /// <param name="statu"></param>
+        /// <returns></returns>
+        public bool SetGatewayAutoBackupStatu(ZbGateway zbGateway, bool statu)
         {
-            /// <summary>
-            /// PanId
-            /// </summary>
-            public int PANID = -1;
+            ZbGateway realWay = null;
+            if (this.GetRealGateway(ref realWay, zbGateway) == false)
+            {
+                //閿欒:缃戝叧瀵硅薄涓㈠け
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg));
+                return false;
+            }
+            int result = -1;
+            Action<string, string> action = (topic, message) =>
+            {
+                var gatewayID = topic.Split('/')[0];
+                if (topic == gatewayID + "/GatewayAutoBackup_Respon")
+                {
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+                    result = Convert.ToInt32(jobject["Data"]["AutoBackupStatus"].ToString());
+                }
+            };
+            realWay.Actions += action;
+
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 6205 } };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AutoBackup", statu == true ? 2 : 3 } };
+            jObject.Add("Data", data);
+            realWay.Send("GatewayAutoBackup", jObject.ToString());
+
+            int TimeOut = 0;
+            while (result == -1 && TimeOut < 60)
+            {
+                System.Threading.Thread.Sleep(100);
+                TimeOut++;
+            }
+
+            realWay.Actions -= action;
+            if (result == -1)
+            {
+                //璁剧疆缃戝叧鑷姩澶囦唤澶辫触
+                string msg = Language.StringByID(R.MyInternationalizationString.uSetGatewayAutoBackupStatuFail);
+                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂");
+                this.ShowTipMsg(msg);
+                return false;
+            }
+
+            return true;
         }
 
         #endregion
@@ -1248,7 +1328,7 @@
             }
             else
             {
-                //鑾峰彇鏈湴鐨勫睘鎬�
+                //鑾峰彇鏈湴鐨勫睘鎬� 
                 objValue = localWay.getGwInfo.GetType().InvokeMember(attributeName, System.Reflection.BindingFlags.GetField, null, localWay.getGwInfo, null);
             }
 
@@ -1486,7 +1566,7 @@
             //鏈�鍚庡啀鏂紑mqtt杩炴帴
             for (int i = 0; i < list.Count; i++)
             {
-                list[i].DisConnect("G");
+                list[i].DisConnectLocalMqttClient("G");
             }
             list.Clear();
         }
@@ -1763,50 +1843,6 @@
             realWay.Send("GwLinuxLocate_Respon", jObject.ToString());
         }
 
-        #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();
-            });
-        }
-
-        /// <summary>
-        /// 鏄剧ず閿欒淇℃伅绐楀彛
-        /// </summary>
-        /// <param name="msg"></param>
-        private void ShowErrorMsg(string msg)
-        {
-            Application.RunOnMainThread(() =>
-            {
-                var contr = new ShowMsgControl(ShowMsgType.Error, msg);
-                contr.Show();
-            });
-        }
-
-        /// <summary>
-        /// 鏄剧ずTip淇℃伅绐楀彛
-        /// </summary>
-        /// <param name="msg"></param>
-        private void ShowTipMsg(string msg)
-        {
-            Application.RunOnMainThread(() =>
-            {
-                var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
-                contr.Show();
-            });
-        }
-
         #endregion
 
         #region 鈻� 缃戝叧鐩戣___________________________
@@ -2010,17 +2046,19 @@
             {
                 return;
             }
-            //鑾峰彇褰撳墠鎺ュ彈鍦ㄧ嚎鐘舵�佹帹閫佺殑鐣岄潰
-            var listForm = new List<CommonFormBase>();
-            listForm.AddRange(UserCenterResourse.listGatewayOnlinePushForm);
-            if (listForm.Count > 0)
+            //淇濆瓨褰撳墠婵�娲荤殑鐣岄潰ID
+            var listId = new List<string>();
+            listId.AddRange(UserCenterResourse.listActionFormId);
+            for (int i = 0; i < listId.Count; i++)
             {
-                for (int i = 0; i < listChange.Count; i++)
+                if (UserCenterResourse.DicActionForm.ContainsKey(listId[i]) == false)
                 {
-                    foreach (var form in listForm)
-                    {
-                        form?.GatewayOnlinePush(listChange[i], listChangeStatu[i]);
-                    }
+                    continue;
+                }
+                //缃戝叧鍦ㄧ嚎鎺ㄩ��
+                for (int j = 0; j < listChange.Count; j++)
+                {
+                    UserCenterResourse.DicActionForm[listId[i]]?.GatewayOnlinePush(listChange[j], listChangeStatu[j]);
                 }
             }
         }
@@ -2317,27 +2355,27 @@
         /// <returns></returns>
         public async Task<bool> UpLoadDeviceBackupDataToGateway(CommonDevice device, GatewayBackupEnum backupEnum, object upLaodData)
         {
-            ZbGateway realWay = null;
-            if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
-            {
-                //娌℃湁鎵惧埌鐪熷疄鐗╃悊缃戝叧
-                return false;
-            }
-            string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
-            //鍒涘缓鏂囦欢瀵硅薄
-            var result = await realWay.CreateFileAsync(fileName);
-            if (result == null || result.Result != 0)
-            {
-                return false;
-            }
-            //鍙戦�佹暟鎹祦
-            var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
-            var byteData = System.Text.Encoding.UTF8.GetBytes(data);
-            var result2 = await realWay.SendFileAsync(byteData);
-            if (result2 == null || result2.Result != 0)
-            {
-                return false;
-            }
+            //ZbGateway realWay = null;
+            //if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
+            //{
+            //    //娌℃湁鎵惧埌鐪熷疄鐗╃悊缃戝叧
+            //    return false;
+            //}
+            //string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
+            ////鍒涘缓鏂囦欢瀵硅薄
+            //var result = await realWay.CreateFileAsync(fileName);
+            //if (result == null || result.Result != 0)
+            //{
+            //    return false;
+            //}
+            ////鍙戦�佹暟鎹祦
+            //var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
+            //var byteData = System.Text.Encoding.UTF8.GetBytes(data);
+            //var result2 = await realWay.SendFileAsync(byteData);
+            //if (result2 == null || result2.Result != 0)
+            //{
+            //    return false;
+            //}
             return true;
         }
 
@@ -2574,5 +2612,49 @@
         }
 
         #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();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ず閿欒淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowErrorMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new ShowMsgControl(ShowMsgType.Error, msg);
+                contr.Show();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ずTip淇℃伅绐楀彛
+        /// </summary>
+        /// <param name="msg"></param>
+        private void ShowTipMsg(string msg)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
+                contr.Show();
+            });
+        }
+
+        #endregion
     }
 }

--
Gitblit v1.8.0