using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;
using Shared.SimpleControl;
namespace Shared
{
[System.Serializable]
///
/// 房间对象
///
public class Room
{
public static string FavoriteRoom = "FavoriteRoom";
///
/// 房间里面灯光设备的延迟时间
///
public Dictionary DelayTime = new Dictionary ();
public static void UpdateMemorry (string roomFilePath)
{
GetRoomByFilePath (roomFilePath);
}
public static List ReadThermostatHostList ()
{
var hostSavePaths = IO.FileUtils.ReadFiles ().FindAll ((obj) => obj.Split ('_').Length == 4 && obj.Split ('_') [0] == "Equipment" && obj.Split ('_') [1] == DeviceType.Thermostat.ToString ());
List capillaryACs = new List ();
if (hostSavePaths != null && hostSavePaths.Count > 0) {
foreach (var path in hostSavePaths) {
var c = Newtonsoft.Json.JsonConvert.DeserializeObject (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (path)));
if (c != null) {
capillaryACs.Add (c);
Control.ControlBytesSend (Command.ReadThermostatHost, c.SubnetID, c.DeviceID, new byte [] { c.HostID });
}
}
}
thermostat_HostList = capillaryACs;
return capillaryACs;
}
static List thermostat_HostList = null;
public static List Thermostat_HostList {
get {
if (thermostat_HostList == null) {
ReadThermostatHostList ();
foreach (var c in thermostat_HostList) {
if (c != null) {
Control.ControlBytesSend (Command.ReadThermostatHost, c.SubnetID, c.DeviceID, new byte [] { c.HostID });
}
}
}
return thermostat_HostList;
}
}
#region 2020-03-13 美林科技系统
static ACMerrill mACMerrillHost = null;
///
/// 美林空调系统
///
public static ACMerrill ACMerrillHost {
get {
//if (mACMerrillHost == null) {
// ReadThermostatHostList ();
//}
return mACMerrillHost;
}
}
///
/// 清空本地ACMerrill数据
///
public static void DeleteACMerrill () {
try {
var findList = IO.FileUtils.ReadFiles ().FindAll ((obj) => obj.Split ('_').Length == 5 && obj.Split ('_') [0] == "Equipment" && obj.Split ('_') [1] == DeviceType.ACMerrill.ToString ());
foreach (var fileName in findList) {
IO.FileUtils.DeleteFile (fileName);
}
} catch { }
}
public static ACMerrill ReadACMerrill_Host ()
{
var hostSavePaths = IO.FileUtils.ReadFiles ().Find ((obj) => obj.Split ('_').Length == 5 && obj.Split ('_') [0] == "Equipment" && obj.Split ('_') [1] == DeviceType.ACMerrill.ToString ());
if (hostSavePaths != null) {
var c = Newtonsoft.Json.JsonConvert.DeserializeObject (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (hostSavePaths)));
if (c != null) {
mACMerrillHost = c;
}
}
return mACMerrillHost;
}
#endregion
// 房间命名规则 typeof (Room).Name + "_" + etNameBox.Text.Trim ();
///
/// 根据房间路径恢复房间对象
///
/// The by file path.
/// Room file path.
public static Room GetRoomByFilePath (string roomFilePath)
{
try {
var sdf = IO.FileUtils.ReadFile (roomFilePath);
var nowRoom = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (sdf));
if (null == nowRoom) {
System.Console.WriteLine ("房间文件路径不对,文件路径为:" + roomFilePath);
return null;
}
var beforeRoom = Lists.Find ((obj) => obj.Name == nowRoom.Name);
if (beforeRoom != null) {
List tempCommomList = new List ();
tempCommomList.AddRange (beforeRoom.DeviceList);
beforeRoom.DeviceList.Clear ();
foreach (var filePath in beforeRoom.DeviceFilePathList) {
var jsonInfo = CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (filePath));
var tempCommon = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
if (tempCommon != null) {
Common delCommon = tempCommomList.Find ((obj) => obj.Type == tempCommon.Type && obj.SubnetID == tempCommon.SubnetID && obj.DeviceID == tempCommon.DeviceID && obj.LoopID == tempCommon.LoopID);
if (delCommon != null) {
beforeRoom.DeviceList.Add (delCommon);
} else {
addDevice (beforeRoom, filePath);
}
}
}
beforeRoom.SceneFilePathList.Clear ();
foreach (var filePath in nowRoom.SceneFilePathList) {
beforeRoom.SceneFilePathList.Add (filePath);
}
return beforeRoom;
}
nowRoom.DeviceList.Clear ();
foreach (string deviceFilePath in nowRoom.DeviceFilePathList) {
addDevice (nowRoom, deviceFilePath);
}
for (int i = UserConfig.Instance.HideDeviceTypes.Count - 1; i >= 0; i--) {
var hideType = UserConfig.Instance.HideDeviceTypes [i];
var devices = nowRoom.DeviceList.Find ((obj) => {
return obj.DeviceTextID == hideType;
});
if (devices != null) {
UserConfig.Instance.HideDeviceTypes.Remove (hideType);
UserConfig.Instance.SaveUserConfig ();
break;
}
}
if( IO.FileUtils.ReadFiles ().FindAll ((obj) => obj.Split ('_').Length == 5 && obj.Split ('_') [0] == "Equipment" && obj.Split ('_') [1] == DeviceType.SuperWireless.ToString ()).Count > 0) {
UserConfig.Instance.HideDeviceTypes.Remove (SimpleControl.R.MyInternationalizationString.SuperWireless);
UserConfig.Instance.HideDeviceTypes.Remove (SimpleControl.R.MyInternationalizationString.Sonos);
UserConfig.Instance.SaveUserConfig ();
}
return nowRoom;
} catch {
return null;
}
}
static void addDevice (Room room, string deviceFilePath)
{
if (deviceFilePath.Split ('_').Length < 2) {
return;
}
var jsonInfo = CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (deviceFilePath));
var jsonInfoCommon = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
if (null == jsonInfoCommon) {
//当前对象数据无效
return;
}
var deviceType = deviceFilePath.Split ('_') [1];
//判断设备,使其在用户界面数量和从设备进入到界面上有相关的设备显示
if (deviceType == DeviceType.LightDimming.ToString ()) {
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
common.CurrentBrightness = 0;
string keyString = common.CommonLoopID;
var delayTime = room.DelayTime.ContainsKey (keyString + "Open");
if (delayTime) {
common.CustomDelayTimeOpen = room.DelayTime [keyString + "Open"];
common.CustomDelayTimeClose = room.DelayTime [keyString + "Close"];
} else {
common.CustomDelayTimeOpen = 0;
common.CustomDelayTimeClose = 0;
}
room.DeviceList.Add (common);
} else if (deviceType == DeviceType.LightMixDimming.ToString ()) {
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
common.CurrentBrightness = 0;
string keyString = common.CommonLoopID;
var delayTime = room.DelayTime.ContainsKey (keyString + "Open");
if (delayTime) {
common.CustomDelayTimeOpen = room.DelayTime [keyString + "Open"];
common.CustomDelayTimeClose = room.DelayTime [keyString + "Close"];
} else {
common.CustomDelayTimeOpen = 0;
common.CustomDelayTimeClose = 0;
}
room.DeviceList.Add (common);
} else if (deviceType == DeviceType.LightDALI.ToString ()) {
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
common.CurrentBrightness = 0;
string keyString = common.CommonLoopID;
var delayTime = room.DelayTime.ContainsKey (keyString + "Open");
if (delayTime) {
common.CustomDelayTimeOpen = room.DelayTime [keyString + "Open"];
common.CustomDelayTimeClose = room.DelayTime [keyString + "Close"];
} else {
common.CustomDelayTimeOpen = 0;
common.CustomDelayTimeClose = 0;
}
room.DeviceList.Add (common);
} else if (deviceType == DeviceType.LightRGB.ToString ()) {
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
common.CurrentBrightness = 0;
string keyString = common.SubnetID.ToString () + "_" + common.DeviceID.ToString () + "_" + common.LoopID.ToString ();
var delayTime = room.DelayTime.ContainsKey (keyString + "Open");
if (delayTime) {
common.CustomDelayTimeOpen = room.DelayTime [keyString + "Open"];
common.CustomDelayTimeClose = room.DelayTime [keyString + "Close"];
} else {
common.CustomDelayTimeOpen = 0;
common.CustomDelayTimeClose = 0;
}
room.DeviceList.Add (common);
} else if (deviceType == DeviceType.LightSwitch.ToString ()){
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
room.DeviceList.Add (common);
}
else if (deviceType == DeviceType.LogicModule.ToString())
{
var common = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonInfo);
room.DeviceList.Add(common);
}
else if (deviceType == DeviceType.LightMixSwitch.ToString () ){
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
room.DeviceList.Add (common);
} else if ( deviceType == DeviceType.LightEnergySwitch.ToString ()) {
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo);
room.DeviceList.Add (common);
} else if (deviceType == DeviceType.CurtainModel.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.CurtainTrietex.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.CurtainRoller.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.MusicModel.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.HVAC.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.ACPanel.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.ACInfrared.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.FoolHeat.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.FoolHeatPanel.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.DryContact.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.Scene.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.InfraredMode.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.FanModule.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.DoorLock.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));//门锁111
} else if (deviceType == DeviceType.UniversalDevice.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.SensorCO2.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.SensorTVOC.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.SensorPM25.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.SensorTemperature.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.SensorHumidity.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.FreshAir.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
} else if (deviceType == DeviceType.Thermostat.ToString ()) {
room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
}
//else if (deviceType == DeviceType.ACMerrill.ToString ()) {//2020-03-10 新增美林空调系统支持
// room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
//}
//else if (deviceType == DeviceType.DoorLockRelay.ToString ()) { //屏蔽继电器门锁
// room.DeviceList.Add (Newtonsoft.Json.JsonConvert.DeserializeObject (jsonInfo));
//}
for (int i = UserConfig.Instance.HideDeviceTypes.Count - 1; i >= 0; i--) {
var hideType = UserConfig.Instance.HideDeviceTypes [i];
var devices = room.DeviceList.Find ((obj) => {
return obj.DeviceTextID == hideType;
});
if (devices != null) {
UserConfig.Instance.HideDeviceTypes.Remove (hideType);
UserConfig.Instance.SaveUserConfig ();
break;
}
}
}
///
/// 房间名
///
public string Name {
get;
set;
}
public string RoomFilePath {
get {
if (string.IsNullOrEmpty (Name)) { return "FavoriteRoom"; } else {
return "Room_" + Name;
}
}
}
///
/// 房间背景
///
public string BackGroundImage = "Room/r1.png";
///
/// 楼层
///
public string Floor = "ALL ROOMS";
///
/// 当前选择的房间
///
public static Room CurrentRoom;
[Newtonsoft.Json.JsonIgnore]
///
/// 房间里所有的视图类型
///
public List DeviceList = new List { };
///
///设备文件路径列表
///
public readonly List DeviceFilePathList = new List ();
///
/// 场景文件名列表
///
public readonly List SceneFilePathList = new List ();
///
/// 房间列表的文件名称
///
static string roomListFilePath = "RoomList";
///
/// 所有的房间信息
///
public static System.Collections.Generic.List Lists = new System.Collections.Generic.List ();
///
/// 删除房间
///
public static void Remove (string roomFilePath)
{
var room = GetRoomByFilePath (roomFilePath);
if (null == room) {
return;
}
var roomFilePathList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (roomListFilePath)));
roomFilePathList.Remove (roomFilePath);
IO.FileUtils.WriteFileByBytes (roomListFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (roomFilePathList)));
IO.FileUtils.DeleteFile (roomFilePath);
//删除和房间相关的场景所有数据
foreach (var sceneFilePath in room.SceneFilePathList) {
IO.FileUtils.DeleteFile (sceneFilePath);
}
Room.Lists.Remove (room);
}
///
/// 增加房间
///
public void Add (string roomFilePath)
{
if (string.IsNullOrEmpty (roomFilePath) || IO.FileUtils.Exists (roomFilePath)) {
return;
}
var roomFilePathList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (roomListFilePath)));
if(roomFilePathList == null)
{
roomFilePathList = new List ();
}
if (roomFilePathList.Contains (roomFilePath)) return;
roomFilePathList.Add (roomFilePath);
//var sssddsa = IO.FileUtils.ReadFiles ().FindAll ((obj) => obj.Contains ("Room_"));
//foreach (var sd in sssddsa) {
// roomFilePathList.Add (sd);
//}
//保存房间列表
IO.FileUtils.WriteFileByBytes (roomListFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (roomFilePathList)));
Save (roomFilePath);
}
///
/// 保存
///
public void Save (string roomFilePath)
{
if (string.IsNullOrEmpty (roomFilePath)) {
return;
}
var list = DeviceList;
//不需要保存当前设备
DeviceList = new List ();
//保存房间信息
IO.FileUtils.WriteFileByBytes (roomFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (this)));
DeviceList = list;
for (int i = UserConfig.Instance.HideDeviceTypes.Count - 1; i >= 0; i--) {
var hideType = UserConfig.Instance.HideDeviceTypes [i];
var devices = DeviceList.Find ((obj) => {
return obj.DeviceTextID == hideType;
});
if (devices != null) {
UserConfig.Instance.HideDeviceTypes.Remove (hideType);
UserConfig.Instance.SaveUserConfig ();
break;
}
}
}
///
/// 更新房间名
///
/// Old room file path.
/// New room file path.
public void ReName (string oldRoomFilePath, string newRoomFilePath)
{
if (string.IsNullOrEmpty (newRoomFilePath)) {
return;
}
//场景名已经更改
if (oldRoomFilePath != newRoomFilePath && 2 <= oldRoomFilePath.Split ('_').Length) {
var roomFilePathList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (roomListFilePath))); ;
for (int i = 0; i < roomFilePathList.Count; i++) {
var roomFilePath = roomFilePathList [i];
if (roomFilePath == oldRoomFilePath) {
roomFilePathList [i] = newRoomFilePath;
break;
}
}
//保存房间列表
IO.FileUtils.WriteFileByBytes (roomListFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (roomFilePathList)));
//这里还需要更改场景的引用
var oldRoomName = oldRoomFilePath.Split ('_') [1];
IO.FileUtils.DeleteFile (oldRoomFilePath);
for (int i = 0; i < SceneFilePathList.Count; i++) {
string oldSceneFilePath = SceneFilePathList [i];
string newfile = oldSceneFilePath.Replace ("RoomScene_" + oldRoomName + "_", "RoomScene_" + Name + "_");
SceneFilePathList [i] = newfile;
IO.FileUtils.ReNameFile (oldSceneFilePath, newfile);
}
}
Save (newRoomFilePath);
}
///
/// 所有的房间列表路径
///
/// The room file path list.
public static System.Collections.Generic.List FilePathList {
get {
var rommBytes = IO.FileUtils.ReadFile (roomListFilePath);
string rommbyteString = System.Text.Encoding.UTF8.GetString (rommBytes);
return Newtonsoft.Json.JsonConvert.DeserializeObject> (rommbyteString);
}
}
///
/// 从文件中全部读取所有的房间数据到内存
///
public static void InitAllRoom ()
{
Lists.Clear ();
try {
if (null == Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (roomListFilePath)))) {
//初始化房间列表
Shared.IO.FileUtils.WriteFileByBytes (roomListFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (new System.Collections.Generic.List ())));
}
var roomFilePathList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (roomListFilePath)));
if (!roomFilePathList.Contains (FavoriteRoom)) {
roomFilePathList.Add (FavoriteRoom);
if (!IO.FileUtils.Exists (FavoriteRoom)) {
//默认添加对应的房间
new Room () { Name = "" }.Save (FavoriteRoom);
}
IO.FileUtils.WriteFileByBytes (roomListFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (roomFilePathList)));
}
foreach (var roomFilePath in roomFilePathList) {
var room = GetRoomByFilePath (roomFilePath);
if (null != room) {
Lists.Add (room);
}
}
for (int i = UserConfig.Instance.HideDeviceTypes.Count - 1; i >= 0; i--) {
var hideType = UserConfig.Instance.HideDeviceTypes [i];
foreach (var room in Room.Lists) {
var devices = room.DeviceList.Find ((obj) => {
return obj.DeviceTextID == hideType;
});
if (devices != null) {
UserConfig.Instance.HideDeviceTypes.Remove (hideType);
UserConfig.Instance.SaveUserConfig ();
break;
}
}
}
CheckACMerrill_Host ();
} catch {
Console.WriteLine ("解析房间列表异常");
}
}
///
/// 加载美林空调系统数据
///
static void CheckACMerrill_Host () {
ReadACMerrill_Host ();
if (mACMerrillHost != null) {
if (UserConfig.Instance.HideDeviceTypes.Contains (SimpleControl.R.MyInternationalizationString.ACMerrill)) {
UserConfig.Instance.HideDeviceTypes.Remove (SimpleControl.R.MyInternationalizationString.ACMerrill);
UserConfig.Instance.SaveUserConfig ();
}
}
}
public void SaveLightScene (string roomFilePath, string SceneRemark, Scene scene)
{
IO.FileUtils.WriteFileByBytes (roomFilePath + "_" + SceneRemark, Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (scene)));
IO.FileUtils.WriteFileByBytes (roomFilePath, System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (this)));
}
///
/// 灯光场景列表
///
public List LightScenePathList = new List ();
}
}