| | |
| | | }
|
| | | }
|
| | | /// <summary>
|
| | | /// 本地所有设备的缓存
|
| | | /// 本地所有设备的缓存(排序)
|
| | | /// </summary>
|
| | | public List<CommonDevice> listAllDevice
|
| | | {
|
| | | get
|
| | | {
|
| | | var list = new List<CommonDevice>();
|
| | | foreach (var listMac in this.dicDeviceSort.Values)
|
| | | lock (dicAllDevice)
|
| | | {
|
| | | foreach (var strMac in listMac)
|
| | | var list = new List<CommonDevice>();
|
| | | foreach (var device in dicAllDevice.Values)
|
| | | {
|
| | | var listTemp = this.GetDevicesByMac(strMac);
|
| | | list.AddRange(listTemp);
|
| | | list.Add(device);
|
| | | }
|
| | | return list;
|
| | | }
|
| | | return list;
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | /// </summary>
|
| | | private Dictionary<string, HashSet<int>> dicDeviceEpoint = new Dictionary<string, HashSet<int>>();
|
| | | /// <summary>
|
| | | /// 设备Mac顺序(里面是Mac地址)
|
| | | /// 物理设备属于哪个房间的记录
|
| | | /// </summary>
|
| | | private Dictionary<string, List<string>> dicDeviceSort = null;
|
| | | /// <summary>
|
| | | /// 设备文件的前缀名字
|
| | | /// </summary>
|
| | | public const string deviceFirstName = "Device_";
|
| | | private Dictionary<string, string> dicDeviceRoomId = null;
|
| | |
|
| | | #endregion
|
| | |
|
| | |
| | | }
|
| | | } |
| | | //成员身份的时候,删除掉非法的网关文件 |
| | | this.DeleteGatewayFileByMemberModel();
|
| | | //初始化设备顺序
|
| | | this.InitDeviceSort(); |
| | | this.DeleteGatewayFileByMemberModel(); |
| | | //初始化物理设备所属房间的记录 |
| | | this.InitRealDeviceRoomId(); |
| | | }
|
| | |
|
| | | /// <summary>
|
| | |
| | | /// <param name="device">设备对象(这个东西有可能会被更改)</param>
|
| | | public void AddDeviceToMemory(ref CommonDevice device)
|
| | | {
|
| | | if (dicDeviceSort.ContainsKey(device.CurrentGateWayId) == false)
|
| | | {
|
| | | dicDeviceSort[device.CurrentGateWayId] = new List<string>();
|
| | | }
|
| | | if (dicDeviceSort[device.CurrentGateWayId].Contains(device.DeviceAddr) == false)
|
| | | {
|
| | | //保存顺序
|
| | | dicDeviceSort[device.CurrentGateWayId].Add(device.DeviceAddr);
|
| | | UserCenterLogic.SaveFileContent(UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DeviceSortFile), dicDeviceSort);
|
| | | }
|
| | | string mainKeys = this.GetDeviceMainKeys(device);
|
| | | //如果它是升级的顶端端点,则不能让它加入到缓存,但是可以让他生成文件
|
| | | if (device is OTADevice)
|
| | |
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | if (dicDeviceSort.ContainsKey(listdevice[0].CurrentGateWayId) == true &&
|
| | | dicDeviceSort[listdevice[0].CurrentGateWayId].Contains(info.DeviceAddr) == true)
|
| | | {
|
| | | //保存顺序
|
| | | dicDeviceSort[listdevice[0].CurrentGateWayId].Remove(info.DeviceAddr);
|
| | | UserCenterLogic.SaveFileContent(UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DeviceSortFile), dicDeviceSort);
|
| | | }
|
| | |
|
| | | //删除文件
|
| | | foreach (CommonDevice device in listdevice)
|
| | | {
|
| | | this.DeleteMemmoryDevice(device);
|
| | | }
|
| | | if (this.dicDeviceRoomId.ContainsKey(listdevice[0].DeviceAddr) == true)
|
| | | {
|
| | | //移除真实设备的房间索引
|
| | | this.dicDeviceRoomId.Remove(listdevice[0].DeviceAddr);
|
| | | this.SaveRealDeviceRoomId(null, null);
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
| | | List<CommonDevice> list = new List<CommonDevice>();
|
| | | lock (dicAllDevice)
|
| | | {
|
| | | List<string> listSort = null;
|
| | | if (dicDeviceSort.ContainsKey(gwId) == false)
|
| | | {
|
| | | dicDeviceSort[gwId] = new List<string>();
|
| | | }
|
| | | listSort = dicDeviceSort[gwId];
|
| | |
|
| | | //各网关的所有设备
|
| | | foreach (CommonDevice device in this.dicAllDevice.Values)
|
| | | {
|
| | | if (gwId == device.CurrentGateWayId)
|
| | | {
|
| | | if (listSort.Contains(device.DeviceAddr) == false)
|
| | | {
|
| | | listSort.Add(device.DeviceAddr);
|
| | | }
|
| | | list.Add(device);
|
| | | }
|
| | | }
|
| | | //排序
|
| | | foreach (var strMac in listSort)
|
| | | {
|
| | | var listTemp = this.GetDevicesByMac(strMac);
|
| | | list.AddRange(listTemp);
|
| | | }
|
| | | //保存顺序
|
| | | UserCenterLogic.SaveFileContent(UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DeviceSortFile), dicDeviceSort);
|
| | | }
|
| | |
|
| | | return list;
|
| | |
| | | {
|
| | | List<string> listDeviceFile = new List<string>();
|
| | | List<string> listAllFile = Global.FileListByHomeId(); |
| | | |
| | | foreach (string file in listAllFile)
|
| | | {
|
| | | if (file.StartsWith(deviceFirstName) == false)
|
| | | if (file.StartsWith("Device_") == false)
|
| | | {
|
| | | //如果不是设备文件
|
| | | continue;
|
| | |
| | | /// <returns></returns>
|
| | | public void SetDeviceIconToControl(Button btnIcon, CommonDevice device)
|
| | | {
|
| | | if (device == null)
|
| | | {
|
| | | btnIcon.UnSelectedImagePath = "Device/ThirdPartyDevice.png";
|
| | | return;
|
| | | }
|
| | | string unSelectFilePath = string.Empty;
|
| | | string selectFilePath = string.Empty;
|
| | |
|
| | |
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 设备排序___________________________
|
| | | #region ■ 物理设备所属房间___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 初始化设备顺序
|
| | | /// 初始化物理设备所属房间的记录
|
| | | /// </summary>
|
| | | private void InitDeviceSort()
|
| | | private void InitRealDeviceRoomId()
|
| | | {
|
| | | //读取设备顺序
|
| | | this.dicDeviceSort = new Dictionary<string, List<string>>();
|
| | | string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DeviceSortFile);
|
| | | this.dicDeviceRoomId = new Dictionary<string, string>();
|
| | | string fullName = UserCenterLogic.CombinePath(DirNameResourse.DeviceRoomIdFile);
|
| | | var strData = UserCenterLogic.LoadFileContent(fullName);
|
| | | if (strData != null)
|
| | | {
|
| | | this.dicDeviceSort = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(strData);
|
| | | this.dicDeviceRoomId = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(strData);
|
| | | }
|
| | | foreach (var device in dicAllDevice.Values)
|
| | | {
|
| | | if (dicDeviceSort.ContainsKey(device.CurrentGateWayId) == false)
|
| | | {
|
| | | dicDeviceSort[device.CurrentGateWayId] = new List<string>();
|
| | | }
|
| | | if (dicDeviceSort[device.CurrentGateWayId].Contains(device.DeviceAddr) == false)
|
| | | {
|
| | | //新添加的设备
|
| | | dicDeviceSort[device.CurrentGateWayId].Add(device.DeviceAddr);
|
| | | }
|
| | | }
|
| | | foreach (var keys in dicDeviceSort.Keys)
|
| | | {
|
| | | var list = dicDeviceSort[keys];
|
| | | for (int i = 0; i < list.Count; i++)
|
| | | {
|
| | | if (this.dicDeviceEpoint.ContainsKey(list[i]) == false)
|
| | | {
|
| | | //这个东西莫名的不见了?和设备列表匹配不上?
|
| | | list.RemoveAt(i);
|
| | | i--;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | //保存顺序
|
| | | UserCenterLogic.SaveFileContent(fullName, dicDeviceEpoint);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 设备排序
|
| | | /// 保存物理设备所属房间的记录
|
| | | /// </summary>
|
| | | /// <param name="listDevice">需要排序的设备列表</param>
|
| | | /// <returns></returns>
|
| | | public List<CommonDevice> SortDevice(List<CommonDevice> listDevice)
|
| | | /// <param name="listDevice">需要保存的设备对象</param>
|
| | | /// <param name="roomId">需要保存的哪个设备的房间ID</param>
|
| | | public void SaveRealDeviceRoomId(List<CommonDevice> listDevice, string roomId)
|
| | | {
|
| | | var dic = new Dictionary<string, List<CommonDevice>>();
|
| | | for (int i = 0; i < listDevice.Count; i++)
|
| | | this.dicDeviceRoomId[listDevice[0].DeviceAddr] = roomId;
|
| | |
|
| | | //保存记录
|
| | | string fullName = UserCenterLogic.CombinePath(DirNameResourse.DeviceRoomIdFile);
|
| | | UserCenterLogic.SaveFileContent(fullName, this.dicDeviceRoomId);
|
| | |
|
| | | //如果设备只有一个回路,如果改变了真实设备区域,则它的回路的区域也一起改了
|
| | | if (listDevice.Count == 1)
|
| | | {
|
| | | if (dic.ContainsKey(listDevice[i].DeviceAddr) == false)
|
| | | {
|
| | | dic[listDevice[i].DeviceAddr] = new List<CommonDevice>();
|
| | | }
|
| | | dic[listDevice[i].DeviceAddr].Add(listDevice[i]);
|
| | | Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId);
|
| | | }
|
| | | var list = new List<CommonDevice>();
|
| | | var listCheck = new HashSet<string>();
|
| | | foreach (var listSort in this.dicDeviceSort.Values)
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取真实物理设备的房间名字
|
| | | /// </summary>
|
| | | /// <param name="device">设备的某一个回路</param>
|
| | | /// <returns></returns>
|
| | | public string GeteRealDeviceRoomName(CommonDevice device)
|
| | | {
|
| | | if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
|
| | | {
|
| | | for (int i = 0; i < listSort.Count; i++)
|
| | | {
|
| | | if (dic.ContainsKey(listSort[i]) == true && listCheck.Contains(listSort[i]) == false)
|
| | | {
|
| | | listCheck.Add(listSort[i]);
|
| | | dic[listSort[i]].Sort((obj1, obj2) =>
|
| | | {
|
| | | if (obj1.DeviceEpoint > obj2.DeviceEpoint)
|
| | | {
|
| | | return 1;
|
| | | }
|
| | | return -1;
|
| | | });
|
| | | list.AddRange(dic[listSort[i]]);
|
| | | }
|
| | | }
|
| | | //未分配区域
|
| | | return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
|
| | | }
|
| | | return list;
|
| | | var room = Room.CurrentRoom.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
|
| | | if (room != null)
|
| | | {
|
| | | return room.Name;
|
| | | }
|
| | | //未分配区域
|
| | | return Language.StringByID(R.MyInternationalizationString.uDeviceNotAssignedRoom);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取真实物理设备属于哪个房间
|
| | | /// </summary>
|
| | | /// <param name="device">设备的某一个回路</param>
|
| | | /// <returns></returns>
|
| | | public Room GeteRealDeviceRoom(CommonDevice device)
|
| | | {
|
| | | if (this.dicDeviceRoomId.ContainsKey(device.DeviceAddr) == false)
|
| | | {
|
| | | return null;
|
| | | }
|
| | | return Room.CurrentRoom.GetRoomById(this.dicDeviceRoomId[device.DeviceAddr]);
|
| | | }
|
| | |
|
| | | #endregion
|