public PairSocket GetClient <T>(T identifier) { var key = GenericBitConverter.GetBytes(identifier); PairSocket pairSocket; IdentitySocketsMap.TryGetValue(key, out pairSocket); return(pairSocket); }
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); }
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); } }
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); }