Append() public method

Advances the write position. As a result, length is increased by size.
public Append ( int size ) : void
size int Size to advance.
return void
Beispiel #1
0
 public static void FRM(Stream stream, ulong code, byte type, ushort channel, params object[] value)
 {
     List list = new List();
     if (value != null) list.AddRange(value);
     ByteBuffer buffer = new ByteBuffer(256, true);
     buffer.Append(4);
     AmqpBitConverter.WriteUByte(buffer, 2);
     AmqpBitConverter.WriteUByte(buffer, type);
     AmqpBitConverter.WriteUShort(buffer, channel);
     Encoder.WriteObject(buffer, new DescribedValue(code, list));
     AmqpBitConverter.WriteInt(buffer.Buffer, 0, buffer.Length);
     stream.Write(buffer.Buffer, buffer.Offset, buffer.Length);
 }
Beispiel #2
0
        public async Task PumpAsync(uint maxFrameSize, Func <ProtocolHeader, bool> onHeader, Func <ByteBuffer, bool> onBuffer)
        {
            byte[] header = new byte[FixedWidth.ULong];

            if (onHeader != null)
            {
                // header
                await this.ReceiveBufferAsync(header, 0, FixedWidth.ULong).ConfigureAwait(false);

                Trace.WriteBuffer("RECV {0}", header, 0, header.Length);
                if (!onHeader(ProtocolHeader.Create(header, 0)))
                {
                    return;
                }
            }

            // frames
            while (true)
            {
                await this.ReceiveBufferAsync(header, 0, FixedWidth.UInt).ConfigureAwait(false);

                int frameSize = AmqpBitConverter.ReadInt(header, 0);
                if ((uint)frameSize > maxFrameSize)
                {
                    throw new AmqpException(ErrorCode.InvalidField,
                                            Fx.Format(SRAmqp.InvalidFrameSize, frameSize, maxFrameSize));
                }

                ByteBuffer buffer = this.bufferManager.GetByteBuffer(frameSize);

                try
                {
                    Buffer.BlockCopy(header, 0, buffer.Buffer, buffer.Offset, FixedWidth.UInt);
                    await this.ReceiveBufferAsync(buffer.Buffer, buffer.Offset + FixedWidth.UInt, frameSize - FixedWidth.UInt).ConfigureAwait(false);

                    buffer.Append(frameSize);
                    Trace.WriteBuffer("RECV {0}", buffer.Buffer, buffer.Offset, buffer.Length);

                    if (!onBuffer(buffer))
                    {
                        break;
                    }
                }
                finally
                {
                    buffer.ReleaseReference();
                }
            }
        }
Beispiel #3
0
        public async Task PumpAsync(Func <ProtocolHeader, bool> onHeader, Func <ByteBuffer, bool> onBuffer)
        {
            byte[] header = new byte[FixedWidth.ULong];

            if (onHeader != null)
            {
                // header
                await this.ReceiveBufferAsync(header, 0, FixedWidth.ULong);

                if (!onHeader(ProtocolHeader.Create(header, 0)))
                {
                    return;
                }
            }

            // frames
            while (true)
            {
                await this.ReceiveBufferAsync(header, 0, FixedWidth.UInt);

                int        frameSize = AmqpBitConverter.ReadInt(header, 0);
                ByteBuffer buffer    = this.bufferManager.GetByteBuffer(frameSize);

                try
                {
                    Buffer.BlockCopy(header, 0, buffer.Buffer, buffer.Offset, FixedWidth.UInt);
                    await this.ReceiveBufferAsync(buffer.Buffer, buffer.Offset + FixedWidth.UInt, frameSize - FixedWidth.UInt);

                    buffer.Append(frameSize);

                    if (!onBuffer(buffer))
                    {
                        break;
                    }
                }
                finally
                {
                    buffer.ReleaseReference();
                }
            }
        }
 public static void WriteBytes(ByteBuffer buffer, byte[] data, int offset, int count)
 {
     buffer.Validate(true, count);
     Array.Copy(data, offset, buffer.Buffer, buffer.WritePos, count);
     buffer.Append(count);
 }
 public static void WriteInt(ByteBuffer buffer, int data)
 {
     buffer.Validate(true, FixedWidth.Int);
     WriteInt(buffer.Buffer, buffer.WritePos, data);
     buffer.Append(FixedWidth.Int);
 }
 public static void WriteByte(ByteBuffer buffer, sbyte data)
 {
     buffer.Validate(true, FixedWidth.Byte);
     buffer.Buffer[buffer.WritePos] = (byte)data;
     buffer.Append(FixedWidth.Byte);
 }
