예제 #1
0
        internal static void EncodeValue(AmqpSymbol value, FormatCode formatCode, ByteBuffer buffer)
        {
            int len = value.Value.Length;

            if (formatCode == FormatCode.Symbol8)
            {
                AmqpBitConverter.WriteUByte(buffer, (byte)len);
            }
            else
            {
                AmqpBitConverter.WriteUInt(buffer, (uint)len);
            }

            buffer.Validate(write: true, len);
            int bytes = Encoding.ASCII.GetBytes(value.Value, 0, len, buffer.Buffer, buffer.WritePos);

            if (bytes != len)
            {
                throw new AmqpException(new Error()
                {
                    Condition   = AmqpErrorCode.InternalError,
                    Description = "Symbol encoded byte count not equal to its length."
                });
            }

            buffer.Append(len);
        }
예제 #2
0
        public static int GetEncodeSize(AmqpSymbol value)
        {
            if (value.Value == null)
            {
                return(FixedWidth.NullEncoded);
            }

            int valueSize = GetValueSize(value);

            return(FixedWidth.FormatCode + AmqpEncoding.GetEncodeWidthBySize(valueSize) + valueSize);
        }
예제 #3
0
 public static void Encode(AmqpSymbol value, ByteBuffer buffer)
 {
     if (value.Value == null)
     {
         AmqpEncoding.EncodeNull(buffer);
     }
     else
     {
         int width = AmqpEncoding.GetEncodeWidthBySize(value.Value.Length);
         Encode(value, width == FixedWidth.UByte ? FormatCode.Symbol8 : FormatCode.Symbol32, buffer);
     }
 }
예제 #4
0
 public static void Encode(AmqpSymbol value, ByteBuffer buffer)
 {
     if (value.Value == null)
     {
         AmqpEncoding.EncodeNull(buffer);
     }
     else
     {
         byte[] encodedData = Encoding.ASCII.GetBytes(value.Value);
         int    encodeWidth = AmqpEncoding.GetEncodeWidthBySize(encodedData.Length);
         AmqpBitConverter.WriteUByte(buffer, encodeWidth == FixedWidth.UByte ? FormatCode.Symbol8 : FormatCode.Symbol32);
         SymbolEncoding.Encode(encodedData, encodeWidth, buffer);
     }
 }
예제 #5
0
 internal static void Encode(AmqpSymbol value, FormatCode formatCode, ByteBuffer buffer)
 {
     AmqpBitConverter.WriteUByte(buffer, formatCode);
     EncodeValue(value, formatCode, buffer);
 }
예제 #6
0
 public static int GetValueSize(AmqpSymbol value)
 {
     return(value.Value == null ? FixedWidth.Null : Encoding.ASCII.GetByteCount(value.Value));
 }
예제 #7
0
 public static int GetEncodeSize(AmqpSymbol value)
 {
     return(value.Value == null ?
            FixedWidth.NullEncoded :
            FixedWidth.FormatCode + AmqpEncoding.GetEncodeWidthBySize(value.ValueSize) + value.ValueSize);
 }