示例#1
0
        public async Task Close()
        {
            if (Interlocked.Exchange(ref _state, _disposed) == _disposed)
            {
                return;
            }

            try
            {
                if (_stream != null)
                {
                    _stream.Dispose();
                    _stream = null;
                }
                if (_socket != null)
                {
                    _socket.Dispose();
                    _socket = null;
                }
            }
            catch (Exception) { }

            if (_receiveBuffer != null)
            {
                _bufferManager.ReturnBuffer(_receiveBuffer);
            }
            if (_sessionBuffer != null)
            {
                _bufferManager.ReturnBuffer(_sessionBuffer);
            }

            _log.DebugFormat("Session closed on [{0}] in dispatcher [{1}] with session count [{2}].",
                             DateTime.UtcNow.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff"),
                             _dispatcher.GetType().Name,
                             this.Server.SessionCount - 1);
            try
            {
                await _dispatcher.OnSessionClosed(this);
            }
            catch (Exception ex)
            {
                HandleUserSideError(ex);
            }
        }
示例#2
0
        public async Task Close()
        {
            if (Interlocked.Exchange(ref _state, _disposed) == _disposed)
            {
                return;
            }

            Clean();

            _log.DebugFormat("Session closed on [{0}] in dispatcher [{1}] with session count [{2}].",
                             DateTime.UtcNow.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff"),
                             _dispatcher.GetType().Name,
                             this.Server.SessionCount - 1);
            try
            {
                await _dispatcher.OnSessionClosed(this);
            }
            catch (Exception ex)
            {
                await HandleUserSideError(ex);
            }
        }