Exemple #1
0
        public override void OnEvent(DeviceEvents deviceEvents)
        {
            base.OnEvent(deviceEvents);

            foreach (DeviceEvent deviceEvent in deviceEvents.services)
            {
                if (deviceEvent.eventType == "start_scan")
                {
                    ScanSubdeviceNotify scanSubdeviceNotify = JsonUtil.ConvertDicToObject <ScanSubdeviceNotify>(
                        deviceEvent.paras);

                    if (subDevDiscoveryListener != null)
                    {
                        subDevDiscoveryListener.OnScan(scanSubdeviceNotify);
                    }
                }
                else if (deviceEvent.eventType == "add_sub_device_notify")
                {
                    SubDevicesInfo subDevicesInfo = JsonUtil.ConvertDicToObject <SubDevicesInfo>(
                        deviceEvent.paras);

                    OnAddSubDevices(subDevicesInfo);
                }
                else if (deviceEvent.eventType == "delete_sub_device_notify")
                {
                    SubDevicesInfo subDevicesInfo = JsonUtil.ConvertDicToObject <SubDevicesInfo>(
                        deviceEvent.paras);

                    OnDeleteSubDevices(subDevicesInfo);
                }
            }
        }
        private int RmvSubDeviceToFile(SubDevicesInfo subDevicesInfo)
        {
            try
            {
                string content = ReadJsonFile();

                SubDevInfo subDevInfo = JsonUtil.ConvertJsonStringToObject <SubDevInfo>(content);

                if (subDevInfo.subdevices == null)
                {
                    return(0);
                }

                foreach (DeviceInfo dev in subDevicesInfo.devices)
                {
                    subDevInfo.subdevices.Remove(dev.nodeId);
                    subDevInfo.version = subDevicesInfo.version;
                }

                File.WriteAllText(path, JsonUtil.ConvertObjectToJsonString(subDevInfo));
            }
            catch (Exception ex)
            {
                Log.Error("remove sub device fail in json file");

                return(-1);
            }

            return(0);
        }
Exemple #3
0
        /// <summary>
        /// 删除子设备处理回调,子类可以重写此接口进行扩展
        /// </summary>
        /// <param name="subDevicesInfo">子设备信息</param>
        /// <returns>处理结果,0表示成功</returns>
        public virtual int OnDeleteSubDevices(SubDevicesInfo subDevicesInfo)
        {
            if (subDevicesPersistence != null)
            {
                return(subDevicesPersistence.DeleteSubDevices(subDevicesInfo));
            }

            return(-1);
        }
Exemple #4
0
        /// <summary>
        /// 添加子设备处理回调,子类可以重写此接口进行扩展
        /// </summary>
        /// <param name="subDevicesInfo">子设备信息</param>
        /// <returns>处理结果,0表示成功</returns>
        public int OnAddSubDevices(SubDevicesInfo subDevicesInfo)
        {
            if (subDevicesPersistence != null)
            {
                return(subDevicesPersistence.AddSubDevices(subDevicesInfo));
            }

            return(-1);
        }
        public int DeleteSubDevices(SubDevicesInfo subDevicesInfo)
        {
            mutex.WaitOne();
            try
            {
                if (subDevicesInfo.version > 0 && subDevicesInfo.version <= subDevInfoCache.version)
                {
                    Log.Info("version too low: " + subDevicesInfo.version);

                    return(-1);
                }

                if (subDevInfoCache.subdevices == null)
                {
                    return(-1);
                }

                if (RmvSubDeviceToFile(subDevicesInfo) != 0)
                {
                    Log.Info("remove from file fail ");

                    return(-1);
                }

                foreach (DeviceInfo dev in subDevicesInfo.devices)
                {
                    subDevInfoCache.subdevices.Remove(dev.nodeId);
                    Log.Info("rmv subdev :" + dev.nodeId);
                }

                subDevInfoCache.version = subDevicesInfo.version;
                Log.Info("local version update to " + subDevicesInfo.version);
            }
            finally
            {
                // 释放锁
                mutex.ReleaseMutex();
            }

            return(0);
        }
        public int AddSubDevices(SubDevicesInfo subDevicesInfo)
        {
            mutex.WaitOne();
            try
            {
                if (subDevicesInfo.version > 0 && subDevicesInfo.version <= subDevInfoCache.version)
                {
                    Log.Info("version too low: " + subDevicesInfo.version);

                    return(-1);
                }

                if (AddSubDeviceToFile(subDevicesInfo) != 0)
                {
                    Log.Info("write file fail ");

                    return(-1);
                }

                if (subDevInfoCache.subdevices == null)
                {
                    subDevInfoCache.subdevices = new Dictionary <string, DeviceInfo>();
                }

                foreach (DeviceInfo dev in subDevicesInfo.devices)
                {
                    subDevInfoCache.subdevices.Add(dev.nodeId, dev);
                    Log.Info("add subdev: " + dev.nodeId);
                }

                subDevInfoCache.version = subDevicesInfo.version;
                Log.Info("version update to " + subDevInfoCache.version);
            }
            finally
            {
                // 释放锁
                mutex.ReleaseMutex();
            }

            return(0);
        }
Exemple #7
0
        public override int OnDeleteSubDevices(SubDevicesInfo subDevicesInfo)
        {
            foreach (DeviceInfo subdevice in subDevicesInfo.devices)
            {
                if (nodeIdToSesseionDic.ContainsKey(subdevice.nodeId))
                {
                    Session session = nodeIdToSesseionDic[subdevice.nodeId];

                    if (session.channel != null)
                    {
                        session.channel.CloseAsync();

                        channelIdToSessionDic.Remove(session.channel.Id.AsLongText());

                        nodeIdToSesseionDic.Remove(session.nodeId);
                    }
                }
            }

            return(base.OnDeleteSubDevices(subDevicesInfo));
        }