public void ProcessMessage(string message) { if (string.IsNullOrEmpty(message)) { return; } var messageBuilder = _previousMessage.MessageParts; _previousMessage.MessageParts.Append(message); int messageStartIndex; var messageEndIndex = -1; while (true) { message = _previousMessage.MessageParts.ToString(); messageStartIndex = _previousMessage.MessageStartCharIndex; if (messageStartIndex < 0) { messageStartIndex = message.IndexOf(MessageStart, messageEndIndex + 1, StringComparison.Ordinal); if (messageStartIndex < 0) { return; } _previousMessage.MessageStartCharIndex = messageStartIndex; } messageEndIndex = message.IndexOf(MessageStart, messageStartIndex + 1, StringComparison.Ordinal); _previousMessage.MessageEnd = messageEndIndex - 1; if (messageEndIndex < 0) { return; } ProcessFinalizedMessage(_previousMessage); _previousMessage.MessageParts.Remove(0, messageEndIndex); messageEndIndex = -1; _previousMessage.ResetIndices(); if (_previousMessage.MessageParts.Length == 0) { return; } } }