From 0f5a53c7b36c27a0f2bec12e6119207edb6860f8 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期二, 29 十月 2019 14:29:21 +0800
Subject: [PATCH] 修改主页卡死问题

---
 ZigbeeApp/Shared/Phone/UserView/UserPage.cs |  439 +++++++++++++++++++++++-------------------------------
 1 files changed, 186 insertions(+), 253 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserView/UserPage.cs b/ZigbeeApp/Shared/Phone/UserView/UserPage.cs
index 13ca839..8d00507 100755
--- a/ZigbeeApp/Shared/Phone/UserView/UserPage.cs
+++ b/ZigbeeApp/Shared/Phone/UserView/UserPage.cs
@@ -67,208 +67,192 @@
         /// <param name="typeTag">Type tag.</param>
         public void DeviceInfoChange(CommonDevice common, string typeTag)
         {
-            ///
+            var myDevice = LocalDevice.Current.GetDevice(common.DeviceAddr, common.DeviceEpoint);
+            if (myDevice == null)
+            {
+                return;
+            }
             //璁惧涓婃姤鐘舵�佷腑 褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
             if (typeTag == "DeviceStatusReport")
             {
                 try
-                {
-                    for (int i = 0; i < Room.AllRoomDeviceUIList.Count; i++)
-                    {
-                        var deviceUI = Room.AllRoomDeviceUIList[i];
-                        if (deviceUI.CommonDevice == null)
-                        {
-                            //璁惧涓虹┖
-                            continue;
-                        }
-                        if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
-                        {
-                            //鍒ゆ柇鏄惁涓哄綋鍓嶈澶�
-                            continue;
-                        }
-                        switch (deviceUI.CommonDevice.Type)
-                        {
-                            case DeviceType.OnOffOutput:
-                                //寮�鍏冲姛鑳�
-                                if (common.DeviceStatusReport.CluterID == 6)
-                                {
-                                    var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight;
-                                    onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
-                                    //璁板綍銆佹洿鏂扮姸鎬�
-                                    if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
-                                    {
-                                        continue;
-                                    }
-                                    onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
-                                    //璁板綍鍥炲鏃堕棿
-                                    onOffOutputLight.LastDateTime = DateTime.Now;
-                                }
-                                //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
-                                if (common.DeviceStatusReport.CluterID == 3)
-                                {
-                                    var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
-                                    onOffOutputLight.IsOnline = 1;
-                                    //璁板綍鍥炲鏃堕棿
-                                    onOffOutputLight.LastDateTime = DateTime.Now;
-                                }
-                                break;
-
-                            case DeviceType.AirSwitch:
-                                //寮�鍏冲姛鑳�
-                                if (common.DeviceStatusReport.CluterID == 6)
-                                {
-                                    var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch;
-                                    airSwitch.DeviceStatusReport = common.DeviceStatusReport;
-                                    //璁板綍銆佹洿鏂扮姸鎬�
-                                    if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
-                                    {
-                                        return;
-                                    }
-                                    airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
-                                    //璁板綍鍥炲鏃堕棿
-                                    airSwitch.LastDateTime = DateTime.Now;
-
-                                }
-                                //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
-                                if (common.DeviceStatusReport.CluterID == 3)
-                                {
-                                    var airSwitch = deviceUI.CommonDevice as AirSwitch;
-                                    airSwitch.IsOnline = 1;
-                                    //璁板綍鍥炲鏃堕棿
-                                    airSwitch.LastDateTime = DateTime.Now;
-                                }
-                                break;
-
-                            case DeviceType.WindowCoveringDevice:
-                                if (common.DeviceStatusReport.CluterID == 258)
-                                {
-                                    var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
-                                    rollershade.DeviceStatusReport = common.DeviceStatusReport;
-                                    var attriButeList = rollershade.DeviceStatusReport.AttriBute;
-                                    if (attriButeList == null || attriButeList.Count == 0)
-                                    {
-                                        continue;
-                                    }
-                                    switch (attriButeList[0].AttributeId)
-                                    {
-                                        case 0:
-                                            rollershade.WcdType = attriButeList[0].AttriButeData;
-                                            rollershade.LastDateTime = DateTime.Now;
-                                            break;
-                                    }
-                                }
-                                if (common.DeviceStatusReport.CluterID == 3)
-                                {
-                                    var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
-                                    rollershade.IsOnline = 1;
-                                    //璁板綍鍥炲鏃堕棿
-                                    rollershade.LastDateTime = DateTime.Now;
-                                }
-                                break;
-
-                            case DeviceType.Thermostat:
-                                //AC鍔熻兘
-                                if (common.DeviceStatusReport.CluterID == 513)
-                                {
-                                    var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
-                                    ac.DeviceStatusReport = common.DeviceStatusReport;
-                                    var attriButeList = ac.DeviceStatusReport.AttriBute;
-                                    if (attriButeList == null || attriButeList.Count == 0)
-                                    {
-                                        continue;
-                                    }
-                                    switch (attriButeList[0].AttributeId)
-                                    {
-                                        case 0:
-                                            //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝
-                                            ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100;
-                                            ac.LastDateTime = DateTime.Now;
-                                            break;
-
-                                        case 17:
-                                            //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鍐锋俯搴︼紝瀹為檯娓╁害涓衡�淐oolingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
-                                            ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100;
-                                            ac.LastDateTime = DateTime.Now;
-                                            break;
-
-                                        case 18:
-                                            //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鐑俯搴︼紝瀹為檯娓╁害涓衡�淗eatingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
-                                            ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100;
-                                            ac.LastDateTime = DateTime.Now;
-                                            break;
-
-                                        case 4096:
-                                            //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勮嚜鍔ㄦ俯搴︼紝瀹為檯娓╁害涓衡�淎utoSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
-                                            ac.currentAutoSetpoint = (attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default;
-                                            ac.LastDateTime = DateTime.Now;
-                                            break;
-
-                                        case 28:
-                                            //姝ゅ睘鎬ф弿杩版亽娓╄澶囨澶勪簬鍝妯″紡
-                                            //Off = 0  Auto = 1 Cool = 3 Heat = 4 FanOnly = 7  Dry = 8
-                                            ac.currentSystemMode = attriButeList[0].AttriButeData;
-                                            ac.LastDateTime = DateTime.Now;
-                                            break;
-
-                                    }
-
-                                }
-                                //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
-                                if (common.DeviceStatusReport.CluterID == 3)
-                                {
-                                    var ac = deviceUI.CommonDevice as AC;
-                                    ac.IsOnline = 1;
-                                    //璁板綍鍥炲鏃堕棿
-                                    ac.LastDateTime = DateTime.Now;
-
-                                }
-                                break;
-
-                            case DeviceType.DimmableLight:
-                                //璋冨厜鐏姛鑳�
-                                //寮�鍏冲姛鑳�
-                                if (common.DeviceStatusReport.CluterID == 6)
-                                {
-                                    var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
-                                    dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
-                                    //璁板綍銆佹洿鏂扮姸鎬�
-                                    if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
-                                    {
-                                        return;
-                                    }
-                                    dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
-                                    //璁板綍鍥炲鏃堕棿
-                                    dimmableLight.LastDateTime = DateTime.Now;
-                                }
-                                //浜害
-                                if (common.DeviceStatusReport.CluterID == 8)
-                                {
-                                    var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
-                                    dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
-                                    var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
-                                    if (attriButeList == null || attriButeList.Count == 0)
-                                    {
-                                        continue;
-                                    }
-                                    switch (attriButeList[0].AttributeId)
-                                    {
-                                        case 0:
-                                            //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴�
-                                            dimmableLight.Level = attriButeList[0].AttriButeData;
-                                            dimmableLight.LastDateTime = DateTime.Now;
-                                            break;
-                                    }
-                                }
-                                //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
-                                if (common.DeviceStatusReport.CluterID == 3)
-                                {
-                                    var dimmableLight = deviceUI.CommonDevice as DimmableLight;
-                                    dimmableLight.IsOnline = 1;
-                                    //璁板綍鍥炲鏃堕棿
-                                    dimmableLight.LastDateTime = DateTime.Now;
-                                }
-                                break;
-                        }
+                {
+                    switch (myDevice.Type)
+                    {
+                        case DeviceType.OnOffOutput:
+                            //寮�鍏冲姛鑳�
+                            if (common.DeviceStatusReport.CluterID == 6)
+                            {
+                                var onOffOutputLight = (ToggleLight)myDevice;
+                                onOffOutputLight.DeviceStatusReport = common.DeviceStatusReport;
+                                //璁板綍銆佹洿鏂扮姸鎬�
+                                if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0)
+                                {
+                                    return;
+                                }
+                                onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData;
+                                //璁板綍鍥炲鏃堕棿
+                                onOffOutputLight.LastDateTime = DateTime.Now;
+                            }
+                            //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
+                            if (common.DeviceStatusReport.CluterID == 3)
+                            {
+                                myDevice.IsOnline = 1;
+                                //璁板綍鍥炲鏃堕棿
+                                myDevice.LastDateTime = DateTime.Now;
+                            }
+                            break;
+
+                        case DeviceType.AirSwitch:
+                            //寮�鍏冲姛鑳�
+                            if (common.DeviceStatusReport.CluterID == 6)
+                            {
+                                var airSwitch = (AirSwitch)myDevice;
+                                airSwitch.DeviceStatusReport = common.DeviceStatusReport;
+                                //璁板綍銆佹洿鏂扮姸鎬�
+                                if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0)
+                                {
+                                    return;
+                                }
+                                airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData;
+                                //璁板綍鍥炲鏃堕棿
+                                airSwitch.LastDateTime = DateTime.Now;
+
+                            }
+                            //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
+                            if (common.DeviceStatusReport.CluterID == 3)
+                            {
+                                myDevice.IsOnline = 1;
+                                //璁板綍鍥炲鏃堕棿
+                                myDevice.LastDateTime = DateTime.Now;
+                            }
+                            break;
+
+                        case DeviceType.WindowCoveringDevice:
+                            if (common.DeviceStatusReport.CluterID == 258)
+                            {
+                                var rollershade = (Rollershade)myDevice;
+                                rollershade.DeviceStatusReport = common.DeviceStatusReport;
+                                var attriButeList = rollershade.DeviceStatusReport.AttriBute;
+                                if (attriButeList == null || attriButeList.Count == 0)
+                                {
+                                    return;
+                                }
+                                switch (attriButeList[0].AttributeId)
+                                {
+                                    case 0:
+                                        rollershade.WcdType = attriButeList[0].AttriButeData;
+                                        rollershade.LastDateTime = DateTime.Now;
+                                        break;
+                                }
+                            }
+                            if (common.DeviceStatusReport.CluterID == 3)
+                            {
+                                myDevice.IsOnline = 1;
+                                //璁板綍鍥炲鏃堕棿
+                                myDevice.LastDateTime = DateTime.Now;
+                            }
+                            break;
+
+                        case DeviceType.Thermostat:
+                            //AC鍔熻兘
+                            if (common.DeviceStatusReport.CluterID == 513)
+                            {
+                                var ac = (AC)myDevice;
+                                ac.DeviceStatusReport = common.DeviceStatusReport;
+                                var attriButeList = ac.DeviceStatusReport.AttriBute;
+                                if (attriButeList == null || attriButeList.Count == 0)
+                                {
+                                    return;
+                                }
+                                switch (attriButeList[0].AttributeId)
+                                {
+                                    case 0:
+                                        //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝
+                                        ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100;
+                                        ac.LastDateTime = DateTime.Now;
+                                        break;
+
+                                    case 17:
+                                        //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鍐锋俯搴︼紝瀹為檯娓╁害涓衡�淐oolingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
+                                        ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100;
+                                        ac.LastDateTime = DateTime.Now;
+                                        break;
+
+                                    case 18:
+                                        //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鐑俯搴︼紝瀹為檯娓╁害涓衡�淗eatingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
+                                        ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100;
+                                        ac.LastDateTime = DateTime.Now;
+                                        break;
+
+                                    case 4096:
+                                        //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勮嚜鍔ㄦ俯搴︼紝瀹為檯娓╁害涓衡�淎utoSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆�
+                                        ac.currentAutoSetpoint = (attriButeList[0].AttriButeData / 100 > ACControlBase.Temperature_High || attriButeList[0].AttriButeData / 100 < ACControlBase.Temperature_Low) ? attriButeList[0].AttriButeData / 100 : ACControlBase.Temperature_Default;
+                                        ac.LastDateTime = DateTime.Now;
+                                        break;
+
+                                    case 28:
+                                        //姝ゅ睘鎬ф弿杩版亽娓╄澶囨澶勪簬鍝妯″紡
+                                        //Off = 0  Auto = 1 Cool = 3 Heat = 4 FanOnly = 7  Dry = 8
+                                        ac.currentSystemMode = attriButeList[0].AttriButeData;
+                                        ac.LastDateTime = DateTime.Now;
+                                        break;
+
+                                }
+
+                            }
+                            //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
+                            if (common.DeviceStatusReport.CluterID == 3)
+                            {
+                                myDevice.IsOnline = 1;
+                                //璁板綍鍥炲鏃堕棿
+                                myDevice.LastDateTime = DateTime.Now;
+                            }
+                            break;
+
+                        case DeviceType.DimmableLight:
+                            //璋冨厜鐏姛鑳�
+                            //寮�鍏冲姛鑳�
+                            if (common.DeviceStatusReport.CluterID == 6)
+                            {
+                                var dimmableLight = (DimmableLight)myDevice;
+                                dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
+                                //璁板綍銆佹洿鏂扮姸鎬�
+                                if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0)
+                                {
+                                    return;
+                                }
+                                dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData;
+                                //璁板綍鍥炲鏃堕棿
+                                dimmableLight.LastDateTime = DateTime.Now;
+                            }
+                            //浜害
+                            if (common.DeviceStatusReport.CluterID == 8)
+                            {
+                                var dimmableLight = (DimmableLight)myDevice;
+                                dimmableLight.DeviceStatusReport = common.DeviceStatusReport;
+                                var attriButeList = dimmableLight.DeviceStatusReport.AttriBute;
+                                if (attriButeList == null || attriButeList.Count == 0)
+                                {
+                                    return;
+                                }
+                                switch (attriButeList[0].AttributeId)
+                                {
+                                    case 0:
+                                        //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴�
+                                        dimmableLight.Level = attriButeList[0].AttriButeData;
+                                        dimmableLight.LastDateTime = DateTime.Now;
+                                        break;
+                                }
+                            }
+                            //褰揅luterID=3,灏辫瘉鏄庤璁惧鍦ㄧ嚎锛岀洿鎺ユ爣璁�
+                            if (common.DeviceStatusReport.CluterID == 3)
+                            {
+                                myDevice.IsOnline = 1;
+                                //璁板綍鍥炲鏃堕棿
+                                myDevice.LastDateTime = DateTime.Now;
+                            }
+                            break;
                     }
                 }
                 catch (Exception ex)
@@ -278,61 +262,10 @@
             }
             //璁惧鍦ㄧ嚎鐘舵�佷笂鎶�
             else if (typeTag == "OnlineStatusChange")
-            {
-                try
-                {
-                    for (int i = 0; i < Room.AllRoomDeviceUIList.Count; i++)
-                    {
-                        var deviceUI = Room.AllRoomDeviceUIList[i];
-                        if (deviceUI.CommonDevice == null)
-                        {
-                            //璁惧涓虹┖鎴栬�呮帶浠朵负绌�
-                            continue;
-                        }
-                        if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint)
-                        {
-                            //鍒ゆ柇鏄惁涓哄綋鍓嶈澶�
-                            continue;
-                        }
-                        switch (deviceUI.CommonDevice.Type)
-                        {
-                            case DeviceType.OnOffOutput:
-                                var onOffOutputLight = deviceUI.CommonDevice as ToggleLight;
-                                onOffOutputLight.IsOnline = common.IsOnline;
-                                //璁板綍鍥炲鏃堕棿
-                                onOffOutputLight.LastDateTime = DateTime.Now;
-                                break;
-                            case DeviceType.AirSwitch:
-                                var airSwitch = deviceUI.CommonDevice as AirSwitch;
-                                airSwitch.IsOnline = common.IsOnline;
-                                //璁板綍鍥炲鏃堕棿
-                                airSwitch.LastDateTime = DateTime.Now;
-                                break;
-                            case DeviceType.WindowCoveringDevice:
-                                var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade;
-                                rollershade.IsOnline = common.IsOnline;
-                                //璁板綍鍥炲鏃堕棿
-                                rollershade.LastDateTime = DateTime.Now;
-                                break;
-                            case DeviceType.Thermostat:
-                                var ac = deviceUI.CommonDevice as ZigBee.Device.AC;
-                                ac.IsOnline = common.IsOnline;
-                                //璁板綍鍥炲鏃堕棿
-                                ac.LastDateTime = DateTime.Now;
-                                break;
-                            case DeviceType.DimmableLight:
-                                var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight;
-                                dimmableLight.IsOnline = common.IsOnline;
-                                //璁板綍鍥炲鏃堕棿
-                                dimmableLight.LastDateTime = DateTime.Now;
-                                break;
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    System.Console.WriteLine($"userpage鍔熻兘鍒锋柊-Error:{ex.Message}");
-                }
+            {
+                myDevice.IsOnline = common.IsOnline;
+                //璁板綍鍥炲鏃堕棿
+                myDevice.LastDateTime = DateTime.Now;
             }
         }
         /// <summary>

--
Gitblit v1.8.0