From 7e863a33397f317ffc3ffd9288496d0e4f16aa66 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期四, 12 十二月 2019 14:58:20 +0800
Subject: [PATCH] 合并了新代码

---
 ZigbeeApp/Shared/Common/Device.cs |  140 ++++++++++++++++++++++++++++++----------------
 1 files changed, 90 insertions(+), 50 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index 5e8b4ad..409b460 100755
--- a/ZigbeeApp/Shared/Common/Device.cs
+++ b/ZigbeeApp/Shared/Common/Device.cs
@@ -107,8 +107,14 @@
             List<string> listFile = this.GetAllDeviceFile();
             foreach (string file in listFile)
             {
+                CommonDevice device = null;
                 //鍙嶅簭鍒楀寲涓烘寚瀹氱殑绫伙紝涓嶇劧鏁版嵁浼氫涪澶辫�屽鑷存棤娉曞己杞�
-                var device = ZigBee.Device.CommonDevice.CommonDeviceByFilePath(file);
+                try 
+                {
+                    device = CommonDevice.CommonDeviceByFilePath(file);
+                }
+                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
+
                 if (device == null || device.CurrentGateWayId == null)
                 {
 #if DEBUG
@@ -454,6 +460,11 @@
                 }
                 //澶囦唤鏁版嵁
                 await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.AMac鍚嶇О, newMacName);
+                //濡傛灉瀹冨彧鏈変竴涓洖璺�,鍒欐洿鏀圭鐐瑰悕瀛�
+                if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count == 1)
+                {
+                    return await this.ReName(device, newMacName);
+                }
             }
             return true;
         }
@@ -739,6 +750,20 @@
                 return -1;
             });
             return list;
+        }
+
+        /// <summary>
+        /// 鏍规嵁MAC鍦板潃,鑾峰彇鍏ㄩ儴鍥炶矾鐨勬暟閲�
+        /// </summary>
+        /// <param name="DeviceAddr">Mac鍦板潃</param>
+        /// <returns></returns>
+        public int GetDevicesCountByMac(string DeviceAddr)
+        {
+            if (dicDeviceEpoint.ContainsKey(DeviceAddr) == false)
+            {
+                return 0;
+            }
+            return dicDeviceEpoint[DeviceAddr].Count;
         }
 
         /// <summary>
@@ -1378,7 +1403,7 @@
                             temperatrue = true;
                         }
                         //婀垮害浼犳劅鍣�
-                        else if(((TemperatureSensor)device).SensorDiv == 2)
+                        else if (((TemperatureSensor)device).SensorDiv == 2)
                         {
                             humidity = true;
                         }
@@ -1505,18 +1530,25 @@
         /// </summary>
         /// <param name="listDevice">闇�瑕佷繚瀛樼殑璁惧瀵硅薄</param>
         /// <param name="roomId">闇�瑕佷繚瀛樼殑鍝釜璁惧鐨勬埧闂碔D</param>
-        public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId)
+        /// <param name="saveRoadDevice">濡傛灉鍙湁涓�涓洖璺�,鏄惁鎶婂洖璺殑鎴块棿涓�璧蜂慨鏀�</param>
+        public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId, bool saveRoadDevice = true)
         {
-            this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+            if (listDevice != null)
+            {
+                this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
+            }
 
             //淇濆瓨璁板綍
             string fullName = UserCenterLogic.CombinePath(DirNameResourse.DeviceRoomIdFile);
             UserCenterLogic.SaveFileContent(fullName, this.dicDeviceRoomId);
 
+            //娣诲姞鑷姩澶囦唤
+            HdlAutoBackupLogic.AddOrEditorFile(DirNameResourse.DeviceRoomIdFile);
+
             //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜�
-            if (listDevice.Count == 1)
+            if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1)
             {
-                Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId);
+                Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false);
             }
         }
 
@@ -1613,16 +1645,16 @@
         /// <returns></returns>
         public string AppendVersion(int versionValue)
         {
-            //杞负16杩涘埗
-            string txt64 = Convert.ToString(versionValue, 16).PadLeft(4, '0');
+            //鐩存帴鏄�10杩涘埗
+            string txt10 = Convert.ToString(versionValue).PadLeft(4, '0');
             //杩欎釜鏄皬鏁扮偣鍓嶉潰鐨勫��
-            int value1 = Convert.ToInt32(txt64.Substring(0, 2), 16);
+            int value1 = Convert.ToInt32(txt10.Substring(0, txt10.Length - 2));
             //杩欎釜鏄皬鏁扮偣鍚庨潰鐨勫��
-            int value2 = Convert.ToInt32(txt64.Substring(2, 2), 16);
+            int value2 = Convert.ToInt32(txt10.Substring(txt10.Length - 2, 2));
 
             //Ver.
             string ver = Language.StringByID(R.MyInternationalizationString.uVersionAbbreviation);
-            return ver + value1 + "." + value2.ToString().PadLeft(3, '0');
+            return ver + value1 + "." + value2.ToString().PadLeft(2, '0');
         }
 
         /// <summary>
