using System; using System.Collections.Generic; using System.IO; using System.Threading; using HDL_ON.DAL.Server; using Shared; namespace HDL_ON.Entity { [System.Serializable] public class DB_ResidenceData { public DB_ResidenceData() { } /// /// 主人token /// public string MasterToken; //RegionInfoRes _residecenInfo; RegionInfoRes _residecenInfo = new RegionInfoRes(); /// /// 住宅基础信息 /// public RegionInfoRes CurrentRegion { get { if (MainPage.NoLoginMode) { return new RegionInfoRes() { homeName = "HDL Home" ,id = "text000001"}; } else { if (_residecenInfo == null) { if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0) { _residecenInfo = UserInfo.Current.regionList[0]; } else { _residecenInfo = new RegionInfoRes(); HDLCommon.Current.Logout(); } } return _residecenInfo; } } set { _residecenInfo = value; } } /// /// 功能类型列表 /// [Newtonsoft.Json.JsonIgnore] public List functionTypeList = new List(); static DB_ResidenceData instance; public static DB_ResidenceData Instance { get { if (instance == null) { if(MainPage.NoLoginMode) { instance = new DB_ResidenceData(); instance.functionTypeList.AddRange(new List { ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain, ShowFunction.FloorHeating,ShowFunction.Music, ShowFunction.Electric,ShowFunction.Environmental, ShowFunction.EnergyMonitoring, ShowFunction.FreshAir,ShowFunction.DoorLock, ShowFunction.Panel,ShowFunction.SecurityMonitoring, ShowFunction.Sensor,ShowFunction.VideoIntercom, ShowFunction.SecurityCenter }); instance.SaveResidenceData(); instance.residenceImage = "Classification/Room/Roombg.png"; instance.HomeGateway = new HomeGatewayInfo() { homeId = "1396717478877241345", gatewayId = "1396997079658602498", mac = "123457890123456", }; //初始化住宅功能数据 SpatialInfo.CurrentSpatial.InitRoomListFunctions(); return instance; } try { var residenceDataBytes = ReadResidenceInfo(); var userConfigString = System.Text.Encoding.UTF8.GetString(residenceDataBytes); DB_ResidenceData temp = null; if (!string.IsNullOrEmpty(userConfigString)) { temp = Newtonsoft.Json.JsonConvert.DeserializeObject(userConfigString); } if (temp == null) { instance = new DB_ResidenceData { }; } else { instance = temp; } instance.functionTypeList.AddRange(new List { ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain, ShowFunction.FloorHeating,ShowFunction.Music, ShowFunction.Electric,ShowFunction.Environmental, ShowFunction.EnergyMonitoring, ShowFunction.FreshAir,ShowFunction.DoorLock, ShowFunction.Panel,ShowFunction.SecurityMonitoring, ShowFunction.Sensor,ShowFunction.VideoIntercom, ShowFunction.SecurityCenter }); instance.SaveResidenceData(); } catch (Exception ex) { MainPage.Log($"住宅数据初始化失败:{ex.Message}"); instance = new DB_ResidenceData { }; return instance; } instance.residenceImage = "Classification/Room/Roombg.png"; //初始化住宅功能数据 SpatialInfo.CurrentSpatial.InitRoomListFunctions(); } return instance; } } /// /// 退出账号清空数据 /// public void EixtAccount() { instance = null; ins_OidList = null; HomeGateway = null; //重置网关状态 DriverLayer.Control.Ins.GatewayOnline_Cloud = false; DriverLayer.Control.Ins.GatewayOnline_Local = false; SpatialInfo.CurrentSpatial.Clear(); FunctionList.List.Clear(); ///切换住宅清空前住宅缓存自动化列表; HDL_ON.UI.UI2.Intelligence.Automation.Logic.LogicList.Clear(); DAL.Mqtt.MqttClient.DisConnectRemote("退出登录,或者切换住宅"); } /// /// 网关详细信息 /// public HomeGatewayInfo HomeGateway; /// /// 0:bus网关 /// 1:A协议网关 /// public int GatewayType { get { //#if DEBUG //return 0; //#endif if (HomeGateway == null) return -1; if (HomeGateway.gatewayType == "AGATEWAY") { return 1; } else { return 0; } } } /// /// 记录窗帘全开全关状态 /// public bool GlobalCurtainStatus = false; /// /// 检测住宅是否绑定了网关 /// gatewayId 判空 /// /// public bool CheckWhetherGatewayIdIsNull() { if (HomeGateway != null && !string.IsNullOrEmpty(HomeGateway.gatewayId)) { return false; } else { return true; } } /// /// 检测住宅是否绑定了网关 /// /// public bool CheckWhetherGatewayIsBound() { if (HomeGateway != null && !string.IsNullOrEmpty(HomeGateway.mac)) { return true; } else { return false; } } /// /// 当前住宅的网关MAC /// public string residenceGatewayMAC { get { if (CheckWhetherGatewayIsBound()) { return HomeGateway.mac.ToUpper(); } else { return ""; } } set { if (CheckWhetherGatewayIsBound()) { HomeGateway.mac = value; } else { HomeGateway = new HomeGatewayInfo() { mac = value }; } } } /// /// 住宅图片 /// public string residenceImage; /// /// 当前住宅的网关MAC /// //public string residenceGatewayMAC = "4E47323347591243";//"0281B9078C000000";// "00964E19C4467B1E"; /// /// 保存住宅数据 /// public void SaveResidenceData() { if (this == null || this.CurrentRegion == null) return; var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); WirteResidenceInfo(ssd); } /// /// 当前选择的楼层 /// public string CurFoor = Language.StringByID(StringId.All); /// /// 当前选择的楼层 /// [Newtonsoft.Json.JsonIgnore] public SpatialInfo CurFloor = new SpatialInfo() { roomId = "", roomName = Language.StringByID(StringId.All)}; /// /// 分类界面显示的楼层 /// [Newtonsoft.Json.JsonIgnore] public SpatialInfo ClassificationChooseFloor = new SpatialInfo() { roomId = "", roomName = Language.StringByID(StringId.All) }; /// /// 根目录 /// static string RootPath = Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "/"; /// /// 读取ResidenceInfo文件 /// /// static byte[] ReadResidenceInfo() { var fileName = "DB_ResidenceData"; FileStream fs = null; try { var temp = CreateUserFloder(OnAppConfig.Instance.LastLoginUserId); if (File.Exists(Path.Combine(temp, fileName))) { fs = new FileStream(Path.Combine(temp, fileName), FileMode.Open, FileAccess.Read); } else if (File.Exists(fileName)) { fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); } else { return new byte[0]; } byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, bytes.Length); return bytes; } catch { return new byte[0]; } finally { try { if (fs != null) { fs.Close(); } } catch { } } } /// /// 保存ResidenceInfo /// /// /// static bool WirteResidenceInfo(byte[] bytes) { var fileName = "DB_ResidenceData"; FileStream fs = null; try { var temp = CreateUserFloder(OnAppConfig.Instance.LastLoginUserId); fs = new FileStream(Path.Combine(temp, fileName), FileMode.Create, FileAccess.Write); fs.Write(bytes, 0, bytes.Length); fs.Flush(); MainPage.Log("SaveFile:" + fileName); return true; } catch (Exception ex) { MainPage.Log("FileUtiles Code 113:" + ex.ToString()); return false; } finally { try { if (fs != null) { fs.Close(); } } catch (Exception ex) { MainPage.Log("FileUtils Code 121 :" + ex.ToString()); } } } /// /// 创建一个住宅的账号文件夹 /// static string CreateUserFloder(string userId) { var path = Path.Combine(RootPath, userId); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } return path + "/"; } #region oid列表 a协议转bus协议控制使用 /// /// oid数据保存的文件名 /// [Newtonsoft.Json.JsonIgnore] public static string OidSavePathName = "AProtocolData_FunctionOid"; static List ins_OidList; public static List functionOidList { get { if (ins_OidList == null) { var bytes = Common.FileUtlis.Files.ReadFile(OidSavePathName); if (bytes == null || bytes.Length == 0) { ins_OidList = new List(); } else { var jsonString = System.Text.Encoding.UTF8.GetString(bytes); if (string.IsNullOrEmpty(jsonString)) { ins_OidList = new List(); } else { var list = Newtonsoft.Json.JsonConvert.DeserializeObject>(jsonString); if (list == null) { ins_OidList = new List(); } else { ins_OidList = list; } } } } return ins_OidList; } } /// /// 保存oid数据,每次保存都会覆盖 /// public static void SaveOidList(string oidJsonString) { var oidBytes = System.Text.Encoding.UTF8.GetBytes(oidJsonString); Common.FileUtlis.Files.WriteFileByBytes(OidSavePathName, oidBytes); } #endregion } }