From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期五, 10 七月 2020 10:52:13 +0800
Subject: [PATCH] 2020-07-10-01

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs |  486 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 253 insertions(+), 233 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
index 672bc3f..21a9022 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -69,8 +69,7 @@
                         continue;
                     }
                     //娣诲姞缂撳瓨
-                    string gwID = HdlGatewayLogic.Current.GetGatewayId(gateway);
-                    dicGateway[gwID] = gateway;
+                    dicGateway[gateway.GwId] = gateway;
                 }
             }
         }
@@ -185,6 +184,16 @@
                 byte[] filebyte = Global.ReadFileByHomeId(file);
                 string strvalue = System.Text.Encoding.UTF8.GetString(filebyte);
                 var gateway = JsonConvert.DeserializeObject<ZbGateway>(strvalue);
+                if (gateway.GwId == string.Empty)
+                {
+                    //杩欐槸鏃ф暟鎹�,闇�瑕佺壒娈婂鐞�
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(strvalue);
+                    string gwInfo = jobject["getGwInfo"].ToString();
+
+                    var result = JsonConvert.DeserializeObject<ZbGatewayData.GetGwData>(gwInfo);
+                    //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+                    this.SetGatewayDataToLocalMemmory(gateway, result);
+                }
                 return gateway;
             }
             catch (Exception ex)
@@ -242,8 +251,8 @@
         public void AddVirtualGateway(string gatewayId)
         {
             var gateWay = new ZbGateway { IsVirtual = true };
-            gateWay.getGatewayBaseInfo.gwID = gatewayId;
-            gateWay.getGatewayBaseInfo.HomeId = Shared.Common.Config.Instance.HomeId;
+            gateWay.GwId = gatewayId;
+            gateWay.HomeId = Shared.Common.Config.Instance.HomeId;
             gateWay.ReSave();
             this.dicGateway[gatewayId] = gateWay;
         }
@@ -328,7 +337,7 @@
             }
 
             //鏄惁宸茬粡瀛樺湪
