陈嘉乐
2020-07-10 48ba446936b51fffafa7c3600c0dadc6ac0e8c20
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>();
@@ -109,10 +111,103 @@
            foreach (var sceneui in listDelete)
            {
                //执行删除
                this.RemoveScene(sceneui);
                this.DeleteLocalScene(sceneui);
            }
            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;
            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);
                    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 (receiptAll == false)
            {
                //网络不稳定,场景列表信息缺损
                this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndSceneInfoIsNotFull));
                return null;
            }
            return listScene;
        }
        #endregion
@@ -149,6 +244,11 @@
                    return null;
                }
                NewScenesId = result1.getSceneIdData.NewScenesId;
            }
            else
            {
                //虚拟场景ID
                NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
            }
            //添加执行目标
            var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
@@ -298,32 +398,34 @@
        }
        /// <summary>
        /// 删除场景(这个只移除内存)
        /// 添加虚拟场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
        /// <param name="sceneId">指定场景id,如果为-1,则会内部自动编号(可能会重复)</param>
        /// <param name="sceneName">场景名字</param>
        /// <param name="listAdjustTarget">绑定目标</param>
        /// <returns></returns>
        public SceneUI AddVirtualScene(int sceneId, string sceneName, List<Scene.DeviceListData> listAdjustTarget)
        {
            //移除缓存
            if (i_room.ListSceneId.Contains(scene.Id) == true)
            if (sceneId == -1)
            {
                i_room.ListSceneId.Remove(scene.Id);
                i_room.Save();
                sceneId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
            }
        }
            //创建场景对象
            var newScene = new SceneUI();
            newScene.Name = sceneName;
            newScene.IconPath = "SceneIcon/0.png";
            //虚拟场景ID
            newScene.Id = sceneId;
            if (listAdjustTarget != null)
            {
                newScene.AdjustTargetList.AddRange(listAdjustTarget);
            }
            //添加缓存
            newScene.Save();
            //加入缓存
            this.dicScenes[newScene.Id] = newScene;
        /// <summary>
        /// 删除搜藏场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteLoveScene(SceneUI scene)
        {
            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
            //移除缓存
            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
            {
                nowRoom.ListSceneId.Remove(scene.Id);
                nowRoom.Save();
            }
            return newScene;
        }
        #endregion
@@ -468,10 +570,10 @@
        #region ■ 删除场景___________________________
        /// <summary>
        /// 移除场景--该仅进行了对本地场景数据的删除
        /// 删除本地场景数据
        /// </summary>
        /// <param name="sceneUI">Scene user interface.</param>
        public void RemoveScene(SceneUI sceneUI)
        public void DeleteLocalScene(SceneUI sceneUI)
        {
            //移除缓存
            this.dicScenes.Remove(sceneUI.Id);
@@ -504,6 +606,35 @@
                    Global.DeleteFilebyHomeId(sceneUI.IconPath);
                    HdlAutoBackupLogic.DeleteFile(sceneUI.IconPath);
                }
            }
        }
        /// <summary>
        /// 删除场景(这个只移除内存)
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteSceneFromRoom(Room i_room, SceneUI scene)
        {
            //移除缓存
            if (i_room.ListSceneId.Contains(scene.Id) == true)
            {
                i_room.ListSceneId.Remove(scene.Id);
                i_room.Save();
            }
        }
        /// <summary>
        /// 删除搜藏场景
        /// </summary>
        /// <param name="scene"></param>
        public void DeleteLoveScene(SceneUI scene)
        {
            var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
            //移除缓存
            if (nowRoom.ListSceneId.Contains(scene.Id) == true)
            {
                nowRoom.ListSceneId.Remove(scene.Id);
                nowRoom.Save();
            }
        }
@@ -553,13 +684,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);
            //更改代码:如果floorName=“”也要判断,否则有“,”
            if (string.IsNullOrEmpty(floorName))
            {
                return room.Name;
            }
@@ -598,11 +730,6 @@
                    sceneUIs.Add(myScene);
                }
            }
            if (sceneUIs.Count == 0)
            {
                return null;
            }
            return sceneUIs;
        }
@@ -616,6 +743,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)