void Pump(Stream stream) { try { while (true) { byte[] buffer = new byte[8]; Read(stream, buffer, 0, 8); OnHeader(stream, buffer); while (true) { Read(stream, buffer, 0, 4); int len = AmqpBitConverter.ReadInt(buffer, 0); byte[] frame = new byte[len - 4]; Read(stream, frame, 0, frame.Length); if (!OnFrame(stream, new ByteBuffer(frame, 0, frame.Length, frame.Length))) { break; } } } } catch { stream.Dispose(); } }
public static ByteBuffer ReadFrameBuffer(ITransport transport, byte[] sizeBuffer, uint maxFrameSize) { if (!ReadBuffer(transport, sizeBuffer, 0, FixedWidth.UInt)) { return(null); } int size = AmqpBitConverter.ReadInt(sizeBuffer, 0); if ((uint)size > maxFrameSize) { throw new AmqpException(ErrorCode.InvalidField, Fx.Format(SRAmqp.InvalidFrameSize, size, maxFrameSize)); } ByteBuffer frameBuffer = new ByteBuffer(size, false); AmqpBitConverter.WriteInt(frameBuffer, size); if (!ReadBuffer(transport, frameBuffer.Buffer, frameBuffer.Length, frameBuffer.Size)) { return(null); } frameBuffer.Append(frameBuffer.Size); return(frameBuffer); }
int GetCount(byte formatCode, ByteBuffer buffer) { int count; if (formatCode >= 0xA0) { //bin8 a0 10100001 //str8 a1 10100001 //sym8 a3 10100011 //list8 c0 11000000 //map8 c1 11000001 //arr8 e0 11100000 //bin32 b0 10110000 //str32 b1 10110001 //sym32 b3 10110011 //lit32 d0 11010000 //map32 d1 11010001 //arr32 f0 11110000 if ((formatCode & 0x10) == 0) { count = AmqpBitConverter.ReadUByte(buffer); } else { count = AmqpBitConverter.ReadInt(buffer); } } else { count = (1 << ((formatCode >> 4) - 4)) >> 1; } return(count); }
void Pump(Stream stream) { try { while (pumpEnabled) { byte[] buffer = new byte[8]; Read(stream, buffer, 0, 8); testAmqpPeer.OnHeader(stream, buffer); while (pumpEnabled) { Read(stream, buffer, 0, 4); int len = AmqpBitConverter.ReadInt(buffer, 0); byte[] frame = new byte[len - 4]; Read(stream, frame, 0, frame.Length); if (!OnFrame(stream, new ByteBuffer(frame, 0, frame.Length, frame.Length))) { break; } } } } catch (Exception e) { Logger.Info(e); stream.Dispose(); } }
internal override void DecodeValue(ByteBuffer buffer) { int offset = buffer.Offset; byte formatCode = Encoder.ReadFormatCode(buffer); if (formatCode == FormatCode.Binary8) { this.binaryOffset = 2; } else if (formatCode == FormatCode.Binary32) { this.binaryOffset = 5; } else { while (formatCode == FormatCode.Described) { Encoder.ReadObject(buffer); formatCode = Encoder.ReadFormatCode(buffer); } } int count; if (formatCode >= 0xA0) { //bin8 a0 10100001 //str8 a1 10100001 //sym8 a3 10100011 //list8 c0 11000000 //map8 c1 11000001 //arr8 e0 11100000 //bin32 b0 10110000 //str32 b1 10110001 //sym32 b3 10110011 //lit32 d0 11010000 //map32 d1 11010001 //arr32 f0 11110000 if ((formatCode & 0x10) == 0) { count = AmqpBitConverter.ReadUByte(buffer); } else { count = AmqpBitConverter.ReadInt(buffer); } } else { count = (1 << ((formatCode >> 4) - 4)) >> 1; } buffer.Validate(false, count); buffer.Complete(count); int size = buffer.Offset - offset; this.valueBuffer = new ByteBuffer(buffer.Buffer, offset, size, size); }
public static char ReadChar(ByteBuffer buffer, byte formatCode) { if (formatCode == FormatCode.Char) { return((char)AmqpBitConverter.ReadInt(buffer)); } else { throw DecodeException(formatCode, buffer.Offset); } }
public static int?Decode(ByteBuffer buffer, FormatCode formatCode) { if (formatCode == 0 && (formatCode = AmqpEncoding.ReadFormatCode(buffer)) == FormatCode.Null) { return(null); } VerifyFormatCode(formatCode, buffer.Offset, FormatCode.Int, FormatCode.SmallInt); return(formatCode == FormatCode.SmallInt ? AmqpBitConverter.ReadByte(buffer) : AmqpBitConverter.ReadInt(buffer)); }
public static int ReadInt(ByteBuffer buffer, byte formatCode) { if (formatCode == FormatCode.SmallInt) { return(AmqpBitConverter.ReadByte(buffer)); } else if (formatCode == FormatCode.Int) { return(AmqpBitConverter.ReadInt(buffer)); } else { throw DecodeException(formatCode, buffer.Offset); } }
public void Can_Encode_Int_Without_Boxing_Using_Generic_DecodeObject() { var buffer = new ByteBuffer(1024, true); var instance = new TestCompositeClass(); instance.IntValue = randNum.Next(300, 1000); // compile lambda expression var compiled = CompileGenericPropertyEncodeExpression(typeof(TestCompositeClass), "IntValue"); // execute compiled(instance, buffer); // assert var formatCode = AmqpBitConverter.ReadByte(buffer); Assert.AreEqual(FormatCode.Int, formatCode); var value = AmqpBitConverter.ReadInt(buffer); Assert.AreEqual(instance.IntValue, value); }
public void TestMethod_AmqpBitConverter() { ByteBuffer buffer = new ByteBuffer(128, true); AmqpBitConverter.WriteByte(buffer, 0x22); AmqpBitConverter.WriteByte(buffer, -0x22); AmqpBitConverter.WriteUByte(buffer, 0x22); AmqpBitConverter.WriteUByte(buffer, 0xB2); AmqpBitConverter.WriteShort(buffer, 0x22B7); AmqpBitConverter.WriteShort(buffer, -0x22B7); AmqpBitConverter.WriteUShort(buffer, 0x22B7); AmqpBitConverter.WriteUShort(buffer, 0xC2B7); AmqpBitConverter.WriteInt(buffer, 0x340da287); AmqpBitConverter.WriteInt(buffer, -0x340da287); AmqpBitConverter.WriteUInt(buffer, 0x340da287); AmqpBitConverter.WriteUInt(buffer, 0xF40da287); AmqpBitConverter.WriteLong(buffer, 0x5d00BB9A340da287); AmqpBitConverter.WriteLong(buffer, -0x5d00BB9A340da287); AmqpBitConverter.WriteULong(buffer, 0x5d00BB9A340da287); AmqpBitConverter.WriteULong(buffer, 0xad00BB9A340da287); AmqpBitConverter.WriteFloat(buffer, 12344.4434F); AmqpBitConverter.WriteFloat(buffer, -12344.4434F); AmqpBitConverter.WriteDouble(buffer, 39432123244.44352334); AmqpBitConverter.WriteDouble(buffer, -39432123244.44352334); Guid uuid = Guid.NewGuid(); AmqpBitConverter.WriteUuid(buffer, uuid); sbyte b = AmqpBitConverter.ReadByte(buffer); sbyte b2 = AmqpBitConverter.ReadByte(buffer); byte ub = AmqpBitConverter.ReadUByte(buffer); byte ub2 = AmqpBitConverter.ReadUByte(buffer); short s = AmqpBitConverter.ReadShort(buffer); short s2 = AmqpBitConverter.ReadShort(buffer); ushort us = AmqpBitConverter.ReadUShort(buffer); ushort us2 = AmqpBitConverter.ReadUShort(buffer); int i = AmqpBitConverter.ReadInt(buffer); int i2 = AmqpBitConverter.ReadInt(buffer); uint ui = AmqpBitConverter.ReadUInt(buffer); uint ui2 = AmqpBitConverter.ReadUInt(buffer); long l = AmqpBitConverter.ReadLong(buffer); long l2 = AmqpBitConverter.ReadLong(buffer); ulong ul = AmqpBitConverter.ReadULong(buffer); ulong ul2 = AmqpBitConverter.ReadULong(buffer); float f = AmqpBitConverter.ReadFloat(buffer); float f2 = AmqpBitConverter.ReadFloat(buffer); double d = AmqpBitConverter.ReadDouble(buffer); double d2 = AmqpBitConverter.ReadDouble(buffer); Guid uuid2 = AmqpBitConverter.ReadUuid(buffer); }