Ejemplo n.º 1
0
        public PairSocket GetClient <T>(T identifier)
        {
            var key = GenericBitConverter.GetBytes(identifier);

            PairSocket pairSocket;

            IdentitySocketsMap.TryGetValue(key, out pairSocket);

            return(pairSocket);
        }
Ejemplo n.º 2
0
        public void Append(object value)
        {
            if (value is ProtocolCommand)
            {
                value = ((ProtocolCommand)value).CODE;
            }

            senderBuffer.AddRange(GenericBitConverter.GetBytes(value));

            if (value.GetType() == typeof(string))
            {
                AppendEmptyFrame();
            }
        }
        //TODO:测试用,可删除
        #region PresetData 的类型为int时候,测试用,可删除

        //public List<FunNum06RequestDataBase> CovertToFunNum06RequestDataBases()
        //{
        //    List<FunNum06RequestDataBase> funNum06RequestDataBases = new List<FunNum06RequestDataBase>();

        //    if (Int16.MinValue <= PresetData && PresetData <= Int16.MaxValue)
        //    {
        //        //16位的值

        //        FunNum06RequestDataBase funNum06RequestDataBase = new FunNum06RequestDataBase();

        //        funNum06RequestDataBase.DeviceAddress = this.DeviceAddress;
        //        funNum06RequestDataBase.FunctionNum =  Convert.ToByte(Convert.ToInt32(this.FunctionNum));
        //        funNum06RequestDataBase.RegisterAddressHigh = (byte)(this.RegisterAddress / 256);
        //        funNum06RequestDataBase.RegisterAddressLow = (byte)(this.RegisterAddress % 256);
        //        funNum06RequestDataBase.PresetDataHigh = (byte)(this.PresetData / 256);
        //        funNum06RequestDataBase.PresetDataLow = (byte)(this.PresetData % 256);

        //        ///TODO:测试,可删除
        //        byte[] presetDatabyte = BitConverter.GetBytes(this.PresetData);

        //        funNum06RequestDataBases.Add(funNum06RequestDataBase);
        //    }
        //    else if ((Int32.MinValue<= PresetData && PresetData < Int16.MinValue)
        //        || (Int16.MaxValue < PresetData && PresetData <= Int32.MaxValue))

        //    {
        //        //32位的值:转化为字节数组后,从高位到低位顺序设为:[高2][低2][高1][低1]
        //        //分两次发送:
        //        //第一次:设置的值为:32位值的[高1][低1]
        //        //第二次:寄存器地址加1,设置的值为:32位值的[高2][低2]

        //        byte[] bytePresetData =  BitConverter.GetBytes(PresetData);

        //        //TODO:测试,可删除
        //        int intPresetData = BitConverter.ToInt32(bytePresetData, 0);

        //        for (int i = 0, k = 0; i < 2; i++, k+=2)
        //        {
        //            FunNum06RequestDataBase funNum06RequestDataBase = new FunNum06RequestDataBase();

        //            funNum06RequestDataBase.DeviceAddress = this.DeviceAddress;
        //            funNum06RequestDataBase.FunctionNum = Convert.ToByte(Convert.ToInt32(this.FunctionNum));
        //            funNum06RequestDataBase.RegisterAddressHigh = (byte)((this.RegisterAddress + i) / 256);
        //            funNum06RequestDataBase.RegisterAddressLow = (byte)((this.RegisterAddress + i) % 256);
        //            funNum06RequestDataBase.PresetDataHigh = bytePresetData[k + 1];
        //            funNum06RequestDataBase.PresetDataLow = bytePresetData[k];

        //            funNum06RequestDataBases.Add(funNum06RequestDataBase);
        //        }

        //    }
        //    return funNum06RequestDataBases;
        //}

        #endregion

        public List <FunNum06RequestDataBase> CovertToFunNum06RequestDataBases()
        {
            List <FunNum06RequestDataBase> funNum06RequestDataBases = new List <FunNum06RequestDataBase>();

            //LH LH ....
            byte[] bytePresetData = GenericBitConverter.GetBytes <T>(PresetData);
            if (null == bytePresetData)
            {
                return(funNum06RequestDataBases);
            }

            int countOfRequestDataBase = bytePresetData.Length / 2;

            for (int i = 0, k = 0; i <= countOfRequestDataBase && k < bytePresetData.Length; i++, k += 2)
            {
                FunNum06RequestDataBase funNum06RequestDataBase = new FunNum06RequestDataBase();

                funNum06RequestDataBase.DeviceAddress       = this.DeviceAddress;
                funNum06RequestDataBase.FunctionNum         = Convert.ToByte(Convert.ToInt32(this.FunctionNum));
                funNum06RequestDataBase.RegisterAddressHigh = (byte)((this.RegisterAddress + i) / 256);
                funNum06RequestDataBase.RegisterAddressLow  = (byte)((this.RegisterAddress + i) % 256);

                //bytePresetData:LH LH ....
                //注意:
                //funNum06RequestDataBase.PresetDataHigh 表示第一个字节
                //funNum06RequestDataBase.PresetDataHigh 表示第二个字节
                //已经不是它们字面的意思了

                //根据数据解析模式反转数据高低位
                if (this.DataAnalyzeMode == DataAnalyzeMode.DataHighToLow)
                {
                    //HL HL
                    funNum06RequestDataBase.PresetDataHigh = bytePresetData[k + 1]; //第一个字节被赋值bytePresetData的高位
                    funNum06RequestDataBase.PresetDataLow  = bytePresetData[k];
                }
                else
                {
                    //LH LH
                    funNum06RequestDataBase.PresetDataHigh = bytePresetData[k];    //第一个字节被赋值bytePresetData的低位
                    funNum06RequestDataBase.PresetDataLow  = bytePresetData[k + 1];
                }

                funNum06RequestDataBases.Add(funNum06RequestDataBase);
            }

            return(funNum06RequestDataBases);
        }
