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 |   88 +++++++++++++++++++++++++------------------
 1 files changed, 51 insertions(+), 37 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index d732082..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
@@ -1745,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;
@@ -2258,7 +2272,7 @@
         /// </summary>
         AirSwitch = -4100,
         /// <summary>
-        /// 寰柇浜戞帶鍒跺櫒 闀滃儚id锛�4100
+        /// 鏅鸿兘绌哄紑 闀滃儚id锛�4100
         /// </summary>
         AirSwitch_CloudContr = 4100,
 

--
Gitblit v1.8.0