HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-11-04 c7698e163e43cea9e7f8ee45f8e3f91c9265cca4
ZigbeeApp/Shared/Common/Device.cs
@@ -37,22 +37,21 @@
            }
        }
        /// <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;
            }
        }
@@ -85,13 +84,9 @@
        /// </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
@@ -175,9 +170,9 @@
                }
            }
            //成员身份的时候,删除掉非法的网关文件
            this.DeleteGatewayFileByMemberModel();
            //初始化设备顺序
            this.InitDeviceSort();
            this.DeleteGatewayFileByMemberModel();
            //初始化物理设备所属房间的记录
            this.InitRealDeviceRoomId();
        }
        /// <summary>
@@ -312,16 +307,6 @@
        /// <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)
@@ -521,18 +506,17 @@
                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;
        }
@@ -683,32 +667,14 @@
            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;
@@ -783,9 +749,10 @@
        {
            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;
@@ -1000,6 +967,11 @@
        /// <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;
@@ -1512,89 +1484,75 @@
        #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