Ejemplo n.º 4
0
        public T ReadNext <T>()
        {
            if (typeof(T) == typeof(string))
            {
                var bytes = ReadNext();
                var value = Encoding.UTF8.GetString(bytes.ToArray());
                return((T)Convert.ChangeType(value, typeof(T)));
            }
            else
            {
                int size;
                var result = GenericBitConverter.GetValue <T>(receivedData, pointer, out size);
                pointer += size;

                return(result);
            }
        }
Ejemplo n.º 5
0
        private FunNum16RequestDataBase CovertSingleCustomerRequestDataToSingleRequestDataBase(FunNum16CustomerRequestData <T> customerRequestData)
        {
            int byteCountOfT = GetByteCountOfT();
            FunNum16RequestDataBase requestDataBase = new FunNum16RequestDataBase();

            requestDataBase.DeviceAddress = customerRequestData.DeviceAddress;
            requestDataBase.FunctionNum   = Convert.ToByte(Convert.ToInt32(customerRequestData.FunctionNum));
            requestDataBase.StartingRegisterAddressHigh = (byte)(customerRequestData.StartingRegisterAddress / 256);
            requestDataBase.StartingRegisterAddressLow  = (byte)(customerRequestData.StartingRegisterAddress % 256);

            List <byte> presetDataTemp = new List <byte>();

            foreach (T singlePresetData in customerRequestData.PresetData)
            {
                //LH LH...
                byte[] bytePresetData = GenericBitConverter.GetBytes <T>(singlePresetData);

                if (this.DataAnalyzeMode == DataAnalyzeMode.DataHighToLow)
                {
                    //HL HL
                    for (int i = 0; i <= bytePresetData.Length / 2 && i < bytePresetData.Length; i += 2)
                    {
                        presetDataTemp.Add(bytePresetData[i + 1]); //先加入高位
                        presetDataTemp.Add(bytePresetData[i]);     //后加入低位
                    }
                }
                else
                {
                    //LH LH
                    presetDataTemp.AddRange(bytePresetData.ToList());
                }
            }
            requestDataBase.PresetData = presetDataTemp;

            return(requestDataBase);
        }
        /// <summary>
        /// 获取目标类型的所占字节数
        /// </summary>
        /// <returns></returns>
        private int GetByteCountOfT()
        {
            int byteCountOfT = GenericBitConverter.GetByteCountOfT <T>();

            return(byteCountOfT);
        }