internal void WriteMessage(ReadOnlyMemory <byte> message, ref ValueWriter writer) { FrameWriter.WriteFrameHeader(RabbitMQConstants.FrameBody, _channelId, message.Length, ref writer); writer.WriteBytes(message.Span); writer.WriteOctet(RabbitMQConstants.FrameEnd); writer.Commit(); }
public void WriteMessage(byte[] message, IBufferWriter <byte> output) { ValueWriter writer = new ValueWriter(output); FrameWriter.WriteFrameHeader(Constants.FrameBody, _channelId, message.Length, ref writer); writer.WriteBytes(message); writer.WriteOctet(Constants.FrameEnd); writer.Commit(); }
public void WriteMessage(ReadOnlyMemory <byte> message, IBufferWriter <byte> output) { if (message.IsEmpty) { return; } var writer = new ValueWriter(output); FrameWriter.WriteFrameHeader(RabbitMQConstants.FrameBody, _channelId, message.Length, ref writer); writer.WriteBytes(message.Span); writer.WriteOctet(RabbitMQConstants.FrameEnd); writer.Commit(); }
public void WriteMessage(PublishAllInfo message, IBufferWriter <byte> output) { var writer = new ValueWriter(output); var framePayloadSize = 9 + message.Info.ExchangeName.Length + message.Info.RoutingKey.Length; FrameWriter.WriteFrameHeader(RabbitMQConstants.FrameMethod, message.ChannelId, framePayloadSize, ref writer); FrameWriter.WriteMethodFrame(60, 40, ref writer); writer.WriteShortInt(0); //reserved-1 writer.WriteShortStr(message.Info.ExchangeName); writer.WriteShortStr(message.Info.RoutingKey); writer.WriteBit(message.Info.Mandatory); writer.WriteBit(message.Info.Immediate); writer.BitFlush(); writer.WriteOctet(RabbitMQConstants.FrameEnd); _bitCount = 0; _flagWord = 0; writer.WriteOctet(RabbitMQConstants.FrameHeader); writer.WriteShortInt(message.ChannelId); var reserved = writer.Reserve(4); var checkpoint = writer.Written; writer.WriteShortInt(message.Header.ClassId); writer.WriteShortInt(message.Header.Weight); writer.WriteLongLong(message.Header.BodySize); WriteBitFlagsAndContinuation(ref message.Header.Properties, ref writer); var payloadSize = writer.Written - checkpoint; writer.WriteOctet(RabbitMQConstants.FrameEnd); Span <byte> span = stackalloc byte[4]; BinaryPrimitives.WriteInt32BigEndian(span, payloadSize); reserved.Write(span); FrameWriter.WriteFrameHeader(RabbitMQConstants.FrameBody, message.ChannelId, message.Body.Length, ref writer); writer.WriteBytes(message.Body.Span); writer.WriteOctet(RabbitMQConstants.FrameEnd); writer.Commit(); }