From 5eeafe3af80bfd88306bd8ad9e76c8f4b51ca35f Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 17 十二月 2020 14:16:20 +0800 Subject: [PATCH] 增加本地发送的重发机制 --- HDL_ON/Entity/Function/Scene.cs | 305 +++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 236 insertions(+), 69 deletions(-) diff --git a/HDL_ON/Entity/Function/Scene.cs b/HDL_ON/Entity/Function/Scene.cs index d301fbe..207a844 100644 --- a/HDL_ON/Entity/Function/Scene.cs +++ b/HDL_ON/Entity/Function/Scene.cs @@ -1,13 +1,39 @@ 锘縰sing System; using System.Collections.Generic; +using HDL_ON.DAL.Server; using Shared; namespace HDL_ON.Entity { + public class SceneApiPack + { + static SceneApiPack _ScenePack; + public static SceneApiPack ScenePack + { + get + { + if(_ScenePack == null) + { + _ScenePack = new SceneApiPack(); + } + return _ScenePack; + } + } + + } + public class Scene { + public Scene() + { + sid = NewSid(); + if (!DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull()) + { + gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId; + } + } /// <summary> - /// 杩滅鍞竴ID + /// 浜戠鍞竴ID /// </summary> public string userSceneId = ""; /// <summary> @@ -31,39 +57,43 @@ /// </summary> public List<string> roomIds = new List<string>(); /// <summary> + /// 鎵�灞炴埧闂村垪琛� + /// </summary> + public List<string> uids = new List<string>(); + /// <summary> /// 寤舵椂 /// </summary> - public int delay = 0; - /// <summary> - /// 寤舵椂鏄剧ず鐨勬枃鏈� - /// </summary> - [Newtonsoft.Json.JsonIgnore] - public string delayText - { - get - { - string text = ""; - switch (delay) - { - case 0: - text = Language.StringByID(StringId.NoDelay); - break; - case 30: - text = "30s"; - break; - case 60: - text = "1min"; - break; - case 120: - text = "2min"; - break; - case 300: - text = "5min"; - break; - } - return text; - } - } + public string delay = "0"; + ///// <summary> + ///// 寤舵椂鏄剧ず鐨勬枃鏈� + ///// </summary> + //[Newtonsoft.Json.JsonIgnore] + //public string delayText + //{ + // get + // { + // string text = ""; + // switch (delay) + // { + // case 0: + // text = Language.StringByID(StringId.NoDelay); + // break; + // case 30: + // text = "30s"; + // break; + // case 60: + // text = "1min"; + // break; + // case 120: + // text = "2min"; + // break; + // case 300: + // text = "5min"; + // break; + // } + // return text; + // } + //} /// <summary> /// 鍦烘櫙鍒嗙粍 @@ -78,11 +108,33 @@ /// </summary> public bool collect = false; + ///// <summary> + ///// 鍦烘櫙鑳屾櫙 + ///// </summary> + //public string ImagePath = "Intelligence/Gallery/scenebg1.png";//"FunctionIcon/Scene/s1.png"; - /// <summary> - /// 鍦烘櫙鑳屾櫙 - /// </summary> - public string ImagePath = "Intelligence/Gallery/scenebg1.png";//"FunctionIcon/Scene/s1.png"; + ///// <summary> + ///// 鍦烘櫙鑳屾櫙 + ///// </summary> + public string ImagePath + { + get + { + if (string.IsNullOrEmpty(image)) + { + return "Intelligence/Gallery/scenebg1.png"; + } + else + { + return image; + } + } + set + { + image = value; + } + } + /// <summary> /// 鍦烘櫙鍔熻兘鍒楄〃 @@ -94,21 +146,18 @@ public List<ScenePushConfig> pushConfigs = new List<ScenePushConfig>(); /// <summary> - /// 鐢熸垚鍦烘櫙sid + /// 鐢熸垚閫昏緫sid鏂规硶 /// </summary> - public void NewSid() + public string NewSid() { - string sSceneid = ""; + string sceneId = ""; try { string sOidBeginsWith = "000101";//鍘傚晢 + 閫氳鏂瑰紡 DateTime dt = DateTime.Now; - - DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1)); long m = (long)((dt - startTime).TotalMilliseconds / 10); string sTimeSpan = "00000000"; - byte[] arry = new byte[4]; arry[0] = (byte)(m & 0xFF); @@ -127,25 +176,29 @@ sTimeSpan = "00000000"; } - sSceneid = sOidBeginsWith + sTimeSpan; + sceneId = sOidBeginsWith + sTimeSpan; - sSceneid += "0A"; - sSceneid += "0A01"; - //0A01 鐗╂ā鍨嬩负鍦烘櫙锛� 0001 琛ㄧず 1 鍙峰満鏅姛鑳� - int iTopSceneId = 1; + sceneId += "0A"; + sceneId += "0A01"; + int maxId = 1; - Random random = new Random(); - iTopSceneId = random.Next(0, 255); - iTopSceneId += random.Next(0, 255); - sSceneid += iTopSceneId.ToString("X4");//鍦烘櫙鍙� 涓や釜byte - sSceneid += "1100"; - sid = sSceneid; + for (int i = 0; i < FunctionList.List.scenes.Count; i++) + { + string s = FunctionList.List.scenes[i].sid.Substring(20, 4); + int iThisSceneId = Convert.ToInt16(s, 16); + if (iThisSceneId > maxId) + maxId = iThisSceneId; + } + + sceneId += (maxId + 1).ToString("X4"); + sceneId += "0000"; } catch { - sid = sSceneid; + return sceneId; } + return sceneId; } /// <summary> @@ -157,7 +210,7 @@ string roomNameList = ""; foreach (var roomId in roomIds) { - var findRoom = DB_ResidenceData.Rooms.Find(obj => obj.uid == roomId); + var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId); if (findRoom == null) { continue; @@ -186,20 +239,137 @@ return "SceneData_" + sid; } } + /// <summary> /// 淇濆瓨鍔熻兘鏁版嵁 /// </summary> - public void SaveSceneData() + public void SaveSceneData(bool upServer) { - var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); - FileUtils.WriteFileByBytes(savePath + this.sid, ssd); - MainPage.Log($"Save Scene Data : {this.sid}"); + if (upServer) + { + UploadScene(); + } + else + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + MainPage.Log($"Save Scene Data : {savePath}"); + } + } + /// <summary> + /// 鏀惰棌鍦烘櫙 + /// </summary> + /// <returns></returns> + public string CollectScene() + { + var pm = new HttpServerRequest(); + if (this.collect) + { + var revPack = pm.CollectScene(this.userSceneId); + return revPack; + } + else + { + var revPack = pm.CancelCollectScene(this.userSceneId); + return revPack; + } } /// <summary> - /// 鏇存柊鏃堕棿 + /// 缂栬緫鍦烘櫙 /// </summary> - public DateTime refreshTime = DateTime.MinValue; + public string EditScene() + { + var pm = new HttpServerRequest(); + var revPack = pm.EditScene(this); + if (revPack.Code == StateCode.SUCCESS) + { + var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString()); + var tempScene = scenes.Find((obj) => obj.sid == sid); + if (tempScene != null) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + } + } + return revPack.Code; + } + + /// <summary> + /// 淇敼鍦烘櫙 + /// </summary> + public string UpdateScene() + { + var pm = new HttpServerRequest(); + var revPack = pm.EditScene(this); + if (revPack.Code == StateCode.SUCCESS) + { + var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString()); + var tempScene = scenes.Find((obj) => obj.sid == sid); + if (tempScene != null) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + } + } + return revPack.Code; + } + + /// <summary> + /// 娣诲姞鍦烘櫙 + /// </summary> + public string AddScene() + { + var pm = new HttpServerRequest(); + var revPack = pm.AddScene(this); + if (revPack.Code == StateCode.SUCCESS) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + } + return revPack.Code; + } + + /// <summary> + /// 涓婁紶鏁版嵁鍒颁簯绔� + /// </summary> + void UploadScene() + { + var pm = new HttpServerRequest(); + ResponsePackNew revPack; + if (string.IsNullOrEmpty(createTime) && string.IsNullOrEmpty(modifyTime)) + { + revPack = pm.AddScene(this); + if (revPack.Code == StateCode.SUCCESS) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + } + } + else if (!string.IsNullOrEmpty(createTime) && !string.IsNullOrEmpty(modifyTime)) + { + revPack = pm.EditScene(this); + if (revPack.Code == StateCode.SUCCESS) + { + var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString()); + var tempScene = scenes.Find((obj) => obj.sid == sid); + if (tempScene != null) + { + var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene)); + Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); + } + } + } + } + + /// <summary> + /// 浜戠鏁版嵁鍒涘缓鐨勬椂闂� + /// </summary> + public string createTime = ""; + /// <summary> + /// 浜戠鏁版嵁淇敼鐨勬渶鍚庢椂闂� + /// </summary> + public string modifyTime = ""; } /// <summary> /// 鍦烘櫙鍔熻兘瀵硅薄 @@ -219,10 +389,11 @@ /// 鏈湴瀵瑰簲鐨勫姛鑳� /// </summary> [Newtonsoft.Json.JsonIgnore] - public Function localFunction { + public Function localFunction + { get { - if(_localFunction == null) + if (_localFunction == null) { _localFunction = ConvertFunctionObject(); } @@ -236,14 +407,10 @@ /// <returns></returns> Function ConvertFunctionObject() { - var localFunction = DB_ResidenceData.functionList.GetAllDeviceFunctionList().Find((obj) => obj.sid == sid); - foreach (var s in status) - { - localFunction.attributes.Add(new FunctionAttributes() { key = s.key, curValue = s.value, value = new List<string>() { s.value } }); - } + var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid); return localFunction; } - + } /// <summary> -- Gitblit v1.8.0