private void HandleIncomingHeader(TransportMessageFrame frame)
 {
     using (var header = _protocol.Serializer.DeserializeInvocationMessage(frame.Payload))
     {
         _log.Trace("Handling incoming header: {0}. Current state: {1}.", header, _incomingStreamState);
         header.Handle(_incomingHandler);
     }
 }
        private async Task HandleIncomingMessageFrameAsync(TransportMessageFrame frame)
        {
            _log.Trace("Consuming message frame: {0}", frame);
            _curIncomingMessage.Write(frame.Payload.Array, frame.Payload.Offset, frame.Payload.Count);
            if (!frame.HasMore)
            {
                _curIncomingMessage.Position = 0;
                var msg = _marshaller.Decode(_curIncomingMessage);
                await _buffer.Out.WriteAsync(msg, CancellationToken).ConfigureAwait(false);

                _log.Debug("Received message of type {0} with length {1}", msg.GetType().Name, _curIncomingMessage.Length);
                _curIncomingMessage.Position = 0;
                _curIncomingMessage.SetLength(0);
                _incomingStreamState = IncomingStreamState.Open;
                var header = _protocol.MessageFactory.CreateInvocationMessageReceived();
                await _sender.WriteOrDisposeAsync(header, CancellationToken).ConfigureAwait(false);
            }
        }
        private async Task HandleIncomingFrameAsync(TransportMessageFrame frame)
        {
            _log.Trace("Handling incoming frame {0}. Current state: {1}.", frame, _incomingStreamState);
            switch (_incomingStreamState)
            {
            case IncomingStreamState.Open:
            case IncomingStreamState.Completed:
                HandleIncomingHeader(frame);
                break;

            case IncomingStreamState.ReceivingMessage:
                await HandleIncomingMessageFrameAsync(frame).ConfigureAwait(false);

                break;

            default:
                throw new InvalidOperationException($"Unexpected state {_incomingStreamState}");
            }
            _log.Trace("Handled incoming frame {0}. Current state: {1}.", frame, _incomingStreamState);
        }
        private async Task HandleIncomingMessageFrameAsync(TransportMessageFrame frame)
        {
            _log.Trace("Consuming message frame: {0}", frame);
            _curIncomingMessage.Write(frame.Payload.Array, frame.Payload.Offset, frame.Payload.Count);
            if (frame.HasMore)
            {
                _log.Trace("Consumed message frame {0}", frame);
            }
            else
            {
                _curIncomingMessage.Position = 0;
                var msg = _marshaller.Decode(_curIncomingMessage);
                _log.Debug("Received message of type {0} with length {1}", msg.GetType().Name, _curIncomingMessage.Length);
                await _buffer.Out.WriteAsync(msg, CancellationToken).ConfigureAwait(false);

                _log.Debug("Received message added to response buffer: type {0} with length {1}", msg.GetType().Name, _curIncomingMessage.Length);
                _curIncomingMessage.Position = 0;
                _curIncomingMessage.SetLength(0);
                _incomingStreamState = IncomingStreamState.Open;
            }
        }
        private async Task SendAsync(TransportMessageFrame frame)
        {
            var header = _headerFactory.CreateFrameHeader(ChannelId, frame.HasMore, frame.Payload.Count);

            await SendAsync(header, frame.Payload).ConfigureAwait(false);
        }
Пример #6
0
 private static void DisposeFrame(TransportMessageFrame frame)
 {
     frame.Dispose();
 }