From f3e65daca7978b21b5888f49b1bf35e1a6e5d4fd Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 13 七月 2020 12:33:31 +0800
Subject: [PATCH] 新版本

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs |  163 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 152 insertions(+), 11 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index 7f5755c..402cf70 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -79,10 +79,10 @@
         /// <summary>
         /// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅�
         /// </summary>
-        public async Task<bool> RefreshSceneUIList()
+        public bool RefreshSceneUIList()
         {
             //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
-            var sceneList = await ZigBee.Device.Scene.GetSceneListAsync();
+            var sceneList = this.RefreshSceneListFromGateway();
             if (sceneList == null)
             {
                 return false;
@@ -95,6 +95,8 @@
                     continue;
                 }
                 listEsxit.Add(scene.ScenesId);
+                //鍒锋柊scene鐨勪俊鎭�
+                this.RefreshScene(scene);
             }
 
             var listDelete = new List<SceneUI>();
@@ -113,6 +115,108 @@
             }
 
             return true;
+        }
+
+        /// <summary>
+        /// 鍒锋柊scene鐨勪俊鎭�
+        /// </summary>
+        /// <param name="sceneInfo"></param>
+        private void RefreshScene(Scene.GetSceneAllInfo sceneInfo)
+        {
+            if (this.dicScenes.ContainsKey(sceneInfo.ScenesId) == true)
+            {
+                var localScene = this.dicScenes[sceneInfo.ScenesId];
+                //鍙埛鏂板悕瀛楀拰缁戝畾琛�
+                localScene.Name = sceneInfo.ScenesName;
+                localScene.AdjustTargetList.Clear();
+                localScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+                localScene.Save();
+            }
+            else
+            {
+                var newScene = new SceneUI();
+                newScene.Name = sceneInfo.ScenesName;
+                newScene.IconPath = "SceneIcon/0.png";
+                newScene.Id = sceneInfo.ScenesId;
+                newScene.AdjustTargetList.AddRange(sceneInfo.DeviceList);
+                //娣诲姞缂撳瓨
+                newScene.Save();
+                //鍔犲叆缂撳瓨
+                this.dicScenes[newScene.Id] = newScene;
+                //澶囦唤
+                HdlAutoBackupLogic.AddOrEditorFile(newScene.FileName);
+            }
+
+        }
+
+        /// <summary>
+        /// 浠庣綉鍏抽噸鏂板埛鏂板満鏅垪琛�
+        /// </summary>
+        /// <returns></returns>
+        private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway()
+        {
+            var mainGateway = ZbGateway.MainGateWay;
+            if (mainGateway == null)
+            {
+                //鑾峰彇缃戝叧瀵硅薄澶辫触
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetGatewayTagartFail));
+                return null;
+            }
+
+            //瓒呮椂鏃堕棿
+            int TimeOut = 0;
+            bool receiptAll = false;
+            bool canReceve = false;
+
+            var listScene = new List<Scene.GetSceneAllInfo>();
+            Action<string, string> action = (topic, message) =>
+            {
+                var gatewayID = topic.Split('/')[0];
+                var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
+                {
+                    var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
+                    listScene.Add(sceneGetAllInfo);
+
+                    //鏇村鎺ユ敹寰楀埌鍦烘櫙
+                    canReceve = true;
+                    if (sceneGetAllInfo.ScenesNum == sceneGetAllInfo.ScenesSum)
+                    {
+                        //鎺ユ敹瀹屾垚
+                        receiptAll = true;
+                        TimeOut = 0;
+                    }
+                }
+            };
+            mainGateway.Actions += action;
+
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+            mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+
+            int waitTime = 20 * 6;
+            while (receiptAll == false && TimeOut < waitTime)
+            {
+                //鍏ㄩ儴鎺ユ敹鎵嶉��鍑�
+                System.Threading.Thread.Sleep(50);
+                TimeOut++;
+            }
+            mainGateway.Actions -= action;
+            action = null;
+            if (canReceve == false)
+            {
+                //鑾峰彇鍦烘櫙鍒楄〃澶辫触,缃戝叧鍥炲瓒呮椂
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uGetSceneListFailAndTimeOut));
+                return null;
+            }
+            else if (receiptAll == false)
+            {
+                //缃戠粶涓嶇ǔ瀹氾紝鍦烘櫙鍒楄〃淇℃伅缂烘崯
+                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull));
+                return null;
+            }
+
+            return listScene;
         }
 
         #endregion
