示例#1
0
        public async Task Send_Consume(string queue, string consumerTag, bool autoAck, bool exclusive, Dictionary <string, object> arguments)
        {
            var buffer = await socket.GetWriteBuffer().ConfigureAwait(false);

            try
            {
                WritePayload();
                await buffer.FlushAsync().ConfigureAwait(false);
            }
            finally
            {
                socket.ReleaseWriteBuffer();
            }

            void WritePayload()
            {
                var writer = new CustomBufferWriter <PipeWriter>(buffer);

                var payloadSizeHeader = writer.WriteFrameHeader(FrameType.Method, channelNumber);

                writer.Write(Method.Basic.Consume);
                writer.Write(Reserved);
                writer.Write(Reserved);
                writer.WriteShortString(queue);
                writer.WriteShortString(consumerTag);
                writer.WriteBits(false, autoAck, exclusive);
                writer.WriteTable(arguments);

                writer.Commit();
                BinaryPrimitives.WriteUInt32BigEndian(payloadSizeHeader, (uint)writer.BytesCommitted - FrameHeaderSize);

                writer.Write(FrameEnd);

                writer.Commit();
            }
        }
        public async Task Send_Declare(string exchangeName, string type, bool passive, bool durable, bool autoDelete, bool @internal, Dictionary <string, object> arguments)
        {
            var buffer = await socket.GetWriteBuffer().ConfigureAwait(false);

            try
            {
                WritePayload();
                await buffer.FlushAsync().ConfigureAwait(false);
            }
            finally
            {
                socket.ReleaseWriteBuffer();
            }

            void WritePayload()
            {
                var writer = new CustomBufferWriter <PipeWriter>(buffer);

                var payloadSizeHeader = writer.WriteFrameHeader(FrameType.Method, channelNumber);

                writer.Write(Method.Exchange.Declare);
                writer.Write(Reserved);
                writer.Write(Reserved);
                writer.WriteShortString(exchangeName);
                writer.WriteShortString(type);
                writer.WriteBits(passive, durable, autoDelete, @internal);
                writer.WriteTable(arguments);

                writer.Commit();
                BinaryPrimitives.WriteUInt32BigEndian(payloadSizeHeader, (uint)writer.BytesCommitted - FrameHeaderSize);

                writer.Write(FrameEnd);

                writer.Commit();
            }
        }