Пример #1
0
 public virtual IEnumerable <DataContext> this[DataFlag flag]
 {
     get
     {
         return(contextLookup[flag]);
     }
 }
Пример #2
0
 public virtual async Task <DbResult> UpdateFlagAsync(T item, DataFlag flag)
 {
     if (typeof(IFlagEntity).IsAssignableFrom(typeof(T)))
     {
         ((IFlagEntity)item).Flag = flag;
     }
     return(await UpdateAsync(item));
 }
Пример #3
0
 public static void Apply(this IProtocolConverter protocolConverter,
                          byte[] destination, ref int index, object data, DataFlag dataFlag)
 {
     protocolConverter.Apply(destination, ref index, new DataContext()
     {
         Data     = data,
         DataFlag = dataFlag
     });
 }
Пример #4
0
        public virtual async Task <DbResult> UpdateFlagAsync(TKey id, DataFlag flag)
        {
            var item = await GetByIdAsync(id);

            if (typeof(IFlagEntity).IsAssignableFrom(typeof(T)))
            {
                ((IFlagEntity)item).Flag = flag;
            }
            return(await UpdateAsync(item));
        }
Пример #5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dataLength"></param>
        /// <param name="refValue"></param>
        public PumpProcessor(byte[] data, int Len, ref object oPars)
        {
            //������
            //
            if (Len <= 2)
            {
                oPars = null;
                _dataFlag = DataFlag.LENGTH_ERROR;
                return;
            }

            //������
            byte[] DataVal = new byte[Len - 2];
            for (int i = 0; i < Len - 2; i++)
            {
                DataVal[i] = data[i];
            }
            crc = CRC.CRC16(DataVal);

            //��������
            if (data[Len - 2] == crc[0] && data[Len - 1] == crc[1])
            {
                address = (int)data[3];//�õ�վ��
                switch (data[5])
                {
                    //ʵʱ����
                    case PumpDefine.FCDefine.FC_READREAL:
                        {
                            // �������ݳ���Ӧ��Ϊ46
                            // �п����ϴ�����Ϊ28��CRCУ����ȷ������
                            //
                            if (data.Length == 46)
                            {
                                //Read_Rlt(data, ref refValue);
                                PumpRealData prd = ParseRealData(data);
                                oPars = prd;
                            }
                            else
                            {
                                _dataFlag = DataFlag.LENGTH_ERROR;
                                oPars = null;
                                return;
                            }
                        }
                        break;
                }
                this._dataFlag = DataFlag.OK;
            }
            else
            {
                this._dataFlag = DataFlag.CRC_ERROR;
                oPars = null;
            }
        }
Пример #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dataLength"></param>
        /// <param name="refValue"></param>
        public PumpProcessor(byte[] data, int Len, ref object oPars)
        {
            //进行校验
            //
            if (Len <= 2)
            {
                oPars     = null;
                _dataFlag = DataFlag.LENGTH_ERROR;
                return;
            }

            //进行校验
            byte[] DataVal = new byte[Len - 2];
            for (int i = 0; i < Len - 2; i++)
            {
                DataVal[i] = data[i];
            }
            crc = CRC.CRC16(DataVal);

            //分析数据
            if (data[Len - 2] == crc[0] && data[Len - 1] == crc[1])
            {
                address = (int)data[3];//得到站号
                switch (data[5])
                {
                //实时数据
                case PumpDefine.FCDefine.FC_READREAL:
                {
                    // 正常数据长度应该为46
                    // 有可能上传长度为28且CRC校验正确的数据
                    //
                    if (data.Length == 46)
                    {
                        //Read_Rlt(data, ref refValue);
                        PumpRealData prd = ParseRealData(data);
                        oPars = prd;
                    }
                    else
                    {
                        _dataFlag = DataFlag.LENGTH_ERROR;
                        oPars     = null;
                        return;
                    }
                }
                break;
                }
                this._dataFlag = DataFlag.OK;
            }
            else
            {
                this._dataFlag = DataFlag.CRC_ERROR;
                oPars          = null;
            }
        }
Пример #7
0
        public override bool Equals(object obj)
        {
            DataFlag otherObj = (DataFlag)obj;

            return(otherObj.InternalValue.Equals(this.InternalValue));
        }