-            string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
+            string gwID = zbGateway.GwId;
             bool isEsist = HdlGatewayLogic.Current.IsGatewayExist(zbGateway);
             if (isEsist == false)
             {
@@ -340,11 +349,11 @@
 
             //鍒锋柊鐨勬槸缂撳瓨,涓嶅埛鏂扮湡瀹炵墿鐞嗙綉鍏�
             this.dicGateway[gwID].GatewayOnlineFlage = zbGateway.GatewayOnlineFlage;
-            this.dicGateway[gwID].getGwInfo = result.getGwData;
-            this.dicGateway[gwID].getGatewayBaseInfo.GwName = result.getGwData.GwName;
-            this.dicGateway[gwID].getGatewayBaseInfo.IpAddress = result.getGwData.GwIP;
-            this.dicGateway[gwID].getGatewayBaseInfo.HomeId = Common.Config.Instance.HomeId;
-            this.dicGateway[gwID].ReSave();
+            //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+            this.SetGatewayDataToLocalMemmory(this.dicGateway[gwID], result.getGwData);
+            //椤轰究杩欎釜鍙橀噺涔熻缃竴涓�
+            this.SetGatewayDataToLocalMemmory(zbGateway, result.getGwData, false);
+
             if (isEsist == false)
             {
                 //娣诲姞澶囦唤
@@ -379,8 +388,7 @@
         {
             //璋冪敤鎺ュ彛锛岀粦瀹氱綉鍏�(鍗充娇澶辫触锛屼篃杩斿洖true寰�涓嬭蛋)
             var bindGateway = new BindGatewayPra();
-            string gwID = this.GetGatewayId(zbGateway);
-            bindGateway.BindGateways.Add(gwID);
+            bindGateway.BindGateways.Add(zbGateway.GwId);
             //鑾峰彇鎺у埗涓讳汉璐﹀彿鐨凾oken
             bindGateway.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
 
@@ -406,7 +414,7 @@
         /// <returns></returns>
         public bool HomeIdIsEmpty(ZbGateway zbGateway)
         {
-            return this.HomeIdIsEmpty(zbGateway.getGatewayBaseInfo.HomeId);
+            return this.HomeIdIsEmpty(zbGateway.HomeId);
         }
 
         /// <summary>
@@ -505,7 +513,7 @@
             }
 
             //鏄惁宸茬粡瀛樺湪
-            string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
+            string gwID = zbGateway.GwId;
             bool isEsist = HdlGatewayLogic.Current.IsGatewayExist(zbGateway);
             if (isEsist == false)
             {
@@ -517,11 +525,11 @@
 
             //鍒锋柊鐨勬槸缂撳瓨,涓嶅埛鏂扮湡瀹炵墿鐞嗙綉鍏�
             this.dicGateway[gwID].GatewayOnlineFlage = zbGateway.GatewayOnlineFlage;
-            this.dicGateway[gwID].getGwInfo = result.getGwData;
-            this.dicGateway[gwID].getGatewayBaseInfo.GwName = result.getGwData.GwName;
-            this.dicGateway[gwID].getGatewayBaseInfo.IpAddress = result.getGwData.GwIP;
-            this.dicGateway[gwID].getGatewayBaseInfo.HomeId = Common.Config.Instance.HomeId;
-            this.dicGateway[gwID].ReSave();
+            //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+            this.SetGatewayDataToLocalMemmory(this.dicGateway[gwID], result.getGwData);
+            //椤轰究杩欎釜鍙橀噺涔熻缃竴涓�
+            this.SetGatewayDataToLocalMemmory(zbGateway, result.getGwData, false);
+
             if (isEsist == false)
             {
                 //娣诲姞澶囦唤
@@ -579,8 +587,8 @@
             }
 
             //淇敼缂撳瓨
-            string gwID = this.GetGatewayId(zbGateway);
-            this.dicGateway[gwID].getGatewayBaseInfo.GwName = gatewayName;
+            string gwID = zbGateway.GwId;
+            this.dicGateway[gwID].GwName = gatewayName;
             this.dicGateway[gwID].ReSave();
 
             //娣诲姞鑷姩澶囦唤
@@ -633,7 +641,7 @@
             if (this.GetRealGateway(ref realWay, gatewayId) == true)
             {
                 //閲嶆柊璁剧疆浣忓畢ID(杩欎釜搴旇鏄笉缁忚繃APP,鐩存帴鎶婄綉鍏虫仮澶嶄簡鍑哄巶璁剧疆)
-                if (this.HomeIdIsEmpty(realWay.getGatewayBaseInfo.HomeId) == true)
+                if (this.HomeIdIsEmpty(realWay.HomeId) == true)
                 {
                     int result2 = await this.ReBindNewGateway(realWay);
                     if (result2 == 0)
@@ -698,9 +706,8 @@
         /// <param name="zbGateway"></param>
         public async Task<bool> DeleteGateway(ZbGateway zbGateway)
         {
-            string gwID = this.GetGatewayId(zbGateway);
             //绉婚櫎鏈湴缃戝叧淇℃伅
-            return await this.DeleteGateway(gwID);
+            return await this.DeleteGateway(zbGateway.GwId);
         }
 
         /// <summary>
@@ -733,7 +740,7 @@
             this.DeleteGatewayFile(zbGatewayID);
 
             //绉婚櫎
-            ZbGateway.GateWayList.RemoveAll((obj) => this.GetGatewayId(obj) == zbGatewayID);
+            ZbGateway.GateWayList.RemoveAll((obj) => obj.GwId == zbGatewayID);
             //鏂紑mqtt杩炴帴
             realWay.DisConnectLocalMqttClient("GD");
 
@@ -830,7 +837,7 @@
             //鍒锋柊缂撳瓨鐨勫湪绾挎爣璇�
             foreach (var zbway in listRealWay)
             {
-                string gwID = this.GetGatewayId(zbway);
+                string gwID = zbway.GwId;
                 if (this.dicGateway.ContainsKey(gwID) == false)
                 {
                     continue;
@@ -872,11 +879,11 @@
             }
             foreach (var way in listGateway)
             {
-                if (way == null || way.getGatewayBaseInfo == null)
+                if (way == null)
                 {
                     continue;
                 }
-                string strId = this.GetGatewayId(way);
+                string strId = way.GwId;
                 if (dicDbGateway.ContainsKey(strId) == true) //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
                 {
                     way.GatewayOnlineFlage = dicDbGateway[strId].MqttOnlineStatus;
@@ -896,7 +903,7 @@
                 return false;
             }
             //浣跨敤缂撳瓨鐨勶紝鍥犱负鍒锋柊鍦ㄧ嚎鐘舵�佺殑鏃跺�欙紝鍒锋柊鐨勫氨鏄紦瀛橈紝鑰屼笉鏄湡瀹炵墿鐞嗙綉鍏�
-            string gwID = this.GetGatewayId(zbGateway);
+            string gwID = zbGateway.GwId;
             if (this.dicGateway.ContainsKey(gwID) == true)
             {
                 return this.dicGateway[gwID].GatewayOnlineFlage;
@@ -922,12 +929,12 @@
             List<ZbGateway> newlist = new List<ZbGateway>();
             foreach (var way in list)
             {
-                if (Config.Instance.HomeId != way.getGatewayBaseInfo.HomeId)
+                if (Config.Instance.HomeId != way.HomeId)
                 {
                     //濡傛灉涓嶆槸褰撳墠浣忓畢
                     continue;
                 }
-                string gwID = this.GetGatewayId(way);
+                string gwID = way.GwId;
                 if (this.dicGateway.ContainsKey(gwID) == false)
                 {
                     //濡傛灉鏈湴骞舵病鏈夎繖涓綉鍏�
@@ -997,11 +1004,11 @@
         /// <returns></returns>
         public bool GetRealGateway(ref ZbGateway zbGateway, ZbGateway tagartWay)
         {
-            if (tagartWay == null || tagartWay.getGatewayBaseInfo == null)
+            if (tagartWay == null)
             {
                 return false;
             }
-            return this.GetRealGateway(ref zbGateway, this.GetGatewayId(tagartWay));
+            return this.GetRealGateway(ref zbGateway, tagartWay.GwId);
         }
 
         /// <summary>
@@ -1014,14 +1021,14 @@
         {
             var realWay = ZbGateway.GateWayList.Find((obj) =>
             {
-                return this.GetGatewayId(obj) == gwId;
+                return obj.GwId == gwId;
             });
             if (realWay == null)
             {
                 //濡傛灉缃戝叧瀵硅薄涓㈠け浜�,鍒欏垱寤轰釜鏂扮殑
                 realWay = new ZbGateway { IsVirtual = true, };
-                realWay.getGatewayBaseInfo.gwID = gwId;
-                realWay.getGatewayBaseInfo.HomeId = Shared.Common.Config.Instance.HomeId;
+                realWay.GwId = gwId;
+                realWay.HomeId = Shared.Common.Config.Instance.HomeId;
                 ZbGateway.GateWayList.Add(realWay);
             }
             zbGateway = realWay;
@@ -1292,63 +1299,6 @@
 
         #endregion
 
-        #region 鈻� 鑾峰彇缃戝叧GwInfo閲岄潰鐨勫睘鎬__________
-
-        /// <summary>
-        /// 鑾峰彇缃戝叧GwInfo閲岄潰鐨勫睘鎬�
-        /// </summary>
-        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
-        /// <param name="attributeName">getGwInfo閲岄潰灞炴�х殑鍚嶅瓧</param>
-        /// <param name="defult">濡傛灉鑾峰彇涓嶅埌鏃讹紝璁剧疆鐨勯粯璁ゅ��</param>
-        /// <returns></returns>
-        public object GetGwInfoAttribute(ZbGateway zbGateway, string attributeName, string defult = "")
-        {
-            string gwID = this.GetGatewayId(zbGateway);
-            var localWay = this.GetLocalGateway(gwID);
-
-            object objValue = null;
-            if (localWay == null || localWay.getGwInfo == null)
-            {
-                //鏈湴娌℃湁璁板綍鏈夎繖涓笢瑗�,鍒欑洿鎺ヨ繑鍥炲弬鏁扮殑鏁版嵁
-                if (zbGateway.getGwInfo != null)
-                {
-                    objValue = zbGateway.getGwInfo.GetType().InvokeMember(attributeName, System.Reflection.BindingFlags.GetField, null, zbGateway.getGwInfo, null);
-                }
-                else
-                {
-                    return defult;
-                }
-            }
-            else
-            {
-                //鑾峰彇鏈湴鐨勫睘鎬� 
-                objValue = localWay.getGwInfo.GetType().InvokeMember(attributeName, System.Reflection.BindingFlags.GetField, null, localWay.getGwInfo, null);
-            }
-
-            if (objValue == null)
-            {
-                return defult;
-            }
-            return objValue;
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇缃戝叧ID(鏈夌壒娈婃剰涔�)_____________
-
-        /// <summary>
-        /// 鑾峰彇缃戝叧瀵硅薄閲岄潰鐨勭綉鍏矷D(灏佽杩欎釜鏂规硶鏈夌壒娈婃剰涔�)
-        /// </summary>
-        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
-        /// <returns></returns>
-        public string GetGatewayId(ZbGateway zbGateway)
-        {
-            //杩欎釜涓滆タ涓嶄細涓虹┖
-            return zbGateway.getGatewayBaseInfo.gwID;
-        }
-
-        #endregion
-
         #region 鈻� 鑾峰彇鍚嶇О___________________________
 
         /// <summary>
@@ -1359,10 +1309,10 @@
         /// <returns></returns>
         public string GetGatewayName(ZbGateway zbGateway, GetNameMode mode = GetNameMode.SpecialGateway)
         {
-            string gwId = this.GetGatewayId(zbGateway);
+            string gwId = zbGateway.GwId;
             if (this.dicGateway.ContainsKey(gwId) == false)
             {
-                return zbGateway.getGatewayBaseInfo.GwName == null ? string.Empty : zbGateway.getGatewayBaseInfo.GwName;
+                return zbGateway.GwName;
             }
             var localWay = this.dicGateway[gwId];
 
@@ -1372,9 +1322,9 @@
                 return name;
             }
 
-            if (mode == GetNameMode.SpecialGateway && localWay.getGwInfo != null)
+            if (mode == GetNameMode.SpecialGateway)
             {
-                string keyName = Common.LocalDevice.deviceModelIdName + this.GetGwInfoAttribute(localWay, "LinuxImageType").ToString();
+                string keyName = Common.LocalDevice.deviceModelIdName + localWay.LinuxImageType;
                 if (LocalDevice.Current.dicDeviceAllNameID.ContainsKey(keyName) == true)
                 {
                     //娌℃湁鍚嶇О鏃讹紝鍒欎娇鐢≧鏂囦欢閲岄潰璁剧疆鐨勯粯璁よ澶囧悕绉�
@@ -1396,7 +1346,7 @@
             {
                 return string.Empty;
             }
-            return zbGateway.getGatewayBaseInfo.GwName;
+            return zbGateway.GwName;
         }
 
         /// <summary>
@@ -1410,13 +1360,13 @@
             //鍒濆鍊�:鏃犳硶璇嗗埆鐨勭綉鍏宠澶�
             button.TextID = R.MyInternationalizationString.uUnDistinguishTheGatewayDevice;
 
-            string gwId = this.GetGatewayId(zbGateway);
-            if (this.dicGateway.ContainsKey(gwId) == false || this.dicGateway[gwId].getGwInfo == null)
+            string gwId = zbGateway.GwId;
+            if (this.dicGateway.ContainsKey(gwId) == false)
             {
                 //濡傛灉杩欎釜缃戝叧娌℃湁淇℃伅锛屽垯浠庢柊鑾峰彇
-                if (zbGateway.getGwInfo != null && zbGateway.getGwInfo.LinuxImageType != 0)
+                if (zbGateway.LinuxImageType != -1)
                 {
-                    string keyName = Common.LocalDevice.deviceModelIdName + zbGateway.getGwInfo.LinuxImageType;
+                    string keyName = Common.LocalDevice.deviceModelIdName + zbGateway.LinuxImageType;
                     if (Common.LocalDevice.Current.dicDeviceAllNameID.ContainsKey(keyName) == true)
                     {
                         //浣跨敤R鏂囦欢閲岄潰璁剧疆鐨勪笢瑗�
@@ -1431,10 +1381,12 @@
                         var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                         if (result != null)
                         {
-                            zbGateway.getGwInfo = result;
+                            //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+                            this.SetGatewayDataToLocalMemmory(zbGateway, result, false);
+
                             HdlThreadLogic.Current.RunMain(() =>
                             {
-                                string keyName = Common.LocalDevice.deviceModelIdName + zbGateway.getGwInfo.LinuxImageType;
+                                string keyName = Common.LocalDevice.deviceModelIdName + zbGateway.LinuxImageType;
                                 if (Common.LocalDevice.Current.dicDeviceAllNameID.ContainsKey(keyName) == true)
                                 {
                                     //浣跨敤R鏂囦欢閲岄潰璁剧疆鐨勪笢瑗�
@@ -1447,7 +1399,7 @@
             }
             else
             {
-                string keyName = Common.LocalDevice.deviceModelIdName + this.dicGateway[gwId].getGwInfo.LinuxImageType;
+                string keyName = Common.LocalDevice.deviceModelIdName + this.dicGateway[gwId].LinuxImageType;
                 if (Common.LocalDevice.Current.dicDeviceAllNameID.ContainsKey(keyName) == true)
                 {
                     //浣跨敤R鏂囦欢閲岄潰璁剧疆鐨勪笢瑗�
@@ -1504,17 +1456,16 @@
                 return null;
             }
 
-            string gwID = this.GetGatewayId(zbGateway);
+            string gwID = zbGateway.GwId;
             if (this.dicGateway.ContainsKey(gwID) == true)
             {
                 //鍒锋柊缂撳瓨
                 ZbGateway localWay = this.dicGateway[gwID];
-                localWay.getGwInfo = imageTypeResult.getGwData;
-                localWay.getGatewayBaseInfo.GwName = imageTypeResult.getGwData.GwName;
-                localWay.getGatewayBaseInfo.IpAddress = imageTypeResult.getGwData.GwIP;
-
-                localWay.ReSave();
+                //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+                this.SetGatewayDataToLocalMemmory(localWay, imageTypeResult.getGwData);
             }
+            //椤轰究杩欎釜鍙橀噺涔熻缃竴涓�
+            this.SetGatewayDataToLocalMemmory(zbGateway, imageTypeResult.getGwData, false);
 
             return imageTypeResult.getGwData;
         }
@@ -1542,6 +1493,32 @@
             return result;
         }
 
+        /// <summary>
+        /// 灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+        /// </summary>
+        /// <param name="localWay">鏈湴缃戝叧</param>
+        /// <param name="data">缃戝叧鏁版嵁</param>
+        /// <param name="saveFile">鏄惁淇濆瓨鏂囦欢</param>
+        private void SetGatewayDataToLocalMemmory(ZbGateway localWay, ZbGatewayData.GetGwData data, bool saveFile = true)
+        {
+            localWay.GwId = data.GwId;
+            localWay.GwName = data.GwName;
+            localWay.GwSerialNum = data.GWSN;
+            localWay.IsMainGateWay = data.IsDominant == 1 ? true : false;
+            localWay.GwIP = data.GwIP;
+            localWay.LinuxImageType = data.LinuxImageType;
+            localWay.LinuxHardVersion = data.LinuxHWVersion;
+            localWay.LinuxFirmwareVersion = data.LinuxFWVersion;
+            localWay.CoordinatorHardVersion = data.ZbHWVersion;
+            localWay.CoordinatorFirmwareVersion = data.ZbFWVersion;
+            localWay.CoordinatorImageId = data.ZbImageType;
+            localWay.DriveCodeList = data.DriveCodeList;
+            if (saveFile == true)
+            {
+                localWay.ReSave();
+            }
+        }
+
         #endregion
 
         #region 鈻� 缃戝叧鎴块棿鐩稿叧_______________________
@@ -1553,8 +1530,7 @@
         /// <returns></returns>
         public Room GetRoomByGateway(ZbGateway zbGateway)
         {
-            var gatewayId = this.GetGatewayId(zbGateway);
-            return this.GetRoomByGateway(gatewayId);
+            return this.GetRoomByGateway(zbGateway.GwId);
         }
 
         /// <summary>
@@ -1579,8 +1555,7 @@
         /// <param name="roomId">鎴块棿ID</param>
         public void ChangedGatewayRoom(ZbGateway zbGateway, string roomId)
         {
-            var gatewayId = this.GetGatewayId(zbGateway);
-            var localGateway = this.GetLocalGateway(gatewayId);
+            var localGateway = this.GetLocalGateway(zbGateway.GwId);
             if (localGateway != null)
             {
                 localGateway.RoomId = roomId;
@@ -1631,65 +1606,59 @@
                 return null;
             }
             //浣跨敤鏈湴缂撳瓨瀵硅薄
-            string gwID = this.GetGatewayId(zbGateway);
-            var localWay = this.GetLocalGateway(gwID);
+            var localWay = this.GetLocalGateway(zbGateway.GwId);
             if (localWay == null)
             {
                 return null;
             }
 
             //娣诲姞缃戝叧鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
-            var flage = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Linux,
-                this.GetGwInfoAttribute(localWay, "LinuxHWVersion").ToString(),
-                this.GetGwInfoAttribute(localWay, "LinuxImageType").ToString());
+            var flage = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Linux,
+                localWay.LinuxHardVersion.ToString(),
+                localWay.LinuxImageType.ToString());
 
             //娣诲姞鍗忚皟鍣ㄧ殑鍗囩骇鍥轰欢(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
-            flage = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Coordinator,
-                this.GetGwInfoAttribute(localWay, "ZbHWVersion").ToString(),
-                this.GetGwInfoAttribute(localWay, "ZbImageType").ToString());
+            flage = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.Coordinator,
+                localWay.CoordinatorHardVersion.ToString(),
+                localWay.CoordinatorImageId.ToString());
 
             //缃戝叧鐨勭増鏈�
             var gatewayFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.Linux,
-                this.GetGwInfoAttribute(localWay, "LinuxHWVersion").ToString(),
-                this.GetGwInfoAttribute(localWay, "LinuxImageType").ToString(),
-                Convert.ToInt32(this.GetGwInfoAttribute(localWay, "LinuxFWVersion")));
+                localWay.LinuxHardVersion.ToString(),
+                localWay.LinuxImageType.ToString(),
+                localWay.LinuxFirmwareVersion);
 
             //鍗忚皟鍣ㄧ増鏈�
             var coordinatorFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.Coordinator,
-                this.GetGwInfoAttribute(localWay, "ZbHWVersion").ToString(),
-                this.GetGwInfoAttribute(localWay, "ZbImageType").ToString(),
-                Convert.ToInt32(this.GetGwInfoAttribute(localWay, "ZbFWVersion")));
+                localWay.CoordinatorHardVersion.ToString(),
+                localWay.CoordinatorImageId.ToString(),
+                localWay.CoordinatorFirmwareVersion);
 
             var list = new List<FirmwareVersionInfo>();
             list.Add(gatewayFirmware);
             list.Add(coordinatorFirmware);
 
             //杩欎釜缃戝叧闇�瑕佹湁铏氭嫙椹卞姩杩欎釜涓滆タ鎵嶈
-            string linImage = this.GetGwInfoAttribute(localWay, "LinuxImageType").ToString();
-            if (linImage != "6")
+            if (localWay.LinuxImageType != 6)
             {
                 //铏氭嫙椹卞姩鍙�
-                var listvVode = await HdlGatewayLogic.Current.GetListVDDriveCode(localWay);
-                if (listvVode != null && listvVode.Count > 0)
+                foreach (var data in localWay.DriveCodeList)
                 {
-                    foreach (var data in listvVode)
+                    //娣诲姞铏氭嫙椹卞姩鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
+                    flage = HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
+                        data.DriveHwVersion.ToString(),
+                        data.DriveImageType.ToString());
+
+                    //铏氭嫙椹卞姩
+                    var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice,
+                        data.DriveHwVersion.ToString(),
+                        data.DriveImageType.ToString(),
+                        data.DriveFwVersion);
+
+                    if (virtualFirmware != null)
                     {
-                        //娣诲姞铏氭嫙椹卞姩鐨勫崌绾у浐浠�(鎴愪笉鎴愬姛閮芥棤鎵�璋�)
-                        flage = await HdlFirmwareUpdateLogic.AddFirmwareVersionInfo(FirmwareLevelType.VirtualDevice,
-                            data.DriveHwVersion.ToString(),
-                            data.DriveImageType.ToString());
-
-                        //铏氭嫙椹卞姩
-                        var virtualFirmware = HdlFirmwareUpdateLogic.GetFirmwareMostVersionInfo(FirmwareLevelType.VirtualDevice,
-                            data.DriveHwVersion.ToString(),
-                            data.DriveImageType.ToString(),
-                            data.DriveFwVersion);
-
-                        if (virtualFirmware != null)
-                        {
-                            virtualFirmware.VirtualCode = data.DriveCode;
-                            list.Add(virtualFirmware);
-                        }
+                        virtualFirmware.VirtualCode = data.DriveCode;
+                        list.Add(virtualFirmware);
                     }
                 }
             }
@@ -1706,31 +1675,20 @@
         /// </summary>
         /// <param name="zbGateway"></param>
         /// <returns></returns>
-        public async Task<List<ZbGatewayData.DriveCodeObj>> GetListVDDriveCode(ZbGateway zbGateway)
+        public List<ZbGatewayData.DriveCodeObj> GetListVDDriveCode(ZbGateway zbGateway)
         {
-            ZbGateway zbTemp = null;
-            if (this.GetRealGateway(ref zbTemp, zbGateway) == false)
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 505 } };
+            var result = this.SendJobjectDataToGateway(zbGateway, "VirtualDrive/CatDriveCode", jObject.ToString(), "VirtualDrive/CatDriveCode_Respon");
+            if (result.ErrorMsg != null)
+            {
+                this.ShowTipMsg(result.ErrorMsg);
+            }
+            if (result.ErrorMsgDiv == 0)
             {
                 return null;
             }
-            var result = await zbTemp.CheckVDDriveCodeAsync();
-            //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
-            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
-            if (error != null)
-            {
-                this.ShowTipMsg(error);
-                return null;
-            }
-
-            if (result == null || result.vDriveDriveCodeResponData == null || result.vDriveDriveCodeResponData.DriveCodeList == null)
-            {
-                return null;
-            }
-            if (result.vDriveDriveCodeResponData.DriveCodeList.Count > 0)
-            {
-                return result.vDriveDriveCodeResponData.DriveCodeList;
-            }
-            return null;
+            var dataInfo = JsonConvert.DeserializeObject<ZbGatewayData.VDriveDriveCodeResponData>(result.ReceiptData);
+            return dataInfo.DriveCodeList;
         }
 
         #endregion
@@ -1744,8 +1702,7 @@
         /// <returns></returns>
         public int IsMainGateway(ZbGateway zbGateway)
         {
-            string gwID = this.GetGatewayId(zbGateway);
-            return this.IsMainGateway(gwID);
+            return this.IsMainGateway(zbGateway.GwId);
         }
 
         /// <summary>
@@ -1774,13 +1731,12 @@
         /// <param name="zbGateway"></param>
         public void SetRealGatewayPictrue(Button button, ZbGateway zbGateway)
         {
-            string gwID = this.GetGatewayId(zbGateway);
-            var localWay = this.GetLocalGateway(gwID);
-            if (localWay == null || localWay.getGwInfo == null)
+            var localWay = this.GetLocalGateway(zbGateway.GwId);
+            if (localWay == null)
             {
-                if (zbGateway.getGwInfo != null && zbGateway.getGwInfo.LinuxImageType != 0)
+                if (zbGateway.LinuxImageType != -1)
                 {
-                    button.UnSelectedImagePath = "Gateway/RealGateway" + zbGateway.getGwInfo.LinuxImageType + ".png";
+                    button.UnSelectedImagePath = "Gateway/RealGateway" + zbGateway.LinuxImageType + ".png";
                 }
                 else
                 {
@@ -1790,7 +1746,8 @@
                         var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                         if (result != null)
                         {
-                            zbGateway.getGwInfo = result;
+                            //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+                            this.SetGatewayDataToLocalMemmory(zbGateway, result, false);
                             HdlThreadLogic.Current.RunMain(() =>
                             {
                                 button.UnSelectedImagePath = "Gateway/RealGateway" + result.LinuxImageType + ".png";
@@ -1801,7 +1758,7 @@
             }
             else
             {
-                button.UnSelectedImagePath = "Gateway/RealGateway" + localWay.getGwInfo.LinuxImageType + ".png";
+                button.UnSelectedImagePath = "Gateway/RealGateway" + localWay.LinuxImageType + ".png";
             }
         }
 
@@ -1812,13 +1769,12 @@
         /// <param name="zbGateway"></param>
         public void SetGatewayIcon(Button button, ZbGateway zbGateway)
         {
-            string gwID = this.GetGatewayId(zbGateway);
-            var localWay = this.GetLocalGateway(gwID);
-            if (localWay == null || localWay.getGwInfo == null)
+            var localWay = this.GetLocalGateway(zbGateway.GwId);
+            if (localWay == null)
             {
-                if (zbGateway.getGwInfo != null && zbGateway.getGwInfo.LinuxImageType != 0)
+                if (zbGateway.LinuxImageType != -1)
                 {
-                    button.UnSelectedImagePath = "Gateway/GatewayIcon" + zbGateway.getGwInfo.LinuxImageType + ".png";
+                    button.UnSelectedImagePath = "Gateway/GatewayIcon" + zbGateway.LinuxImageType + ".png";
                 }
                 else
                 {
@@ -1828,7 +1784,8 @@
                         var result = await this.GetGatewayNewInfoAsync(zbGateway, ShowErrorMode.NO);
                         if (result != null)
                         {
-                            zbGateway.getGwInfo = result;
+                            //灏嗙綉鍏崇殑鏁版嵁璁剧疆鍒版湰鍦扮紦瀛樹腑
+                            this.SetGatewayDataToLocalMemmory(zbGateway, result, false);
                             HdlThreadLogic.Current.RunMain(() =>
                             {
                                 button.UnSelectedImagePath = "Gateway/GatewayIcon" + result.LinuxImageType + ".png";
@@ -1839,7 +1796,7 @@
             }
             else
             {
-                button.UnSelectedImagePath = "Gateway/GatewayIcon" + localWay.getGwInfo.LinuxImageType + ".png";
+                button.UnSelectedImagePath = "Gateway/GatewayIcon" + localWay.LinuxImageType + ".png";
             }
         }
 
@@ -1854,8 +1811,7 @@
         /// <returns></returns>
         public bool IsGatewayExist(ZbGateway zbGateway)
         {
-            string gwID = this.GetGatewayId(zbGateway);
-            return this.IsGatewayExist(gwID);
+            return this.IsGatewayExist(zbGateway.GwId);
         }
 
         /// <summary>
@@ -2078,7 +2034,7 @@
         /// <param name="zbGateway"></param>
         public void BackupGatewayIdOnNotNetwork(ZbGateway zbGateway)
         {
-            var strId = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
+            var strId = zbGateway.GwId;
             if (listBackupGwId.Contains(strId) == false)
             {
                 listBackupGwId.Add(strId);
@@ -2149,39 +2105,73 @@
 
         #endregion
 
-        #region 鈻� 涓婁紶璁惧澶囦唤鍒扮綉鍏砡________________
+        #region 鈻� 鍙戦�佺綉鍏冲懡浠ょ粰缃戝叧_________________
 
         /// <summary>
-        /// 涓婁紶璁惧澶囦唤鍒扮綉鍏�(搴熷純)
+        /// 鍙戦�佹暟鎹埌缃戝叧锛屽苟鎺ュ彈缃戝叧杩斿洖鐨勬暟鎹�(ReceiptData涓鸿繑鍥炲��)
         /// </summary>
-        /// <param name="device">璁惧瀵硅薄</param>
-        /// <param name="backupEnum">澶囦唤绫诲瀷</param>
-        /// <param name="upLaodData">澶囦唤鐨勬暟鎹�</param>
-        /// <returns></returns>
-        public async Task<bool> UpLoadDeviceBackupDataToGateway(CommonDevice device, object upLaodData)
+        /// <param name="gateway">缃戝叧瀵硅薄</param>
+        /// <param name="sendTopic">鍙戦�佺殑涓婚</param>
+        /// <param name="sendData">闇�瑕佸彂閫佺殑鏁版嵁  JObject.ToString()鐨勪笢瑗�</param>
+        /// <param name="receiptTopic">鎸囧畾鎺ユ敹鍝釜涓婚</param>
+        /// <param name="waitTime">瓒呮椂鏃堕棿(绉�)</param>
+        /// <returns>缃戝叧杩斿洖鐨勬暟鎹�</returns>
+        public ReceiptGatewayResult SendJobjectDataToGateway(ZbGateway gateway, string sendTopic, string sendData, string receiptTopic, int waitTime = 5)
         {
-            //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;
+            var reResult = new ReceiptGatewayResult();
+
+            ZbGateway myGateway = null;
+            if (this.GetRealGateway(ref myGateway, gateway) == false)
+            {
+                //鑾峰彇缃戝叧瀵硅薄澶辫触
+                reResult.ErrorMsg = Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail);
+                reResult.ErrorMsgDiv = -1;
+                return reResult;
+            }
+            //缃戝叧ID
+            string gatewayID = gateway.GwId;
+            //閿欒涓婚
+            string errorTopic = gatewayID + "/" + "Error_Respon";
+            //妫�娴嬪璞$殑涓婚
+            string checkTopic = gatewayID + "/" + receiptTopic;
+
+            Action<string, string> receiptAction = (topic, message) =>
+            {
+                var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                //缃戝叧鍥炲閿欒
+                if (topic == errorTopic)
+                {
+                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString());
+                    reResult.ErrorMsg = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error);
+                }
+                //濡傛灉鏄寚瀹氱殑涓婚
+                if (topic == checkTopic)
+                {
+                    reResult.ReceiptData = jobject["Data"].ToString();
+                }
+            };
+            myGateway.Actions += receiptAction;
+            //鍙戦�佹暟鎹�
+            myGateway.Send(sendTopic, sendData);
+
+            //瓒呮椂鏃堕棿
+            int TimeOut = 0;
+            waitTime = 20 * waitTime;
+            while (reResult.ReceiptData == null && TimeOut < waitTime)
+            {
+                //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
+                System.Threading.Thread.Sleep(50);
+                TimeOut++;
+            }
+            myGateway.Actions -= receiptAction;
+            receiptAction = null;
+            if (reResult.ReceiptData == null)
+            {
+                reResult.ErrorMsgDiv = 0;
+            }
+
+            return reResult;
         }
 
         #endregion
@@ -2216,7 +2206,7 @@
             {
                 int waitCount = 0;
                 //濡傛灉浣忓畢ID鍙樻洿浜�,鍒欎笉鍐嶅鐞�
-                while (frameLayout.Parent != null)
+                while (frameLayout.Parent != null && Config.Instance.HomeId != string.Empty)
                 {
                     System.Threading.Thread.Sleep(1000);
                     if (this.hadGatewayUpdate == true)
@@ -2276,18 +2266,33 @@
             //绛変釜2绉�
             System.Threading.Thread.Sleep(2000);
 
+            //2020.05.25杩藉姞:姝や綇瀹呮槸鍚︽嫢鏈夌綉鍏冲湪绾�
+            var hadGwOnline = false;
             foreach (var way in list)
             {
-                string gwId = this.GetGatewayId(way);
+                if (dicOldOnline.ContainsKey(way.GwId) == true)
+                {
+                    if (way.GatewayOnlineFlage == true)
+                    {
+                        //鏈変竴涓綉鍏冲湪绾�,鍗冲湪绾�
+                        hadGwOnline = true;
+                        break;
+                    }
+                }
+            }
+
+            foreach (var way in list)
+            {
+                string gwId = way.GwId;
                 if (dicOldOnline.ContainsKey(gwId) == true)
                 {
                     //缃戝叧涔熶笉澶�,鐩存帴鎺ㄩ�佸惂
-                    this.PushGatewayOnlineStatuToForm(gwId, way.GatewayOnlineFlage);
+                    this.PushGatewayOnlineStatuToForm(gwId, way.GatewayOnlineFlage, hadGwOnline);
                 }
                 else
                 {
                     //娌℃湁鍖呭惈,榛樿涓篺alse
-                    this.PushGatewayOnlineStatuToForm(gwId, false);
+                    this.PushGatewayOnlineStatuToForm(gwId, false, hadGwOnline);
                 }
             }
         }
@@ -2305,22 +2310,34 @@
                 dicDbGateway = new Dictionary<string, GatewayResult>();
             }
 
+            //2020.05.25杩藉姞:姝や綇瀹呮槸鍚︽嫢鏈夌綉鍏冲湪绾�
+            var hadGwOnline = false;
+            foreach (var gwId in dicOldOnline.Keys)
+            {
+                //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
+                if (dicDbGateway.ContainsKey(gwId) == true
+                    && dicDbGateway[gwId].MqttOnlineStatus == true)
+                {
+                    //鏈変竴涓綉鍏冲湪绾�,鍗冲湪绾�
+                    hadGwOnline = true;
+                    break;
+                }
+            }
+
             foreach (var gwId in dicOldOnline.Keys)
             {
                 //濡傛灉浜戠涓婇潰鏈夎繖涓綉鍏�
                 if (dicDbGateway.ContainsKey(gwId) == true)
                 {
                     //缃戝叧涔熶笉澶�,鐩存帴鎺ㄩ��
-                    this.PushGatewayOnlineStatuToForm(gwId, dicDbGateway[gwId].MqttOnlineStatus);
+                    this.PushGatewayOnlineStatuToForm(gwId, dicDbGateway[gwId].MqttOnlineStatus, hadGwOnline);
                 }
                 else
                 {
                     //浜戠涓嶅寘鍚殑,褰撲笉鍦ㄧ嚎澶勭悊
-                    this.PushGatewayOnlineStatuToForm(gwId, false);
+                    this.PushGatewayOnlineStatuToForm(gwId, false, hadGwOnline);
                 }
             }
-
-           
         }
 
         /// <summary>
@@ -2342,8 +2359,7 @@
                 foreach (var zbway in this.dicGateway.Values)
                 {
                     //鑾峰彇鍓嶅洖鐨勫湪绾跨姸鎬�
-                    string gwId = this.GetGatewayId(zbway);
-                    dicOldOnline[gwId] = zbway.GatewayOnlineFlage;
+                    dicOldOnline[zbway.GwId] = zbway.GatewayOnlineFlage;
                 }
                 return dicOldOnline;
             }
@@ -2355,7 +2371,8 @@
         /// </summary>
         /// <param name="gwId"></param>
         /// <param name="online"></param>
-        private void PushGatewayOnlineStatuToForm(string gwId, bool online)
+        /// <param name="hadGwOnline">2020.05.25杩藉姞:姝や綇瀹呮槸鍚︽嫢鏈夌綉鍏冲湪绾�</param>
+        private void PushGatewayOnlineStatuToForm(string gwId, bool online, bool hadGwOnline)
         {
             try
             {
@@ -2368,9 +2385,12 @@
                     }
                     //缃戝叧鍦ㄧ嚎鎺ㄩ��
                     var zbway = this.GetLocalGateway(gwId);
-                    zbway.GatewayOnlineFlage = online;
-
-                    UserCenterResourse.DicActionForm[formId]?.GatewayOnlinePush(zbway, online);
+                    if (zbway != null)
+                    {
+                        //鍒囨崲浣忓畢鏃�,杩欎釜涓滆タ鏈夊彲鑳芥槸null
+                        zbway.GatewayOnlineFlage = online;
+                        UserCenterResourse.DicActionForm[formId]?.GatewayOnlinePush(zbway, online, hadGwOnline);
+                    }
                 }
             }
             catch { }

--
Gitblit v1.8.0