public TLVAmqp getValue() { TLVAmqp bin = null; if (_data != null) { bin = AMQPWrapper <AMQPSymbol> .wrap(_data); } else { bin = new TLVNull(); } DescribedConstructor constructor = new DescribedConstructor(bin.Code, new TLVFixed(AMQPType.SMALL_ULONG, new byte[] { 0x75 })); bin.Constructor = constructor; return(bin); }
private static TLVAmqp getElement(SimpleConstructor constructor, IByteBuffer buf) { TLVAmqp tlv = null; AMQPType code = constructor.Code; switch (code) { case AMQPType.NULL: tlv = new TLVNull(); break; case AMQPType.BOOLEAN_TRUE: case AMQPType.BOOLEAN_FALSE: case AMQPType.UINT_0: case AMQPType.ULONG_0: tlv = new TLVFixed(code, new byte[0]); break; case AMQPType.BOOLEAN: case AMQPType.UBYTE: case AMQPType.BYTE: case AMQPType.SMALL_UINT: case AMQPType.SMALL_INT: case AMQPType.SMALL_ULONG: case AMQPType.SMALL_LONG: byte valueOne = buf.ReadByte(); tlv = new TLVFixed(code, new byte[] { valueOne }); break; case AMQPType.SHORT: case AMQPType.USHORT: byte[] valueTwo = new byte[2]; buf.ReadBytes(valueTwo); tlv = new TLVFixed(code, valueTwo); break; case AMQPType.UINT: case AMQPType.INT: case AMQPType.FLOAT: case AMQPType.DECIMAL_32: case AMQPType.CHAR: byte[] valueFour = new byte[4]; buf.ReadBytes(valueFour); tlv = new TLVFixed(code, valueFour); break; case AMQPType.ULONG: case AMQPType.LONG: case AMQPType.DECIMAL_64: case AMQPType.DOUBLE: case AMQPType.TIMESTAMP: byte[] valueEight = new byte[8]; buf.ReadBytes(valueEight); tlv = new TLVFixed(code, valueEight); break; case AMQPType.DECIMAL_128: case AMQPType.UUID: byte[] valueSixteen = new byte[16]; buf.ReadBytes(valueSixteen); tlv = new TLVFixed(code, valueSixteen); break; case AMQPType.STRING_8: case AMQPType.SYMBOL_8: case AMQPType.BINARY_8: int var8length = buf.ReadByte() & 0xff; byte[] varValue8 = new byte[var8length]; buf.ReadBytes(varValue8, 0, varValue8.Length); tlv = new TLVVariable(code, varValue8); break; case AMQPType.STRING_32: case AMQPType.SYMBOL_32: case AMQPType.BINARY_32: int var32length = buf.ReadInt(); byte[] varValue32 = new byte[var32length]; buf.ReadBytes(varValue32, 0, varValue32.Length); tlv = new TLVVariable(code, varValue32); break; case AMQPType.LIST_0: tlv = new TLVList(); break; case AMQPType.LIST_8: int list8size = buf.ReadByte() & 0xff; int list8count = buf.ReadByte() & 0xff; List <TLVAmqp> list8values = new List <TLVAmqp>(); for (int i = 0; i < list8count; i++) { list8values.Add(TLVFactory.getTlv(buf)); } tlv = new TLVList(code, list8values); break; case AMQPType.LIST_32: int list32size = buf.ReadInt(); int list32count = buf.ReadInt(); List <TLVAmqp> list32values = new List <TLVAmqp>(); for (int i = 0; i < list32count; i++) { list32values.Add(TLVFactory.getTlv(buf)); } tlv = new TLVList(code, list32values); break; case AMQPType.MAP_8: Dictionary <TLVAmqp, TLVAmqp> map8 = new Dictionary <TLVAmqp, TLVAmqp>(); int map8size = buf.ReadByte() & 0xff; int map8count = buf.ReadByte() & 0xff; int stop8 = buf.ReaderIndex + map8size - 1; while (buf.ReaderIndex < stop8) { map8[TLVFactory.getTlv(buf)] = TLVFactory.getTlv(buf); } tlv = new TLVMap(code, map8); break; case AMQPType.MAP_32: Dictionary <TLVAmqp, TLVAmqp> map32 = new Dictionary <TLVAmqp, TLVAmqp>(); int map32size = buf.ReadInt(); int map32count = buf.ReadInt(); int stop32 = buf.ReaderIndex + map32size - 4; while (buf.ReaderIndex < stop32) { map32[TLVFactory.getTlv(buf)] = TLVFactory.getTlv(buf); } tlv = new TLVMap(code, map32); break; case AMQPType.ARRAY_8: List <TLVAmqp> arr8 = new List <TLVAmqp>(); int array8size = buf.ReadByte() & 0xff; int array8count = buf.ReadByte() & 0xff; SimpleConstructor arr8constructor = getConstructor(buf); for (int i = 0; i < array8count; i++) { arr8.Add(TLVFactory.getElement(arr8constructor, buf)); } tlv = new TLVArray(code, arr8); break; case AMQPType.ARRAY_32: List <TLVAmqp> arr32 = new List <TLVAmqp>(); int array32size = buf.ReadInt(); int array32count = buf.ReadInt(); SimpleConstructor arr32constructor = getConstructor(buf); for (int i = 0; i < array32count; i++) { arr32.Add(TLVFactory.getElement(arr32constructor, buf)); } tlv = new TLVArray(code, arr32); break; default: break; } if (constructor is DescribedConstructor) { tlv.Constructor = constructor; } return(tlv); }