/** * Start collecting stats for the {@link IoSession} of the service. * New sessions or destroyed will be automaticly added or removed. */ public void start() { synchronized (this) { if (worker != null && worker.isAlive()) throw new RuntimeException("Stat collecting already started"); // add all current sessions polledSessions = new ConcurrentLinkedQueue<IoSession>(); for (Iterator<SocketAddress> iter = service .getManagedServiceAddresses().iterator(); iter.hasNext();) { SocketAddress element = iter.next(); for (Iterator<IoSession> iter2 = service.getManagedSessions( element).iterator(); iter2.hasNext();) { addSession(iter2.next()); } } // listen for new ones service.addListener(serviceListener); // start polling worker = new Worker(); worker.start(); } }
/** * Stop collecting stats. all the {@link IoSessionStat} object will be removed of the * polled session attachements. */ public void stop() { synchronized (this) { if (worker == null) { return; } service.removeListener(serviceListener); // stop worker worker.stop = true; worker.interrupt(); while (worker.isAlive()) { try { worker.join(); } catch (InterruptedException e) { //ignore since this is shutdown time } } for (Iterator iter = polledSessions.iterator(); iter.hasNext();) { IoSession session = (IoSession) iter.next(); session.removeAttribute(KEY); } polledSessions.clear(); worker = null; } }
acceptor.unbindAll(); session.getService().getFilterChain().clear(); dgChannel.disconnect(); dgChannel.close();
acceptor.unbindAll(); session.getService().getFilterChain().clear(); dgChannel.disconnect(); dgChannel.close();
private void clear(final IoSession session, final IceStunUdpPeer stunUdpPeer, final IceAgent iceAgent) { log.info("Closing ICE agent"); iceAgent.close(); log.info("Clearing session!!"); final DatagramSessionImpl dgSession = (DatagramSessionImpl) session; final DatagramChannel dgChannel = dgSession.getChannel(); session.close().join(10 * 1000); final StunServer stunServer = stunUdpPeer.getStunServer(); stunServer.close(); try { final IoService service = session.getService(); log.info("Service is: {}", service); if (IoAcceptor.class.isAssignableFrom(service.getClass())) { log.info("Unbinding all!!"); final IoAcceptor acceptor = (IoAcceptor) service; acceptor.unbindAll(); } session.getService().getFilterChain().clear(); dgChannel.disconnect(); dgChannel.close(); } catch (final Exception e) { log.error("Error clearing session!!", e); } finally { stunUdpPeer.close(); } } }