public ProtocolProcessingBehavior ProcessBufferForMessage(IConnection connection, IMessagePipeline pipeline, ref ReadOnlySequence <byte> buffer) { SequencePosition?position = null; var pipelineResult = PipelineResult.Continue; do { position = buffer.PositionOfAny(_sentinels); if (position == null) { continue; } pipelineResult = pipeline.ProcessMessage(connection, buffer.Slice(0, position.Value).ToArray(), this.DefaultResponse); buffer = buffer.Slice(buffer.GetPosition(1 + _readPastLength, position.Value)); } while (position != null && pipelineResult == PipelineResult.Continue); if (pipelineResult == PipelineResult.StopAndDisconnect) { return(ProtocolProcessingBehavior.Disconnect); } return(ProtocolProcessingBehavior.ContinueProcessing); }
public ProtocolProcessingBehavior ProcessBufferForMessage(IConnection connection, IMessagePipeline pipeline, ref ReadOnlySequence <byte> buffer) { var pipelineResult = PipelineResult.Continue; while (buffer.Length >= _messageLength && pipelineResult == PipelineResult.Continue) { pipelineResult = pipeline.ProcessMessage(connection, buffer.Slice(0, _messageLength).ToArray(), this.DefaultResponse); buffer = buffer.Slice(buffer.GetPosition(_messageLength)); } if (pipelineResult == PipelineResult.StopAndDisconnect) { return(ProtocolProcessingBehavior.Disconnect); } return(ProtocolProcessingBehavior.ContinueProcessing); }
public ProtocolProcessingBehavior ProcessBufferForMessage(IConnection connection, IMessagePipeline pipeline, ref ReadOnlySequence <byte> buffer) { var pipelineResult = PipelineResult.Continue; var waitForLength = _currentState == ProtocolState.WaitingForHeader ? _headerLength : _currentMessageLength; while (buffer.Length >= waitForLength && pipelineResult == PipelineResult.Continue) { var bytes = buffer.Slice(0, waitForLength).ToArray(); if (_currentState == ProtocolState.WaitingForHeader) { _currentMessageLength = _lengthCalculator(bytes); waitForLength = _currentMessageLength; _currentState = ProtocolState.WaitingForMessage; if (buffer.Length < waitForLength) { continue; } bytes = buffer.Slice(0, waitForLength).ToArray(); } pipelineResult = pipeline.ProcessMessage(connection, bytes, this.DefaultResponse); buffer = buffer.Slice(buffer.GetPosition(waitForLength)); _currentState = ProtocolState.WaitingForHeader; } if (pipelineResult == PipelineResult.StopAndDisconnect) { return(ProtocolProcessingBehavior.Disconnect); } return(ProtocolProcessingBehavior.ContinueProcessing); }