Esempio n. 1
0
        /// <summary>
        /// Terminates the connection.
        /// </summary>
        /// <param name="endType">The type of a connection close.</param>
        private void Close(CloseType endType)
        {
            lock (_stateLock)
            {
                switch (endType)
                {
                case CloseType.ConnectionKeepAlive:
                    if (State != ConnectionState.Open)
                    {
                        return;
                    }

                    //Log.ConnectionKeepAlive(ConnectionId);
                    break;

                case CloseType.SocketShutdown:
                case CloseType.SocketDisconnect:
                    if (State == ConnectionState.Disconnecting ||
                        State == ConnectionState.SocketClosed)
                    {
                        return;
                    }
                    State = ConnectionState.Disconnecting;

                    //Log.ConnectionDisconnect(ConnectionId);
                    _rawSocketOutput.End(endType);
                    break;
                }
            }
        }