Пример #1
0
        public async Task EncodeMessage(ISendState sender, TransportMessage message)
        {
            var contentBytes = _transportSerializer.Serialize(message.Body, message.Headers);

            message.Headers[Headers.ContentLength] = contentBytes.Length.ToString();
            message.Headers[Headers.MessageId]     = message.Id.ToString("N");

            var headerBuffer = new byte[65535];

            headerBuffer[0] = (byte)TransportMessageType.Message;
            var offset            = 1;
            var lastFeatureOffset = 0;

            foreach (var header in message.Headers)
            {
                lastFeatureOffset = offset;
                offset++; //ignore the feature flag for now.

                var length = Encoding.UTF8.GetBytes(header.Key, 0, header.Key.Length, headerBuffer, offset + 1);
                headerBuffer[offset] = (byte)length;
                offset += length + 1;

                length = Encoding.UTF8.GetBytes(header.Value, 0, header.Value.Length, headerBuffer, offset + 1);
                headerBuffer[offset] = (byte)length;
                offset += length + 1;
            }

            headerBuffer[lastFeatureOffset] = (byte)TransportHeaderFeatureFlags.EndOfHeaders;

            await sender.Send(headerBuffer, 0, offset);

            await sender.Send(contentBytes, 0, contentBytes.Length);
        }
Пример #2
0
        public async Task EncodeHandshake(ISendState sender, int version)
        {
            var buffer = new byte[1];

            buffer[0] = (byte)version;
            await sender.Send(buffer, 0, 1);
        }
Пример #3
0
        public async Task EncodeNak(ISendState sender, Guid messageId)
        {
            var buffer        = messageId.ToByteArray();
            var messageBuffer = new byte[buffer.Length + 1];

            buffer[0] = (byte)TransportMessageType.Nak;
            Buffer.BlockCopy(buffer, 0, messageBuffer, 1, buffer.Length);
            await sender.Send(messageBuffer, 0, messageBuffer.Length);
        }
Пример #4
0
        public MessagingListenerClient(Socket socket, IMessageHandlerInvoker messageHandlerInvoker)
        {
            _socket = socket ?? throw new ArgumentNullException(nameof(socket));
            _messageHandlerInvoker = messageHandlerInvoker;

            // For inbound data
            _readAwaitable = new SocketAwaitable(_readArgs);
            _readArgs.SetBuffer(_readBuffer, 0, _readBuffer.Length);
            _receiver = new SocketReceiver(socket, _readArgs, _readAwaitable, _readBuffer);
            _decoder  = new SimpleProtocolDecoder(_serializer);

            // For outbound data
            _encoder        = new SimpleProtocolEncoder(_serializer);
            _writeArgs      = new SocketAsyncEventArgs();
            _writeAwaitable = new SocketAwaitable(_writeArgs);
            _sendState      = new SocketSender(_socket, _writeArgs, _writeAwaitable);
        }