Пример #8
0
        /// <summary>
        /// 解析来自口门测控仪数据
        /// </summary>
        /// <param name="data">用户数据</param>
        /// <param name="dataLength"></param>
        /// <param name="refValue">返回结果</param>
        public GateReader(byte[] data, ref object oPars)
        {
            int dataLength = 0;

            if (data != null)
            {
                dataLength = data.Length;
            }

            //TODO: len < 2, 2007-06-25 Added
            //
            //进行校验
            if (dataLength <= 2)
            {
                oPars     = null;
                _dataFlag = DataFlag.LENGTH_ERROR;
                return;
            }

            byte[] dataValue = new byte[dataLength - 2];
            for (int i = 0; i < dataLength - 2; i++)
            {
                dataValue[i] = data[i];
            }
            crc = CRC.CRC16(dataValue);

            //分析数据(带校验)
            //
            // crc success
            //
            if (data[dataLength - 2] == crc[0] && data[dataLength - 1] == crc[1])
            {
                //得到站号
                comAdr = (int)data[3];

                // data[5] - Function code
                //
                switch (data[5])
                {
                //参数数据
                case 0x23:
                    Read_Par(data, ref oPars);
                    break;

                //实时数据
                case 0x24:
                    Read_Rlt(data, ref oPars);
                    break;

                //历史记录
                case 0x25:
                {
                    if (!Read_His(data, ref oPars))
                    {
                        _dataFlag = DataFlag.DATA_ERROR;
                        oPars     = null;
                        return;
                    }
                    break;
                }

                //输入水量记录
                //
                case 0x37:
                    Read_InWater(data, ref oPars);
                    break;

                //最后一条记录
                //
                case 0x3C:
                    if (!Read_His(data, ref oPars))
                    {
                        _dataFlag = DataFlag.DATA_ERROR;
                        oPars     = null;
                        return;
                    }
                    break;

                //读取状态量
                //
                default:
                    Read_Sts(data, ref oPars);
                    break;
                }
                _dataFlag = DataFlag.OK;
            }
            else
            {
                _dataFlag = DataFlag.CRC_ERROR;
                oPars     = null;
            }
        }
Пример #9
0
 public bool Contains(DataFlag key)
 {
     return(contextLookup.Contains(key));
 }
Пример #10
0
        public static T Resolve <T>(this IProtocolConverter protocolConverter, byte[] source, ref int index, DataFlag checkDataFlag)
        {
            var dataContext = protocolConverter.Resolve(source, ref index);

            if (dataContext.DataFlag != checkDataFlag)
            {
                throw new ProtocolException($"Data flag should be '{checkDataFlag}' bus is ''{dataContext.DataFlag}", ErrorCode.BadRequest);
            }

            return((T)dataContext.Data);
        }
        public static bool TryResolveSingle <T>(this ILookup <DataFlag, DataContext> lookup, DataFlag dataFlag, out T data)
        {
            var array = lookup[dataFlag].Select(c => c.Data).OfType <T>().ToArray();

            data = array.FirstOrDefault();
            return(array.Length == 1);
        }
 public static bool TryResolve <T>(this ILookup <DataFlag, DataContext> lookup, DataFlag dataFlag, out T[] data)
 {
     data = lookup[dataFlag].Select(c => c.Data).OfType <T>().ToArray();
     return(data.Length > 0);
 }
        public static T ResolveSingle <T>(this ILookup <DataFlag, DataContext> lookup, DataFlag dataFlag)
        {
            if (lookup.TryResolveSingle <T>(dataFlag, out var data))
            {
                return(data);
            }

            throw new ProtocolException($"Data for flag '{dataFlag}' not found or found more than 1", ErrorCode.DataNotFound);
        }
        public static T[] Resolve <T>(this ILookup <DataFlag, DataContext> lookup, DataFlag dataFlag)
        {
            var result = lookup[dataFlag].Select(c => c.Data).OfType <T>().ToArray();

            return(result);
        }
Пример #15
0
        /// <summary>
        /// �������Կ��Ų��������
        /// </summary>
        /// <param name="data">�û�����</param>
        /// <param name="dataLength"></param>
        /// <param name="refValue">���ؽ��</param>
        public GateReader(byte[] data, ref object oPars)
        {
            int dataLength = 0;
            if (data != null)
            {
                dataLength = data.Length;
            }

            //TODO: len < 2, 2007-06-25 Added
            //
            //������
            if (dataLength <= 2)
            {
                oPars = null;
                _dataFlag = DataFlag.LENGTH_ERROR;
                return;
            }

            byte[] dataValue = new byte[dataLength - 2];
            for (int i = 0; i < dataLength - 2; i++)
            {
                dataValue[i] = data[i];
            }
            crc = CRC.CRC16(dataValue);

            //��������(����)
            //
            // crc success
            //
            if (data[dataLength - 2] == crc[0] && data[dataLength - 1] == crc[1])
            {
                //�õ�վ��
                comAdr = (int)data[3];

                // data[5] - Function code
                //
                switch (data[5])
                {
                    //��������
                    case 0x23:
                        Read_Par(data, ref oPars);
                        break;
                    //ʵʱ����
                    case 0x24:
                        Read_Rlt(data, ref oPars);
                        break;
                    //��ʷ��¼
                    case 0x25:
                        {
                            if (!Read_His(data, ref oPars))
                            {
                                _dataFlag = DataFlag.DATA_ERROR;
                                oPars = null;
                                return;
                            }
                            break;
                        }
                    //����ˮ����¼
                    //
                    case 0x37:
                        Read_InWater(data, ref oPars);
                        break;

                    //���һ����¼
                    //
                    case 0x3C:
                        if (!Read_His(data, ref oPars))
                        {
                            _dataFlag = DataFlag.DATA_ERROR;
                            oPars = null;
                            return;
                        }
                        break;

                    //��ȡ״̬��
                    //
                    default:
                        Read_Sts(data, ref oPars);
                        break;
                }
                _dataFlag = DataFlag.OK;
            }
            else
            {
                _dataFlag = DataFlag.CRC_ERROR;
                oPars = null;
            }
        }