From 5ce9a5b3706b7c609d832f73763a853ffd415c85 Mon Sep 17 00:00:00 2001
From: lss <lsc@hdlchina.com.cn>
Date: 星期四, 09 六月 2022 13:40:37 +0800
Subject: [PATCH] 2022-6-9 修复推送
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs | 2081 +++++++++++++++++++++++++++++++---------------------------
1 files changed, 1,116 insertions(+), 965 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
old mode 100755
new mode 100644
index 58bbc9f..7dd4fc8
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -1,965 +1,1116 @@
-锘縰sing Shared.Common;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using ZigBee.Device;
-
-namespace Shared.Phone.UserCenter
-{
- /// <summary>
- /// 鍦烘櫙鐨勯�昏緫
- /// </summary>
- public class HdlSceneLogic
- {
- #region 鈻� 鍙橀噺澹版槑___________________________
-
- /// <summary>
- /// 鍦烘櫙鐨勯�昏緫
- /// </summary>
- private static HdlSceneLogic m_Current = null;
- /// <summary>
- /// 鍦烘櫙鐨勯�昏緫
- /// </summary>
- public static HdlSceneLogic Current
- {
- get
- {
- if (m_Current == null)
- {
- m_Current = new HdlSceneLogic();
- }
- return m_Current;
- }
- }
-
- /// <summary>
- /// 鍦烘櫙瀵硅薄
- /// </summary>
- private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>();
-
- #endregion
-
- #region 鈻� 鍒锋柊鍦烘櫙___________________________
-
- /// <summary>
- /// 浠庢湰鍦板埛鏂板満鏅�
- /// </summary>
- public void ReFreshByLocal()
- {
- //娓呯┖鍦烘櫙
- this.dicScenes.Clear();
- //鑾峰彇鍏ㄩ儴鏂囦欢
- var listFile = this.GetAllSceneFile();
- foreach (string fileName in listFile)
- {
- try
- {
- var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName));
- var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo);
- if (tempScene == null)
- {
- continue;
- }
- this.dicScenes[tempScene.Id] = tempScene;
- }
- catch(Exception ex)
- {
- HdlLogLogic.Current.WriteLog(ex);
- try
- {
- //鍒犳帀閿欒鏂囦欢
- Global.DeleteFilebyHomeId(fileName);
- }
- catch { }
- }
- }
- }
-
- /// <summary>
- /// 鍒锋柊鏈湴鐨勫叏閮ㄥ満鏅�
- /// </summary>
- public bool RefreshSceneUIList()
- {
- //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
- var sceneList = this.RefreshSceneListFromGateway();
- if (sceneList == null)
- {
- return false;
- }
- var listEsxit = new HashSet<int>();
- foreach (var scene in sceneList)
- {
- if (scene == null)
- {
- continue;
- }
- listEsxit.Add(scene.ScenesId);
- //鍒锋柊scene鐨勪俊鎭�
- this.RefreshScene(scene);
- }
-
- var listDelete = new List<SceneUI>();
- foreach (var scId in this.dicScenes.Keys)
- {
- if (listEsxit.Contains(scId) == false)
- {
- //鍒犻櫎鐨勫璞�
- listDelete.Add(this.dicScenes[scId]);
- }
- }
- foreach (var sceneui in listDelete)
- {
- //鎵ц鍒犻櫎
- 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
-
- #region 鈻� 娣诲姞鍦烘櫙___________________________
-
- /// <summary>
- /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊)
- /// </summary>
- /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
- /// <param name="listAdjustTarget">鎵ц鐩爣</param>
- /// <returns></returns>
- public async Task<SceneUI> AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
- {
- int NewScenesId = -1;
- //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
- if (Common.Config.Instance.Home.IsVirtually == false)
- {
- var result1 = await Scene.GetSceneNewIdAsync(sceneName);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
- if (error != null)
- {
- this.ShowErrorMsg(error);
- return null;
- }
- if (result1 == null || result1.getSceneIdData == null)
- {
- //娣诲姞鍦烘櫙澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
- this.ShowTipMsg(msg1);
- return null;
- }
- NewScenesId = result1.getSceneIdData.NewScenesId;
- }
- else
- {
- //铏氭嫙鍦烘櫙ID
- NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
- }
- //娣诲姞鎵ц鐩爣
- var listSuccess = await this.AddTargetToScene(NewScenesId, listAdjustTarget);
- if (listSuccess == null)
- {
- return null;
- }
-
- //鍒涘缓鍦烘櫙瀵硅薄
- var newScene = new SceneUI();
- newScene.Name = sceneName;
- newScene.Id = NewScenesId;
- newScene.AdjustTargetList.AddRange(listSuccess);
- //娣诲姞缂撳瓨
- newScene.Save();
- //鍔犲叆缂撳瓨
- this.dicScenes[newScene.Id] = newScene;
-
- return newScene;
- }
-
- /// <summary>
- /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
- /// </summary>
- /// <param name="sceneId">鍦烘櫙Id</param>
- /// <param name="listAdjustTarget">鎵ц鐩爣</param>
- /// <returns></returns>
- private async Task<List<Scene.DeviceListData>> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
- {
- //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- //涓嶉渶瑕佹洿鏂扮綉鍏�
- return listAdjustTarget;
- }
- var listSuccess = new List<Scene.DeviceListData>();
- for (int i = 0; i < listAdjustTarget.Count; i++)
- {
- var data = listAdjustTarget[i];
- var addData = new Scene.AddSceneMemberData();
- if (data.Type == 0)
- {
- //璁惧
- addData.Type = 0;
- addData.ScenesId = sceneId;
- addData.DeviceAddr = data.DeviceAddr;
- addData.Epoint = data.Epoint;
- addData.TaskList = data.TaskList;
- addData.DelayTime = 0;
- addData.MemberNumber = i + 1;
- }
- else if (data.Type == 1)
- {
- //鍦烘櫙
- addData.Type = 1;
- addData.ScenesId = sceneId;
- addData.ElseScenesId = data.ElseScenesId;
- addData.DelayTime = 0;
- addData.MemberNumber = i + 1;
- }
- else
- {
- //寤舵椂
- addData.Type = 2;
- addData.ScenesId = sceneId;
- addData.DelayTime = data.DelayTime;
- addData.MemberNumber = i + 1;
- }
-
- //娣诲姞鏂版垚鍛� 杩斿洖缁撴灉
- var result2 = await Scene.AddSceneMemberAsync(addData);
- if (result2 == null || result2.addSceneMemberResponseData == null
- || result2.addSceneMemberResponseData.Result != 1)
- {
- continue;
- }
- //鎷ユ湁鎴愬姛鐨�
- listSuccess.Add(data);
- }
- if (listSuccess.Count == 0)
- {
- //娣诲姞鎵ц鐩爣澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail);
- this.ShowTipMsg(msg1);
- return null;
- }
- //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず
- if (listSuccess.Count != listAdjustTarget.Count)
- {
- //涓埆鎵ц鐩爣娣诲姞澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail);
- this.ShowTipMsg(msg1);
- }
- return listSuccess;
- }
-
- /// <summary>
- /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
- /// </summary>
- /// <param name="scene">Scene.</param>
- public void AddSceneToRoom(Room i_room, SceneUI scene)
- {
- //娣诲姞缂撳瓨
- if (i_room.ListSceneId.Contains(scene.Id) == false)
- {
- i_room.ListSceneId.Add(scene.Id);
- i_room.Save();
- }
- }
-
- /// <summary>
- /// 鏀瑰彉鍦烘櫙鎴块棿
- /// </summary>
- /// <param name="scene">鍦烘櫙瀵硅薄</param>
- /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
- public void ChangedSceneRoom(SceneUI scene, string newRoomId)
- {
- var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
- if (room != null)
- {
- //鎴块棿娌℃湁鏀瑰彉
- if (room.Id == newRoomId)
- {
- return;
- }
- //浠庢埧闂翠腑绉婚櫎缂撳瓨
- this.DeleteSceneFromRoom(room, scene);
- }
- //娣诲姞杩涙柊鎴块棿
- var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
- this.AddSceneToRoom(newRoom, scene);
- }
-
- /// <summary>
- /// 娣诲姞鎼滆棌鍦烘櫙
- /// </summary>
- /// <param name="scene">Scene.</param>
- public void AddLoveScene(SceneUI scene)
- {
- var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
- //娣诲姞缂撳瓨
- if (nowRoom.ListSceneId.Contains(scene.Id) == false)
- {
- nowRoom.ListSceneId.Add(scene.Id);
- nowRoom.Save();
- }
- }
-
- /// <summary>
- /// 娣诲姞铏氭嫙鍦烘櫙
- /// </summary>
- /// <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 (sceneId == -1)
- {
- 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;
-
- return newScene;
- }
-
- #endregion
-
- #region 鈻� 淇敼鍦烘櫙___________________________
-
- /// <summary>
- /// 淇敼缃戝叧鐨勫満鏅�
- /// </summary>
- /// <param name="sceneUI">鍦烘櫙瀵硅薄</param>
- /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param>
- /// <returns></returns>
- public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
- {
- //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
- sceneUI.AdjustTargetList.Clear();
- sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
- sceneUI.Save();
- return true;
- }
-
- //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
- var deleteData = new Scene.SceneRemoveMemberData();
- var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
- for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
- {
- var data = sceneUI.AdjustTargetList[i];
- var removeData = new Scene.RemoveSceneDeviceListInfo();
- if (data.Type == 0)
- {
- //璁惧
- removeData.Type = 0;
- removeData.DeviceAddr = data.DeviceAddr;
- removeData.Epoint = data.Epoint;
- removeData.MemberNumber = data.MemberNumber;
- }
- else if (data.Type == 1)
- {
- //鍦烘櫙
- removeData.Type = 1;
- removeData.ElseScenesId = data.ElseScenesId;
- removeData.MemberNumber = data.MemberNumber;
- }
- else
- {
- //寤舵椂
- removeData.Type = 2;
- removeData.DelayTime = data.DelayTime;
- removeData.MemberNumber = data.MemberNumber;
- }
- //鎷ユ湁鎴愬姛鐨�
- deleteTargetData.Add(removeData);
- }
- deleteData.DeviceList = deleteTargetData;
- deleteData.ScenesId = sceneUI.Id;
- //鎵ц娓呯┖
- var result = await Scene.RemoveSceneMemberAsync(deleteData);
- if (result == null || result.removeSceneMemberResponseData == null)
- {
- //鍒濆鍖栨墽琛岀洰鏍囧け璐�
- string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
- this.ShowTipMsg(msg1);
- return false;
- }
- if (result.removeSceneMemberResponseData.Result != 0)
- {
- //鍒濆鍖栨墽琛岀洰鏍囧け璐�
- string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
- this.ShowTipMsg(msg1);
- return false;
- }
- //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
- sceneUI.AdjustTargetList.Clear();
-
- //鐒跺悗閲嶆柊娣诲姞
- var listSuccess = await this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
- if (listSuccess == null)
- {
- return false;
- }
- sceneUI.AdjustTargetList.AddRange(listSuccess);
- sceneUI.Save();
-
- return true;
- }
-
- /// <summary>
- /// 淇敼缃戝叧鐨勫満鏅悕绉�
- /// </summary>
- /// <param name="scene">鍦烘櫙瀵硅薄</param>
- /// <param name="newName">鏂扮殑鍚嶅瓧</param>
- /// <returns></returns>
- public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
- {
- //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- //涓嶉渶瑕佹洿鏂扮綉鍏�
- return true;
- }
- var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
- if (error != null)
- {
- this.ShowErrorMsg(error);
- return false;
- }
- if (result1 == null || result1.sceneRenameResponseData == null)
- {
- //淇敼鍦烘櫙鍚嶇О澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
- this.ShowTipMsg(msg1);
- return false;
- }
- if (result1.sceneRenameResponseData.Result == 2)
- {
- //鐩爣鍦烘櫙涓嶅瓨鍦�
- string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
- this.ShowTipMsg(msg1);
- return false;
- }
- if (result1.sceneRenameResponseData.Result != 1)
- {
- //淇敼鍦烘櫙鍚嶇О澶辫触
- string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
- this.ShowTipMsg(msg1);
- return false;
- }
- return true;
- }
-
- #endregion
-
- #region 鈻� 鍒犻櫎鍦烘櫙___________________________
-
- /// <summary>
- /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁
- /// </summary>
- /// <param name="sceneUI">Scene user interface.</param>
- public void DeleteLocalScene(SceneUI sceneUI)
- {
- //绉婚櫎缂撳瓨
- this.dicScenes.Remove(sceneUI.Id);
- var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id);
- if (room != null)
- {
- room.ListSceneId.Remove(sceneUI.Id);
- room.Save();
- }
-
- //绉婚櫎鍠滅埍
- var roomLove = HdlRoomLogic.Current.GetLoveRoom();
- if (roomLove.ListSceneId.Contains(sceneUI.Id) == true)
- {
- roomLove.ListSceneId.Remove(sceneUI.Id);
- roomLove.Save();
- }
-
- //鍒犻櫎鏂囦欢
- if (Global.IsExistsByHomeId(sceneUI.FileName) == true)
- {
- Global.DeleteFilebyHomeId(sceneUI.FileName);
- HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
- }
- //鍒犻櫎鍥剧墖
- if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2)
- {
- if (Global.IsExistsByHomeId(sceneUI.IconPath))
- {
- 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();
- }
- }
-
- #endregion
-
- #region 鈻� 鑾峰彇鍦烘櫙___________________________
-
- /// <summary>
- /// 閫氳繃鍦烘櫙id鑾峰彇鍦烘櫙
- /// </summary>
- /// <returns>The scene UIB y scene identifier.</returns>
- /// <param name="sceneId">Scene identifier.</param>
- public SceneUI GetSceneUIBySceneId(int sceneId)
- {
- if (this.dicScenes.ContainsKey(sceneId) == true)
- {
- return this.dicScenes[sceneId];
- }
- return null;
- }
-
- /// <summary>
- /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅�
- /// </summary>
- /// <param name="floorId"></param>
- /// <returns></returns>
- public List<SceneUI> GetSameFloorScenes(string floorId)
- {
- List<SceneUI> sceneUIs = new List<SceneUI>();
- var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId);
- foreach (var r in rooms)
- {
- foreach (int sceneId in r.ListSceneId)
- {
- if (this.dicScenes.ContainsKey(sceneId) == true)
- {
- sceneUIs.Add(this.dicScenes[sceneId]);
- }
- }
- }
- return sceneUIs;
- }
-
- /// <summary>
- /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧)
- /// </summary>
- /// <returns></returns>
- public string GetZoneById(int 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)
- {
- return room.Name;
- }
- return $"{floorName},{room.Name}";
- }
-
- /// <summary>
- /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅�
- /// </summary>
- /// <returns></returns>
- public List<SceneUI> GetUnalloctedScenes()
- {
- List<SceneUI> sceneUIs = new List<SceneUI>();
- //宸茬粡瀛樺湪鐨勫満鏅�
- var listEsxit = new HashSet<int>();
- var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
- foreach (var room in listAllRoom)
- {
- if (room.IsLove == true)
- {
- //涓嶅寘鍚敹钘忔埧闂�
- continue;
- }
- foreach (int sceneId in room.ListSceneId)
- {
- if (listEsxit.Contains(sceneId) == false)
- {
- listEsxit.Add(sceneId);
- }
- }
- }
- foreach (var myScene in this.dicScenes.Values)
- {
- if (listEsxit.Contains(myScene.Id) == false)
- {
- sceneUIs.Add(myScene);
- }
- }
-
- if (sceneUIs.Count == 0)
- {
- return null;
- }
- return sceneUIs;
- }
-
- /// <summary>
- /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅�
- /// </summary>
- /// <returns></returns>
- public List<SceneUI> GetAllRoomSceneList()
- {
- List<SceneUI> sceneUIs = new List<SceneUI>();
- var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
- foreach (var room in listAllRoom)
- {
- foreach (int sceneId in room.ListSceneId)
- {
- if (this.dicScenes.ContainsKey(sceneId) == true)
- {
- sceneUIs.Add(this.dicScenes[sceneId]);
- }
- }
- }
-
- return sceneUIs;
- }
-
- /// <summary>
- /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅�
- /// </summary>
- /// <returns></returns>
- public List<SceneUI> GetRoomSceneList(Room i_room)
- {
- List<SceneUI> sceneUIs = new List<SceneUI>();
- foreach (int sceneId in i_room.ListSceneId)
- {
- if (this.dicScenes.ContainsKey(sceneId) == true)
- {
- sceneUIs.Add(this.dicScenes[sceneId]);
- }
- }
-
- return sceneUIs;
- }
-
- #endregion
-
- #region 鈻� 璋冪敤鍦烘櫙___________________________
-
- /// <summary>
- /// 璋冪敤鍦烘櫙
- /// </summary>
- /// <param name="scene"></param>
- /// <returns></returns>
- public async Task<bool> ControlScene(SceneUI scene)
- {
- if (scene.RemainTime > 0)
- {
- HdlThreadLogic.Current.RunMain(() =>
- {
- //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
- var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
- msgContr.Show();
- });
- return false;
- }
- //濡傛灉鏄櫄鎷熶綇瀹�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- //涓嶈皟鐢ㄧ綉鍏�
- return true;
- }
-
- //鎵ц璋冪敤鍦烘櫙
- var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
- if (result == null || result.sceneOpenData == null)
- {
- //鎺у埗鍦烘櫙澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- HdlThreadLogic.Current.RunMain(() =>
- {
- //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
- var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
- msgContr.Show();
- });
- return false;
- }
- if (result.sceneOpenData.Result == 0)
- {
- //鎺у埗鍦烘櫙澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
- HdlThreadLogic.Current.RunMain(() =>
- {
- //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
- var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
- msgContr.Show();
- });
- return false;
- }
- return true;
- }
-
- #endregion
-
- #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
-
- /// <summary>
- /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
- /// </summary>
- /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
- /// <returns></returns>
- public async Task<List<Scene.DeviceListData>> GetAdjustTargetList(SceneUI i_scene)
- {
- //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- var listAdjustTarget = new List<Scene.DeviceListData>();
- listAdjustTarget.AddRange(i_scene.AdjustTargetList);
- return listAdjustTarget;
- }
-
- var result = await Scene.GetSceneDeviceListAsync(i_scene.Id);
- //鍏遍�氶敊璇娴�
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
- {
- this.ShowErrorMsg(error);
- return null;
- }
- if (result == null || result.getSceneDeviceListInfo == null)
- {
- //鑾峰彇鎵ц鐩爣澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
-
- this.ShowTipMsg(msg);
- return null;
- }
- i_scene.AdjustTargetList = result.getSceneDeviceListInfo.DeviceList;
- //淇濆瓨缂撳瓨
- i_scene.Save(false);
-
- var listData = new List<Scene.DeviceListData>();
- listData.AddRange(result.getSceneDeviceListInfo.DeviceList);
-
- return listData;
- }
- #endregion
-
- #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
-
- /// <summary>
- /// 寮�鍚欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
- /// </summary>
- public void StartDelayTimeThread(SceneUI i_scene)
- {
- if (i_scene.RemainThreadAction == true)
- {
- //绾跨▼鍦ㄨ繍琛屼腑
- return;
- }
- i_scene.RemainThreadAction = true;
-
- HdlThreadLogic.Current.RunThread(() =>
- {
- while (i_scene.RemainTime > 0)
- {
- System.Threading.Thread.Sleep(1000);
- i_scene.RemainTime--;
- }
- i_scene.RemainThreadAction = false;
- });
- }
-
- #endregion
-
- #region 鈻� 涓�鑸柟娉昣__________________________
-
- /// <summary>
- /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
- /// </summary>
- /// <returns></returns>
- public List<string> GetAllSceneFile()
- {
- List<string> listSceneFile = new List<string>();
- List<string> listAllFile = Global.FileListByHomeId();
-
- foreach (string file in listAllFile)
- {
- if (file.StartsWith("Scene_") == false)
- {
- //濡傛灉涓嶆槸鍦烘櫙鏂囦欢
- continue;
- }
- listSceneFile.Add(file);
- }
- return listSceneFile;
- }
-
- /// <summary>
- /// 鏄剧ず閿欒淇℃伅绐楀彛
- /// </summary>
- /// <param name="msg"></param>
- private void ShowErrorMsg(string msg)
- {
- Application.RunOnMainThread(() =>
- {
- var contr = new ShowMsgControl(ShowMsgType.Error, msg);
- contr.Show();
- });
- }
-
- /// <summary>
- /// 鏄剧ずTip淇℃伅绐楀彛
- /// </summary>
- /// <param name="msg"></param>
- private void ShowTipMsg(string msg)
- {
- Application.RunOnMainThread(() =>
- {
- var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
- contr.Show();
- });
- }
-
- #endregion
- }
-}
+锘縰sing Shared.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+ /// <summary>
+ /// 鍦烘櫙鐨勯�昏緫
+ /// </summary>
+ public class HdlSceneLogic
+ {
+ #region 鈻� 鍙橀噺澹版槑___________________________
+
+ /// <summary>
+ /// 鍦烘櫙鐨勯�昏緫
+ /// </summary>
+ private static HdlSceneLogic m_Current = null;
+ /// <summary>
+ /// 鍦烘櫙鐨勯�昏緫
+ /// </summary>
+ public static HdlSceneLogic Current
+ {
+ get
+ {
+ if (m_Current == null)
+ {
+ m_Current = new HdlSceneLogic();
+ }
+ return m_Current;
+ }
+ }
+
+ /// <summary>
+ /// 鍦烘櫙瀵硅薄
+ /// </summary>
+ private Dictionary<int, SceneUI> dicScenes = new Dictionary<int, SceneUI>();
+
+ #endregion
+
+ #region 鈻� 鍒锋柊鍦烘櫙___________________________
+
+ /// <summary>
+ /// 浠庢湰鍦板埛鏂板満鏅�
+ /// </summary>
+ public void ReFreshByLocal()
+ {
+ //娓呯┖鍦烘櫙
+ this.dicScenes.Clear();
+ //鑾峰彇鍏ㄩ儴鏂囦欢
+ var listFile = this.GetAllSceneFile();
+ foreach (string fileName in listFile)
+ {
+ try
+ {
+ var jsonInfo = Encoding.UTF8.GetString(Global.ReadFileByHomeId(fileName));
+ var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneUI>(jsonInfo);
+ if (tempScene == null)
+ {
+ continue;
+ }
+ this.dicScenes[tempScene.Id] = tempScene;
+ }
+ catch(Exception ex)
+ {
+ HdlLogLogic.Current.WriteLog(ex);
+ try
+ {
+ //鍒犳帀閿欒鏂囦欢
+ Global.DeleteFilebyHomeId(fileName);
+ }
+ catch { }
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鍒锋柊浠庣綉鍏冲埛鏂板叏閮ㄧ殑鍦烘櫙
+ /// </summary>
+ /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+ public bool RefreshSceneUIList(bool useLocalConnect)
+ {
+ if (Config.Instance.Home.TemplateMode == 2 && Config.Instance.Home.SendTemplateSuccess == false)
+ {
+ //濡傛灉鏄湁妯℃澘鏈夎澶囨ā寮�,浣嗘槸杩樻病鏈夊鍏ユ垚鍔熺殑鎯呭喌涓�,涓嶅厑璁稿埛鏂板満鏅垪琛�
+ return true;
+ }
+ //鑾峰彇缃戝叧瀛樺湪鐨勫満鏅�
+ var sceneList = this.RefreshSceneListFromGateway(useLocalConnect);
+ if (sceneList == null)
+ {
+ return false;
+ }
+ var listEsxit = new HashSet<int>();
+ foreach (var scene in sceneList)
+ {
+ if (scene == null)
+ {
+ continue;
+ }
+ listEsxit.Add(scene.ScenesId);
+ //鍒锋柊scene鐨勪俊鎭�
+ this.RefreshScene(scene);
+ }
+
+ var listDelete = new List<SceneUI>();
+ foreach (var scId in this.dicScenes.Keys)
+ {
+ if (listEsxit.Contains(scId) == false)
+ {
+ //鍒犻櫎鐨勫璞�
+ listDelete.Add(this.dicScenes[scId]);
+ }
+ }
+ foreach (var sceneui in listDelete)
+ {
+ //鎵ц鍒犻櫎
+ 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>
+ /// <param name="useLocalConnect">鏄惁寮哄埗浣跨敤鏈湴杩炴帴鍙戦��</param>
+ private List<Scene.GetSceneAllInfo> RefreshSceneListFromGateway(bool useLocalConnect)
+ {
+ 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());
+ if (sceneGetAllInfo.ScenesSum != 0)
+ {
+ //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵
+ 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 } };
+ if (useLocalConnect == false)
+ {
+ mainGateway.Send(("Scene/GetAllInfo"), System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+ }
+ else
+ {
+ mainGateway.SendLocation(("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
+
+ #region 鈻� 娣诲姞鍦烘櫙___________________________
+
+ /// <summary>
+ /// 娣诲姞鏂板満鏅埌缃戝叧(杩斿洖null浠h〃鍑洪敊)
+ /// </summary>
+ /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <returns></returns>
+ public SceneUI AddNewSceneToGateway(string sceneName, List<Scene.DeviceListData> listAdjustTarget)
+ {
+ int NewScenesId = -1;
+ //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+ if (Config.Instance.Home.IsVirtually == false)
+ {
+ var mainWay = ZbGateway.MainGateWay;
+ if (mainWay == null) { return null; }
+
+ //鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+ var strCommand = this.GetAddNewSceneCommand(sceneName);
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetNewId", strCommand, "Scene/GetNewId_Respon");
+ if (result.ErrorMsg != null)
+ {
+ this.ShowTipMsg(result.ErrorMsg);
+ return null;
+ }
+ if (result.ErrorMsgDiv == 0)
+ {
+ //娣诲姞鍦烘櫙澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.AddSceneFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+ this.ShowTipMsg(msg1);
+ return null;
+ }
+ var getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(result.ReceiptData);
+ NewScenesId = getSceneIdData.NewScenesId;
+ }
+ else
+ {
+ //铏氭嫙鍦烘櫙ID
+ NewScenesId = Convert.ToInt32(DateTime.Now.ToString("HHmmss"));
+ }
+ //娣诲姞鎵ц鐩爣
+ var listSuccess = this.AddTargetToScene(NewScenesId, listAdjustTarget);
+ if (listSuccess == null)
+ {
+ return null;
+ }
+
+ //鍒涘缓鍦烘櫙瀵硅薄
+ var newScene = new SceneUI();
+ newScene.Name = sceneName;
+ newScene.Id = NewScenesId;
+ newScene.AdjustTargetList.AddRange(listSuccess);
+ //娣诲姞缂撳瓨
+ newScene.Save();
+ //鍔犲叆缂撳瓨
+ this.dicScenes[newScene.Id] = newScene;
+
+ return newScene;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏂板缓涓�涓満鏅殑鍛戒护瀛楃
+ /// </summary>
+ /// <param name="sceneName">鍦烘櫙鍚嶇О</param>
+ /// <returns></returns>
+ public string GetAddNewSceneCommand(string sceneName)
+ {
+ var bytes = new byte[32];
+ var reamarkGwBytes = Encoding.UTF8.GetBytes(sceneName);
+ Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length);
+ sceneName = Encoding.UTF8.GetString(bytes);
+
+ var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 800 } };
+ var data = new Newtonsoft.Json.Linq.JObject { { "ScenesName", sceneName } };
+ jObject.Add("Data", data);
+
+ return jObject.ToString();
+ }
+
+ /// <summary>
+ /// 娣诲姞鎵ц鐩爣鍒版寚瀹氱殑鍦烘櫙(杩斿洖鎴愬姛娣诲姞鐨勬墽琛岀洰鏍�)
+ /// </summary>
+ /// <param name="sceneId">鍦烘櫙Id</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <returns></returns>
+ private List<Scene.DeviceListData> AddTargetToScene(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+ {
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return listAdjustTarget;
+ }
+ var listSuccess = new List<Scene.DeviceListData>();
+ var mainWay = ZbGateway.MainGateWay;
+ if (mainWay == null) { return listSuccess; }
+
+ //鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+ var listCommand = this.GetAddTargetToSceneCommand(sceneId, listAdjustTarget);
+ for (int i = 0; i < listCommand.Count; i++)
+ {
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/AddMember", listCommand[i], "Scene/AddMember_Respon");
+ if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+ {
+ //鍑虹幇閿欒
+ continue;
+ }
+ var addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.AddSceneMemberResponseData>(result.ReceiptData);
+ if (addSceneMemberData.Result == 1)
+ {
+ listSuccess.Add(listAdjustTarget[i]);
+ }
+ }
+ if (listSuccess.Count == 0)
+ {
+ //娣诲姞鎵ц鐩爣澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uAddAdjustTargetFail);
+ this.ShowTipMsg(msg1);
+ return null;
+ }
+ //濡傛灉涓嶆槸鍏ㄩ儴鎴愬姛鐨勮瘽,鎻愮ず
+ if (listSuccess.Count != listAdjustTarget.Count)
+ {
+ //涓埆鎵ц鐩爣娣诲姞澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uSomeAdjustTargetAddFail);
+ this.ShowTipMsg(msg1);
+ }
+ return listSuccess;
+ }
+
+ /// <summary>
+ /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
+ /// </summary>
+ /// <param name="sceneId">鍦烘櫙id</param>
+ /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+ /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param>
+ /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param>
+ /// <returns></returns>
+ public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null)
+ {
+ var listCommand = new List<string>();
+ int index = 1;
+ for (int i = 0; i < listAdjustTarget.Count; i++)
+ {
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
+ var data = listAdjustTarget[i];
+ //璁惧
+ if (data.Type == 0)
+ {
+ string deviceAddr = data.DeviceAddr;
+ if (dicChangedMac != null)
+ {
+ //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄
+ if (dicChangedMac.ContainsKey(deviceAddr) == false)
+ {
+ continue;
+ }
+ deviceAddr = dicChangedMac[deviceAddr];
+ }
+
+ var taskList = new Newtonsoft.Json.Linq.JArray { };
+ foreach (var taskInfo in data.TaskList)
+ {
+ var tInfo = new Newtonsoft.Json.Linq.JObject{{ "TaskType", taskInfo.TaskType},
+ { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
+ taskList.Add(tInfo);
+ }
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} ,
+ { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}};
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ //鍦烘櫙
+ else if (data.Type == 1)
+ {
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} ,
+ { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} };
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ //寤舵椂
+ else
+ {
+ var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
+ { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}};
+ if (sceneName != null)
+ {
+ data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+ }
+ jObject.Add("Data", data2);
+ }
+ listCommand.Add(jObject.ToString());
+ index++;
+ }
+ return listCommand;
+ }
+
+
+ /// <summary>
+ /// 娣诲姞鍦烘櫙(杩欎釜鍗曠函鍙敼鎴块棿)
+ /// </summary>
+ /// <param name="scene">Scene.</param>
+ public void AddSceneToRoom(Room i_room, SceneUI scene)
+ {
+ //娣诲姞缂撳瓨
+ if (i_room.ListSceneId.Contains(scene.Id) == false)
+ {
+ i_room.ListSceneId.Add(scene.Id);
+ i_room.Save();
+ }
+ }
+
+ /// <summary>
+ /// 娣诲姞鎼滆棌鍦烘櫙
+ /// </summary>
+ /// <param name="scene">Scene.</param>
+ public void AddLoveScene(SceneUI scene)
+ {
+ var nowRoom = HdlRoomLogic.Current.GetLoveRoom();
+ //娣诲姞缂撳瓨
+ if (nowRoom.ListSceneId.Contains(scene.Id) == false)
+ {
+ nowRoom.ListSceneId.Add(scene.Id);
+ nowRoom.Save();
+ //娣诲姞鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+ UserView.UserPage.Instance.RefreshAllForm = true;
+ }
+ }
+
+ /// <summary>
+ /// 娣诲姞铏氭嫙鍦烘櫙
+ /// </summary>
+ /// <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 (sceneId == -1)
+ {
+ 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;
+
+ return newScene;
+ }
+
+ #endregion
+
+ #region 鈻� 淇敼鍦烘櫙___________________________
+
+ /// <summary>
+ /// 淇敼缃戝叧鐨勫満鏅�
+ /// </summary>
+ /// <param name="sceneUI">鍦烘櫙瀵硅薄</param>
+ /// <param name="listAdjustTarget">鍏ㄩ儴鐨勬墽琛岀洰鏍�</param>
+ /// <returns></returns>
+ public async Task<bool> EditorSceneFromGateway(SceneUI sceneUI, List<Scene.DeviceListData> listAdjustTarget)
+ {
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+ sceneUI.AdjustTargetList.Clear();
+ sceneUI.AdjustTargetList.AddRange(listAdjustTarget);
+ sceneUI.Save();
+ return true;
+ }
+
+ //鍏堟竻绌哄叏閮ㄧ殑鎵ц鐩爣
+ var deleteData = new Scene.SceneRemoveMemberData();
+ var deleteTargetData = new List<Scene.RemoveSceneDeviceListInfo>();
+ for (int i = 0; i < sceneUI.AdjustTargetList.Count; i++)
+ {
+ var data = sceneUI.AdjustTargetList[i];
+ var removeData = new Scene.RemoveSceneDeviceListInfo();
+ if (data.Type == 0)
+ {
+ //璁惧
+ removeData.Type = 0;
+ removeData.DeviceAddr = data.DeviceAddr;
+ removeData.Epoint = data.Epoint;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ else if (data.Type == 1)
+ {
+ //鍦烘櫙
+ removeData.Type = 1;
+ removeData.ElseScenesId = data.ElseScenesId;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ else
+ {
+ //寤舵椂
+ removeData.Type = 2;
+ removeData.DelayTime = data.DelayTime;
+ removeData.MemberNumber = data.MemberNumber;
+ }
+ //鎷ユ湁鎴愬姛鐨�
+ deleteTargetData.Add(removeData);
+ }
+ deleteData.DeviceList = deleteTargetData;
+ deleteData.ScenesId = sceneUI.Id;
+ //鎵ц娓呯┖
+ var result = await Scene.RemoveSceneMemberAsync(deleteData);
+ if (result == null || result.removeSceneMemberResponseData == null)
+ {
+ //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result.removeSceneMemberResponseData.Result != 0)
+ {
+ //鍒濆鍖栨墽琛岀洰鏍囧け璐�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uInitAdjustTargetFail);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ //娓呯┖鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛ㄧ殑缂撳瓨
+ sceneUI.AdjustTargetList.Clear();
+
+ //鐒跺悗閲嶆柊娣诲姞
+ var listSuccess = this.AddTargetToScene(sceneUI.Id, listAdjustTarget);
+ if (listSuccess == null)
+ {
+ return false;
+ }
+ sceneUI.AdjustTargetList.AddRange(listSuccess);
+ sceneUI.Save();
+
+ return true;
+ }
+
+ /// <summary>
+ /// 淇敼缃戝叧鐨勫満鏅悕绉�
+ /// </summary>
+ /// <param name="scene">鍦烘櫙瀵硅薄</param>
+ /// <param name="newName">鏂扮殑鍚嶅瓧</param>
+ /// <returns></returns>
+ public async Task<bool> EditorSceneNameFromGateway(SceneUI scene, string newName)
+ {
+ //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹呯殑璇�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶉渶瑕佹洿鏂扮綉鍏�
+ return true;
+ }
+ var result1 = await Scene.RenameSceneAsync(scene.Id, newName);
+ //鍏遍�氶敊璇娴�
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result1);
+ if (error != null)
+ {
+ this.ShowErrorMsg(error);
+ return false;
+ }
+ if (result1 == null || result1.sceneRenameResponseData == null)
+ {
+ //淇敼鍦烘櫙鍚嶇О澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg1 = UserCenterLogic.CombineGatewayTimeOutMsg(msg1, result1);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result1.sceneRenameResponseData.Result == 2)
+ {
+ //鐩爣鍦烘櫙涓嶅瓨鍦�
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ if (result1.sceneRenameResponseData.Result != 1)
+ {
+ //淇敼鍦烘櫙鍚嶇О澶辫触
+ string msg1 = Language.StringByID(R.MyInternationalizationString.uEditorSceneNameFail);
+ this.ShowTipMsg(msg1);
+ return false;
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region 鈻� 鍒犻櫎鍦烘櫙___________________________
+
+ /// <summary>
+ /// 鍒犻櫎鏈湴鍦烘櫙鏁版嵁
+ /// </summary>
+ /// <param name="sceneUI">Scene user interface.</param>
+ public void DeleteLocalScene(SceneUI sceneUI)
+ {
+ //绉婚櫎缂撳瓨
+ this.dicScenes.Remove(sceneUI.Id);
+ var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneUI.Id);
+ if (room != null)
+ {
+ room.ListSceneId.Remove(sceneUI.Id);
+ room.Save();
+ }
+
+ //绉婚櫎鍠滅埍
+ var roomLove = HdlRoomLogic.Current.GetLoveRoom();
+ if (roomLove.ListSceneId.Contains(sceneUI.Id) == true)
+ {
+ roomLove.ListSceneId.Remove(sceneUI.Id);
+ roomLove.Save();
+ }
+
+ //鍒犻櫎鏂囦欢
+ if (Global.IsExistsByHomeId(sceneUI.FileName) == true)
+ {
+ Global.DeleteFilebyHomeId(sceneUI.FileName);
+ HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
+ }
+ //鍒犻櫎鍥剧墖
+ if (sceneUI.IconPathType == 1 || sceneUI.IconPathType == 2)
+ {
+ if (Global.IsExistsByHomeId(sceneUI.IconPath))
+ {
+ Global.DeleteFilebyHomeId(sceneUI.IconPath);
+ 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>
+ /// 鍒犻櫎鍦烘櫙(杩欎釜鍙Щ闄ゅ唴瀛�)
+ /// </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();
+ //鍙栨秷鏀惰棌鍦烘櫙鏃�,闇�瑕佸埛鏂颁富椤�
+ 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鑾峰彇鍦烘櫙
+ /// </summary>
+ /// <returns>The scene UIB y scene identifier.</returns>
+ /// <param name="sceneId">Scene identifier.</param>
+ public SceneUI GetSceneUIBySceneId(int sceneId)
+ {
+ if (this.dicScenes.ContainsKey(sceneId) == true)
+ {
+ return this.dicScenes[sceneId];
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// 鑾峰彇璇ユゼ灞傛墍鏈夊満鏅�
+ /// </summary>
+ /// <param name="floorId"></param>
+ /// <returns></returns>
+ public List<SceneUI> GetSameFloorScenes(string floorId)
+ {
+ List<SceneUI> sceneUIs = new List<SceneUI>();
+ var rooms = HdlRoomLogic.Current.GetRoomsByFloorId(floorId);
+ foreach (var r in rooms)
+ {
+ foreach (int sceneId in r.ListSceneId)
+ {
+ if (this.dicScenes.ContainsKey(sceneId) == true)
+ {
+ sceneUIs.Add(this.dicScenes[sceneId]);
+ }
+ }
+ }
+ return sceneUIs;
+ }
+
+ /// <summary>
+ /// 鏍规嵁鍦烘櫙Id锛岃幏鍙栨ゼ灞傚拰鎴块棿鍚嶅瓧(妤煎眰,鎴块棿鍚嶅瓧)
+ /// </summary>
+ /// <returns></returns>
+ public string GetZoneById(int sceneId)
+ {
+ var room = HdlRoomLogic.Current.GetRoomBySceneId(sceneId);
+ if (room == null)
+ {
+ return null;
+ }
+ var floorName = HdlResidenceLogic.Current.GetFloorNameById(room.FloorId);
+ //鏇存敼浠g爜锛氬鏋渇loorName=鈥溾�濅篃瑕佸垽鏂紝鍚﹀垯鏈夆�滐紝鈥�
+ if (string.IsNullOrEmpty(floorName))
+ {
+ return room.Name;
+ }
+ return $"{floorName},{room.Name}";
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏈垎閰嶅尯鍩熷満鏅�
+ /// </summary>
+ /// <returns></returns>
+ public List<SceneUI> GetUnalloctedScenes()
+ {
+ List<SceneUI> sceneUIs = new List<SceneUI>();
+ //宸茬粡瀛樺湪鐨勫満鏅�
+ var listEsxit = new HashSet<int>();
+ var listAllRoom = HdlRoomLogic.Current.GetAllListRooms();
+ foreach (var room in listAllRoom)
+ {
+ if (room.IsLove == true)
+ {
+ //涓嶅寘鍚敹钘忔埧闂�
+ continue;
+ }
+ foreach (int sceneId in room.ListSceneId)
+ {
+ if (listEsxit.Contains(sceneId) == false)
+ {
+ listEsxit.Add(sceneId);
+ }
+ }
+ }
+ foreach (var myScene in this.dicScenes.Values)
+ {
+ if (listEsxit.Contains(myScene.Id) == false)
+ {
+ sceneUIs.Add(myScene);
+ }
+ }
+ return sceneUIs;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍏ㄩ儴鎴块棿鐨勫叏閮ㄥ満鏅�
+ /// </summary>
+ /// <returns></returns>
+ public List<SceneUI> GetAllRoomSceneList()
+ {
+ List<SceneUI> sceneUIs = new List<SceneUI>();
+ 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)
+ {
+ sceneUIs.Add(this.dicScenes[sceneId]);
+ }
+ }
+ }
+
+ return sceneUIs;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎸囧畾鎴块棿鐨勫叏閮ㄥ満鏅�
+ /// </summary>
+ /// <returns></returns>
+ public List<SceneUI> GetRoomSceneList(Room i_room)
+ {
+ List<SceneUI> sceneUIs = new List<SceneUI>();
+ foreach (int sceneId in i_room.ListSceneId)
+ {
+ if (this.dicScenes.ContainsKey(sceneId) == true)
+ {
+ sceneUIs.Add(this.dicScenes[sceneId]);
+ }
+ }
+
+ return sceneUIs;
+ }
+
+ #endregion
+
+ #region 鈻� 璋冪敤鍦烘櫙___________________________
+
+ /// <summary>
+ /// 璋冪敤鍦烘櫙
+ /// </summary>
+ /// <param name="scene"></param>
+ /// <returns></returns>
+ public async Task<bool> ControlScene(SceneUI scene)
+ {
+ if (scene.RemainTime > 0)
+ {
+ HdlThreadLogic.Current.RunMain(() =>
+ {
+ //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+ var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
+ msgContr.Show();
+ });
+ return false;
+ }
+ //濡傛灉鏄櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //涓嶈皟鐢ㄧ綉鍏�
+ return true;
+ }
+
+ //鎵ц璋冪敤鍦烘櫙
+ var result = await Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
+ if (result == null || result.sceneOpenData == null)
+ {
+ //鎺у埗鍦烘櫙澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ HdlThreadLogic.Current.RunMain(() =>
+ {
+ //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+ var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
+ msgContr.Show();
+ });
+ return false;
+ }
+ if (result.sceneOpenData.Result == 0)
+ {
+ //鎺у埗鍦烘櫙澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.ControlSceneFail);
+ HdlThreadLogic.Current.RunMain(() =>
+ {
+ //璇ュ満鏅鍦ㄥ欢鏃讹紝璇风◢鍚�
+ var msgContr = new ShowMsgControl(ShowMsgType.Tip, msg);
+ msgContr.Show();
+ });
+ return false;
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region 鈻� 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛╛____________
+
+ /// <summary>
+ /// 鑾峰彇鍦烘櫙鐨勬墽琛岀洰鏍囧垪琛�
+ /// </summary>
+ /// <param name="i_scene">鍦烘櫙瀵硅薄</param>
+ /// <returns></returns>
+ public List<Scene.DeviceListData> GetAdjustTargetList(SceneUI i_scene)
+ {
+ //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ var listAdjustTarget = new List<Scene.DeviceListData>();
+ listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+ return listAdjustTarget;
+ }
+ //濡傛灉鏄湁妯℃澘,鏈夎澶囩殑鏃跺��,鍦ㄦ病鏈夊彂閫佹垚鍔熶箣鍓�,涓嶅厑璁稿埛鏂版墽琛岀洰鏍囧璞�
+ if (Common.Config.Instance.Home.TemplateMode == 2
+ && Common.Config.Instance.Home.SendTemplateSuccess == false)
+ {
+ var listAdjustTarget = new List<Scene.DeviceListData>();
+ listAdjustTarget.AddRange(i_scene.AdjustTargetList);
+ return listAdjustTarget;
+ }
+ var mainWay = ZbGateway.MainGateWay;
+ if (mainWay == null) { return null; }
+
+ var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
+ var data = new Newtonsoft.Json.Linq.JObject { { "ScenesId", i_scene.Id } };
+ jObject.Add("Data", data);
+ //鍙戦�佸懡浠�
+ var result = HdlGatewayLogic.Current.SendJobjectDataToGateway(mainWay.GwId, "Scene/GetDeviceList", jObject.ToString(), "Scene/GetDeviceList_Respon");
+
+ if (result.ErrorMsg != null)
+ {
+ this.ShowTipMsg(result.ErrorMsg);
+ return null;
+ }
+ if (result.ErrorMsgDiv == 0)
+ {
+ //鑾峰彇鎵ц鐩爣澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uGetAdjustTargetFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+
+ this.ShowTipMsg(msg);
+ return null;
+ }
+ var sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneDeviceListInfo>(result.ReceiptData);
+
+ i_scene.AdjustTargetList = sceneGetDeviceListObj.DeviceList;
+ //淇濆瓨缂撳瓨
+ i_scene.Save(false);
+
+ var listData = new List<Scene.DeviceListData>();
+ listData.AddRange(sceneGetDeviceListObj.DeviceList);
+
+ return listData;
+ }
+ #endregion
+
+ #region 鈻� 寤舵椂鏃堕棿绾跨▼_______________________
+
+ /// <summary>
+ /// 寮�鍚欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
+ /// </summary>
+ public void StartDelayTimeThread(SceneUI i_scene)
+ {
+ if (i_scene.RemainThreadAction == true)
+ {
+ //绾跨▼鍦ㄨ繍琛屼腑
+ return;
+ }
+ i_scene.RemainThreadAction = true;
+
+ HdlThreadLogic.Current.RunThread(() =>
+ {
+ while (i_scene.RemainTime > 0)
+ {
+ System.Threading.Thread.Sleep(1000);
+ i_scene.RemainTime--;
+ }
+ i_scene.RemainThreadAction = false;
+ });
+ }
+
+ #endregion
+
+ #region 鈻� 涓�鑸柟娉昣__________________________
+
+ /// <summary>
+ /// 鏀瑰彉鍦烘櫙鎴块棿
+ /// </summary>
+ /// <param name="scene">鍦烘櫙瀵硅薄</param>
+ /// <param name="newRoomId">鏂扮殑鎴块棿鐨処D</param>
+ public void ChangedSceneRoom(SceneUI scene, string newRoomId)
+ {
+ var room = HdlRoomLogic.Current.GetRoomBySceneId(scene.Id);
+ if (room != null)
+ {
+ //鎴块棿娌℃湁鏀瑰彉
+ if (room.Id == newRoomId)
+ {
+ return;
+ }
+ //浠庢埧闂翠腑绉婚櫎缂撳瓨
+ this.DeleteSceneFromRoom(room, scene);
+ }
+ //娣诲姞杩涙柊鎴块棿
+ var newRoom = HdlRoomLogic.Current.GetRoomById(newRoomId);
+ this.AddSceneToRoom(newRoom, scene);
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏈湴鍏ㄩ儴鐨勫満鏅枃浠�
+ /// </summary>
+ /// <returns></returns>
+ public List<string> GetAllSceneFile()
+ {
+ List<string> listSceneFile = new List<string>();
+ List<string> listAllFile = HdlFileLogic.Current.GetRootPathListFile();
+
+ foreach (string file in listAllFile)
+ {
+ if (file.StartsWith("Scene_") == false)
+ {
+ //濡傛灉涓嶆槸鍦烘櫙鏂囦欢
+ continue;
+ }
+ listSceneFile.Add(file);
+ }
+ return listSceneFile;
+ }
+
+ /// <summary>
+ /// 鏄剧ず閿欒淇℃伅绐楀彛
+ /// </summary>
+ /// <param name="msg"></param>
+ private void ShowErrorMsg(string msg)
+ {
+ Application.RunOnMainThread(() =>
+ {
+ var contr = new ShowMsgControl(ShowMsgType.Error, msg);
+ contr.Show();
+ });
+ }
+
+ /// <summary>
+ /// 鏄剧ずTip淇℃伅绐楀彛
+ /// </summary>
+ /// <param name="msg"></param>
+ private void ShowTipMsg(string msg)
+ {
+ Application.RunOnMainThread(() =>
+ {
+ var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
+ contr.Show();
+ });
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.8.0