예제 #1
0
        public void Close()
        {
            try
            {
                if (_keepAliveTracker != null)
                {
                    _keepAliveTracker.StopTimer();
                }
                if (_keepAliveTimeoutTimer != null)
                {
                    _keepAliveTimeoutTimer.Change(Timeout.Infinite, Timeout.Infinite);
                }

                var copySession = _innerSession;
                _innerSession = null;
                if (copySession != null && copySession.Active)
                {
                    copySession.Close();
                }

                this.SessionHandshaked   -= OnSessionHandshaked;
                this.SessionDataReceived -= OnSessionDataReceived;

                if (ChannelDisconnected != null)
                {
                    ChannelDisconnected(this, new ActorChannelDisconnectedEventArgs(this.Identifier, _remoteActor));
                }
            }
            finally
            {
                _remoteActor = null;
                IsHandshaked = false;
            }
        }
예제 #2
0
        public void Close()
        {
            try
            {
                if (_keepAliveTracker != null)
                {
                    _keepAliveTracker.StopTimer();
                }
                if (_keepAliveTimeoutTimer != null)
                {
                    _keepAliveTimeoutTimer.Change(Timeout.Infinite, Timeout.Infinite);
                }

                _connector.TransportConnected    -= OnTransportConnected;
                _connector.TransportDisconnected -= OnTransportDisconnected;
                _connector.TransportDataReceived -= OnTransportDataReceived;

                if (_connector.IsConnected)
                {
                    _connector.Disconnect();
                }

                if (_remoteActor != null)
                {
                    if (ChannelDisconnected != null)
                    {
                        ChannelDisconnected(this, new ActorChannelDisconnectedEventArgs(this.Identifier, _remoteActor));
                    }
                }

                _log.DebugFormat("Disconnected with remote [{0}], SessionKey[{1}].", _remoteActor, this.ConnectToEndPoint);
            }
            finally
            {
                _remoteActor = null;
                IsHandshaked = false;

                OnClose();
            }
        }