/** Calls {@link IoServiceListener#sessionDestroyed(IoSession)} for all registered listeners. */ public void fireSessionDestroyed(IoSession session) { // Try to remove the remaining empty session set after removal. if (managedSessions.remove(Long.valueOf(session.getId())) == null) { return; } // Fire session events. session.getFilterChain().fireSessionClosed(); // Fire listener events. try { for (IoServiceListener l : listeners) { try { l.sessionDestroyed(session); } catch (Throwable e) { ExceptionMonitor.getInstance().exceptionCaught(e); } } } finally { // Fire a virtual service deactivation event for the last session of the connector. if (session.getService() instanceof IoConnector) { boolean lastSession = false; synchronized (managedSessions) { lastSession = managedSessions.isEmpty(); } if (lastSession) { fireServiceDeactivated(); } } } }
/** * Calls {@link IoServiceListener#serviceIdle(IoService, IdleStatus)} for all registered * listeners. */ public void fireServiceIdle(IdleStatus status) { if (!activated.get()) { return; } for (IoServiceListener l : listeners) { try { l.serviceIdle(service, status); } catch (Throwable e) { ExceptionMonitor.getInstance().exceptionCaught(e); } } }
/** Calls {@link IoServiceListener#serviceActivated(IoService)} for all registered listeners. */ public void fireServiceActivated() { if (!activated.compareAndSet(false, true)) { return; } activationTime = System.currentTimeMillis(); for (IoServiceListener l : listeners) { try { l.serviceActivated(service); } catch (Throwable e) { ExceptionMonitor.getInstance().exceptionCaught(e); } } }
/** Calls {@link IoServiceListener#serviceDeactivated(IoService)} for all registered listeners. */ public void fireServiceDeactivated() { if (!activated.compareAndSet(true, false)) { return; } try { for (IoServiceListener l : listeners) { try { l.serviceDeactivated(service); } catch (Throwable e) { ExceptionMonitor.getInstance().exceptionCaught(e); } } } finally { disconnectSessions(); } }
/** Calls {@link IoServiceListener#sessionCreated(IoSession)} for all registered listeners. */ public void fireSessionCreated(IoSession session) { boolean firstSession = false; if (session.getService() instanceof IoConnector) { synchronized (managedSessions) { firstSession = managedSessions.isEmpty(); } } // If already registered, ignore. if (managedSessions.putIfAbsent(Long.valueOf(session.getId()), session) != null) { return; } // If the first connector session, fire a virtual service activation event. if (firstSession) { fireServiceActivated(); } // Fire session events. session.getFilterChain().fireSessionCreated(); session.getFilterChain().fireSessionOpened(); int managedSessionCount = managedSessions.size(); if (managedSessionCount > largestManagedSessionCount) { largestManagedSessionCount = managedSessionCount; } cumulativeManagedSessionCount++; // Fire listener events. for (IoServiceListener l : listeners) { try { l.sessionCreated(session); } catch (Throwable e) { ExceptionMonitor.getInstance().exceptionCaught(e); } } }