private async Task HandleTextStatesAsync(int length, CancellationToken cancellationToken) { int offset = 0; var buffer = new ArraySegment <byte>(new byte[length]); await ReceiveAtomicAsync(buffer, false, cancellationToken).ConfigureAwait(false); var states = new List <TextState>(); while (length > 0) { var uuid = new Uuid(new ArraySegment <byte>(buffer.Array, offset, offset + 16)); offset += 16; var uuidIcon = new Uuid(new ArraySegment <byte>(buffer.Array, offset, offset + 16)); offset += 16; int textLength = (int)BitConverter.ToUInt32(buffer.Array, offset); offset += 4; string text = Encoding.UTF8.GetString(buffer.Array, offset, textLength); int newOffset = 36 + (textLength % 4 > 0 ? textLength + 4 - (textLength % 4) : textLength); offset += newOffset; length -= offset; TextState state = new TextState(uuid, uuidIcon, textLength, text); states.Add(state); Console.WriteLine("TextState: " + state.ToString()); } }