Esempio n. 1
0
        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());
            }
        }