private void OnDataReceived(byte[] data, int offset, int length) { while (true) { int left; var commandInfo = CommandReader.GetCommandInfo(data, offset, length, out left); if (CommandReader.NextCommandReader != null) { CommandReader = CommandReader.NextCommandReader; } if (commandInfo != null) { ExecuteCommand(commandInfo); } if (left <= 0) { break; } offset = offset + length - left; length = left; } }