@@ -1719,53 +1751,61 @@
             int receiveCount = 0;
             //璁惧鍒楄〃
             var listDevice = new List<CommonDevice>();
-
+            //缃戝叧閲岄潰鏈夊彲鑳戒細鏈夐噸澶嶇殑鍥炶矾
+            var listCheck = new HashSet<string>();
             Action<string, string> getDeviceAction = (topic, message) =>
             {
-                try
+                if (topic == gatewayID + "/" + "DeviceInfoRespon")
                 {
-                    if (topic == gatewayID + "/" + "DeviceInfoRespon")
+                    try
                     {
-                        TimeOut = 0;
-                        var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
-                        var totalNum = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["TotalNum"].ToString());
-                        if (totalNum == 0)
+                        lock (listDevice)
                         {
-                            //杩欎釜缃戝叧娌℃湁璁惧
-                            canBreak = true;
-                            return;
-                        }
-                        if (deviceCount == -1)
-                        {
-                            //璁剧疆闇�瑕佹帴鏀跺灏戜釜璁惧
-                            deviceCount = totalNum;
-                        }
-                        //璁惧鎺ユ敹鏁�
-                        receiveCount++;
+                            //璁惧鎺ユ敹鏁�
+                            receiveCount++;
 
-                        var deviceID = (DeviceType)jobject.Value<int>("Device_ID");
-                        //鏍规嵁璁惧绫诲瀷鍒涘缓璁惧瀵硅薄鐨勫疄渚�
-                        var device = this.NewDeviceObjectByDeviceId(deviceID, jobject, zbGateway);
-                        if (device != null)
-                        {
-                            try
+                            TimeOut = 0;
+                            var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+                            var totalNum = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["TotalNum"].ToString());
+                            if (totalNum == 0)
                             {
-                                //鍥炶皟鍑芥暟
-                                deviceComingAction?.Invoke(device);
+                                //杩欎釜缃戝叧娌℃湁璁惧
+                                canBreak = true;
+                                return;
                             }
-                            //Log鍑哄姏
-                            catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
+                            if (deviceCount == -1)
+                            {
+                                //璁剧疆闇�瑕佹帴鏀跺灏戜釜璁惧
+                                deviceCount = totalNum;
+                            }
 
-                            listDevice.Add(device);
-                        }
-                        if (deviceCount == receiveCount)
-                        {
-                            //璁惧鍏ㄩ儴鎺ユ敹瀹屾垚
-                            canBreak = true;
+                            var deviceID = (DeviceType)jobject.Value<int>("Device_ID");
+                            //鏍规嵁璁惧绫诲瀷鍒涘缓璁惧瀵硅薄鐨勫疄渚�
+                            var device = this.NewDeviceObjectByDeviceId(deviceID, jobject, zbGateway);
+                            if (device != null)
+                            {
+                                string mainkeys = this.GetDeviceMainKeys(device);
+                                //缃戝叧閲岄潰鏈夊彲鑳戒細鏈夐噸澶嶇殑鍥炶矾
+                                if (listCheck.Contains(mainkeys) == false)
+                                {
+                                    //鍥炶皟鍑芥暟
+                                    deviceComingAction?.Invoke(device);
+                                    listDevice.Add(device);
+
+                                    listCheck.Add(mainkeys);
+                                }
+                            }
                         }
                     }
+                    //Log鍑哄姏
+                    catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
+
+                    if (receiveCount == deviceCount && deviceCount != -1)
+                    {
+                        //璁惧鍏ㄩ儴鎺ユ敹瀹屾垚
+                        canBreak = true;
+                    }
                 }
-                catch { }
             };
 
             realWay.Actions += getDeviceAction;
@@ -1796,7 +1836,7 @@
                         string msg = Language.StringByID(R.MyInternationalizationString.uGetDeviceListFail);
                         msg += "\r\n[" + HdlGatewayLogic.Current.GetGatewayName(zbGateway).ToString() + "]";
                         msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "鍥炲瓒呮椂", false);
-                        this.ShowErrorMsg(msg);
+                        this.ShowTipMsg(msg);
                     }
                     return null;
                 }
@@ -1917,7 +1957,7 @@
                 }
             }
             //濡傛灉鏄皟鍏夊櫒
-            else if (mainDevice.Type == DeviceType.DimmableLight )
+            else if (mainDevice.Type == DeviceType.DimmableLight)
             {
                 mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
                 if (mainDevice.IsCustomizeImage == false)
@@ -1926,7 +1966,7 @@
                 }
             }
             //濡傛灉鏄僵鐏殑璇�
-            else if ( mainDevice.Type == DeviceType.ColorDimmableLight)
+            else if (mainDevice.Type == DeviceType.ColorDimmableLight)
             {
                 mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
                 if (mainDevice.IsCustomizeImage == false)
@@ -2232,7 +2272,7 @@
         /// </summary>
         AirSwitch = -4100,
         /// <summary>
-        /// 寰柇浜戞帶鍒跺櫒 闀滃儚id锛�4100
+        /// 鏅鸿兘绌哄紑 闀滃儚id锛�4100
         /// </summary>
         AirSwitch_CloudContr = 4100,
 

--
Gitblit v1.8.0