Beispiel #7
0
        void WriteFrame(byte frameType, ushort channel, ulong code, List fields)
        {
            ByteBuffer buffer = new ByteBuffer(64, true);

            // frame header
            buffer.Append(FixedWidth.UInt);
            AmqpBitConverter.WriteUByte(buffer, 2);
            AmqpBitConverter.WriteUByte(buffer, (byte)frameType);
            AmqpBitConverter.WriteUShort(buffer, channel);

            // command
            AmqpBitConverter.WriteUByte(buffer, FormatCode.Described);
            Encoder.WriteULong(buffer, code, true);
            AmqpBitConverter.WriteUByte(buffer, FormatCode.List32);
            int sizeOffset = buffer.WritePos;
            buffer.Append(8);
            AmqpBitConverter.WriteInt(buffer.Buffer, sizeOffset + 4, fields.Count);
            for (int i = 0; i < fields.Count; i++)
            {
                Encoder.WriteObject(buffer, fields[i]);
            }

            AmqpBitConverter.WriteInt(buffer.Buffer, sizeOffset, buffer.Length - sizeOffset);
            AmqpBitConverter.WriteInt(buffer.Buffer, 0, buffer.Length); // frame size
            this.transport.Write(buffer.Buffer, buffer.Offset, buffer.Length);
            this.sendActive = true;
        }
        /// <summary>
        /// Writes a uuid (16-bytes) into the buffer and advance the buffer write cursor.
        /// </summary>
        /// <param name="buffer">The buffer to write.</param>
        /// <param name="data">The data to write.</param>
        public static void WriteUuid(ByteBuffer buffer, Guid data)
        {
            buffer.Validate(true, FixedWidth.Uuid);
            byte[] p = data.ToByteArray();
            int pos = buffer.WritePos;

            if (AmqpBitConverter.IsLittleEndian)
            {
                buffer.Buffer[pos++] = p[3];
                buffer.Buffer[pos++] = p[2];
                buffer.Buffer[pos++] = p[1];
                buffer.Buffer[pos++] = p[0];

                buffer.Buffer[pos++] = p[5];
                buffer.Buffer[pos++] = p[4];

                buffer.Buffer[pos++] = p[7];
                buffer.Buffer[pos++] = p[6];

                Array.Copy(p, 8, buffer.Buffer, pos, 8);
            }
            else
            {
                Array.Copy(p, buffer.Buffer, FixedWidth.Uuid);
            }

            buffer.Append(FixedWidth.Uuid);
        }
 /// <summary>
 /// Writes a 16-bit signed integer into the buffer and advance the buffer write cursor.
 /// </summary>
 /// <param name="buffer">The buffer to write.</param>
 /// <param name="data">The data to write.</param>
 public static void WriteShort(ByteBuffer buffer, short data)
 {
     buffer.Validate(true, FixedWidth.Short);
     buffer.Buffer[buffer.WritePos] = (byte)(data >> 8);
     buffer.Buffer[buffer.WritePos + 1] = (byte)data;
     buffer.Append(FixedWidth.Short);
 }
 /// <summary>
 /// Writes a 32-bit signed integer into the buffer and advance the buffer write cursor.
 /// </summary>
 /// <param name="buffer">The buffer to write.</param>
 /// <param name="data">The data to write.</param>
 public static void WriteInt(ByteBuffer buffer, int data)
 {
     buffer.Validate(true, FixedWidth.Int);
     WriteInt(buffer.Buffer, buffer.WritePos, data);
     buffer.Append(FixedWidth.Int);
 }
 /// <summary>
 /// Writes bytes from one buffer into another.
 /// </summary>
 /// <param name="buffer">The destination buffer.</param>
 /// <param name="data">The source buffer</param>
 /// <param name="offset">The position in source buffer to start.</param>
 /// <param name="count">The number of bytes to write.</param>
 public static void WriteBytes(ByteBuffer buffer, byte[] data, int offset, int count)
 {
     buffer.Validate(true, count);
     Array.Copy(data, offset, buffer.Buffer, buffer.WritePos, count);
     buffer.Append(count);
 }
 /// <summary>
 /// Writes a signed byte into the buffer and advance the buffer write cursor.
 /// </summary>
 /// <param name="buffer">The buffer to write.</param>
 /// <param name="data">The data to write.</param>
 public static void WriteByte(ByteBuffer buffer, sbyte data)
 {
     buffer.Validate(true, FixedWidth.Byte);
     buffer.Buffer[buffer.WritePos] = (byte)data;
     buffer.Append(FixedWidth.Byte);
 }