@@ -299,6 +403,8 @@
             {
                 nowRoom.ListSceneId.Add(scene.Id);
                 nowRoom.Save();
+                //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
             }
         }
 
@@ -512,6 +618,24 @@
                     HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
                 }
             }
+            //鍒犻櫎鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+            UserView.UserPage.Instance.RefreshAllForm = true;
+        }
+
+        /// <summary>
+        /// 娓呯┖鏈湴鍏ㄩ儴鐨勫満鏅暟鎹�
+        /// </summary>
+        public void DeleteAllLocalScene()
+        {
+            var listScene = new List<SceneUI>();
+            foreach (var scene in this.dicScenes.Values)
+            {
+                listScene.Add(scene);
+            }
+            foreach (var scene in listScene)
+            {
+                this.DeleteLocalScene(scene);
+            }
         }
 
         /// <summary>
@@ -540,12 +664,28 @@
             {
                 nowRoom.ListSceneId.Remove(scene.Id);
                 nowRoom.Save();
+                //鍙栨秷鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+                UserView.UserPage.Instance.RefreshAllForm = true;
             }
         }
 
         #endregion
 
         #region 鈻� 鑾峰彇鍦烘櫙___________________________
+
+        /// <summary>
+        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅�(鍖呭惈鏈垎閰�)
+        /// </summary>
+        /// <returns></returns>
+        public List<SceneUI> GetAllLocalScene()
+        {
+            //鎴块棿鐨勫満鏅斁鍦ㄥ墠闈�
+            var listScene = this.GetAllRoomSceneList();
+            //鏈垎閰嶇殑鍦烘櫙
+            var listUnalloctScene = this.GetUnalloctedScenes();
+            listScene.AddRange(listUnalloctScene);
+            return listScene;
+        }
 
         /// <summary>
         /// 閫氳繃鍦烘櫙id鑾峰彇鍦烘櫙
@@ -589,13 +729,14 @@
         /// <returns></returns>
         public string GetZoneById(int sceneId)
         {
-            var room =HdlRoomLogic.Current.GetRoomBySceneId(sceneId);
+            var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId);
             if (room == null)
             {
                 return null;
             }
-            var floorName = Shared.Common.Config.Instance.Home.GetFloorNameById(room.FloorId);
-            if (floorName == null)
+            var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
+            //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥�
+            if (string.IsNullOrEmpty(floorName))
             {
                 return room.Name;
             }
@@ -634,11 +775,6 @@
                     sceneUIs.Add(myScene);
                 }
             }
-
-            if (sceneUIs.Count == 0)
-            {
-                return null;
-            }
             return sceneUIs;
         }
 
@@ -652,6 +788,11 @@
             var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
             foreach (var room in listAllRoom)
             {
+                if (room.IsLove == true)
+                {
+                    //涓嶅寘鍚敹钘忔埧闂�
+                    continue;
+                }
                 foreach (int sceneId in room.ListSceneId)
                 {
                     if (this.dicScenes.ContainsKey(sceneId) == true)
@@ -825,7 +966,7 @@
         public List<string> GetAllSceneFile()
         {
             List<string> listSceneFile = new List<string>();
-            List<string> listAllFile = Global.FileListByHomeId();
+            List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile();
 
             foreach (string file in listAllFile)
             {

--
Gitblit v1.8.0