Exemple #1
0
 public override Task CloseOutputAsync(GameSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
 {
     // TODO: Validate state
     if (State == GameSocketState.Open)
     {
         _state = GameSocketState.CloseSent;
     }
     else if (State == GameSocketState.CloseReceived)
     {
         _state = GameSocketState.Closed;
     }
     return(_closeAsync((int)closeStatus, statusDescription, cancellationToken));
 }
Exemple #2
0
        public async override Task CloseOutputAsync(GameSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
        {
            ThrowIfDisposed();
            ThrowIfOutputClosed();

            var message = new Message(closeStatus, statusDescription);
            await _sendBuffer.SendAsync(message, cancellationToken);

            if (State == GameSocketState.Open)
            {
                _state = GameSocketState.CloseSent;
            }
            else if (State == GameSocketState.CloseReceived)
            {
                _state = GameSocketState.Closed;
                Close();
            }
        }
Exemple #3
0
        public async override Task CloseAsync(GameSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
        {
            ThrowIfDisposed();

            if (State == GameSocketState.Open || State == GameSocketState.CloseReceived)
            {
                // Send a close message.
                await CloseOutputAsync(closeStatus, statusDescription, cancellationToken);
            }

            if (State == GameSocketState.CloseSent)
            {
                // Do a receiving drain
                var data = new byte[1024];
                GameSocketReceiveResult result;
                do
                {
                    result = await ReceiveAsync(new ArraySegment <byte>(data), cancellationToken);
                }while (result.MessageType != GameSocketMessageType.Close);
            }
        }
Exemple #4
0
        public override async Task CloseAsync(GameSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken)
        {
            if (State == GameSocketState.Open || State == GameSocketState.CloseReceived)
            {
                await CloseOutputAsync(closeStatus, statusDescription, cancellationToken);
            }

            var buffer = ArrayPool <byte> .Shared.Rent(_rentedBufferSize);

            try
            {
                while (State == GameSocketState.CloseSent)
                {
                    // Drain until close received
                    await ReceiveAsync(new ArraySegment <byte>(buffer), cancellationToken);
                }
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(buffer);
            }
        }