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); }
private static void DisposeFrame(TransportMessageFrame frame) { frame.Dispose(); }