/// <summary>
        /// 存储协议包携带的数据
        /// </summary>
        /// <param name="package">接收到的协议包</param>
        /// <param name="source">接收数据源</param>
        public void StoreData(IProtocolPackage <byte[]> package, IPackageSource source)
        {
            var monitorDataList = new List <MonitorData>();

            for (var i = 0; i < package.Command.CommandDatas.Count; i++)
            {
                var monitorData = new MonitorDataRepository().CreateDefaultModel();
                monitorData.DomainId = package.Device.DomainId;

                var commandData = package.Command.CommandDatas.First(obj => obj.DataIndex == i);

                var temp = _dataConverter.DecodeComponentData(package[commandData.DataName]);

                monitorData.DoubleValue     = Convert.ToDouble(temp);
                monitorData.ProtocolDataId  = package.ProtocolData.Id;
                monitorData.UpdateTime      = DateTime.Now;
                monitorData.CommandDataId   = commandData.Id;
                monitorData.DeviceIdentity  = package.Device.Identity;
                monitorData.ProjectIdentity = package.Device.Project.Identity;

                monitorDataList.Add(monitorData);
            }

            if (package[ProtocolDataName.DataValidFlag] != null)
            {
                ProcessDataValidFlag(package, monitorDataList);
            }

            lock (TempMonitorDatas)
            {
                TempMonitorDatas.AddRange(monitorDataList);
            }

            OnMonitorDataReceived();
        }
        public void Lampblack(IProtocolPackage <byte[]> package, IPackageSource source)
        {
            var monitorDataList = new List <MonitorData>();

            foreach (var dataComponent in package.DataComponents)
            {
                if (dataComponent.Value.CommandData.DataName == null ||
                    dataComponent.Value.CommandData.DataConvertType == ProtocolDataType.None)
                {
                    continue;
                }
                var data = _dataConverter.DecodeComponentData(dataComponent.Value);

                var monitorData = new MonitorDataRepository().CreateDefaultModel();
                monitorData.DomainId = package.Device.DomainId;

                switch (dataComponent.Value.CommandData.DataValueType)
                {
                case DataValueType.Double:
                    monitorData.DoubleValue = Convert.ToDouble(data);
                    break;

                case DataValueType.Integer:
                    monitorData.IntegerValue = Convert.ToInt32(data);
                    break;

                case DataValueType.Boolean:
                    monitorData.BooleanValue = Convert.ToBoolean(data);
                    break;
                }

                monitorData.ProtocolDataId  = package.ProtocolData.Id;
                monitorData.UpdateTime      = DateTime.Now;
                monitorData.CommandDataId   = dataComponent.Value.CommandData.Id;
                monitorData.DeviceIdentity  = package.Device.Identity;
                monitorData.ProjectIdentity = package.Device.Project.Identity;
                monitorData.DataIsValid     = (dataComponent.Value.ValidFlag & 0x80) == 0;
                monitorData.DataChannel     = dataComponent.Value.ComponentChannel;

                monitorDataList.Add(monitorData);

                if (dataComponent.Value.CommandData.DataName != "CleanerCurrent")
                {
                    continue;
                }
                var cleanerSwitch = new MonitorData
                {
                    DomainId        = package.Device.DomainId,
                    ProtocolDataId  = package.ProtocolData.Id,
                    UpdateTime      = DateTime.Now,
                    CommandDataId   = new Guid("15802959-D25B-42AD-BE50-5B48DCE4039A"),
                    DeviceIdentity  = package.Device.Identity,
                    ProjectIdentity = package.Device.Project.Identity,
                    DataIsValid     = true,
                    DataChannel     = dataComponent.Value.ComponentChannel
                };
                if (monitorData.DoubleValue > 4)
                {
                    cleanerSwitch.BooleanValue = true;
                }
                monitorDataList.Add(cleanerSwitch);
            }

            lock (TempMonitorDatas)
            {
                TempMonitorDatas.AddRange(monitorDataList);
            }

            OnMonitorDataReceived();
        }