@Override public void dispose() { idleTracker.dispose(); }
@Override public void removeSession(IoSessionEx wsebSession) { if (ALREADY_TRACKED.get(wsebSession, false)) { // may not be set if wseb connection failed idleTracker.removeSession(((WsebSession)wsebSession).getTransportSession()); } }
@Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { session.getService().initializeSession(session, future, initializer); idleTracker.addSession(session); session.getProcessor().add(session); }
@Override protected void doSessionOpened(HttpConnectSession readSession) throws Exception { IoFilterChain filterChain = readSession.getFilterChain(); filterChain.addLast(CODEC_FILTER, new WsebFrameCodecFilter(0, true)); wsebSession.attachReader(readSession); // Activate inactivity timeout only once read session is established // We need a session idle tracker to handle ws close handshake, even if ws.inactivity.timeout is not set currentSessionIdleTracker.get().addSession(wsebSession); readSession.getResponseFuture().addListener(WsebConnector.CHECK_READER_RESPONSE_LISTENER); }
@Override protected IoFuture dispose0() throws Exception { for (IoSessionIdleTracker tracker : sessionInactivityTrackers) { tracker.dispose(); } scheduler.shutdownNow(); return super.dispose0(); }
private void addSession0(IoSessionEx wsebSession) { if (ALREADY_TRACKED.get(wsebSession, false)) { // Expected for downstream reconnects return; } IoSessionEx transportSession = ((WsebSession)wsebSession).getTransportSession(); ALREADY_TRACKED.set(wsebSession, true); idleTracker.addSession(transportSession); WsCheckAliveFilter.addIfFeatureEnabled(transportSession.getFilterChain(), CHECK_ALIVE_FILTER, ((WsebSession) wsebSession).getLocalAddress().getOption(INACTIVITY_TIMEOUT), wsebSession, logger); }
@Override public void operationComplete(CloseFuture future) { currentSessionIdleTracker.get().removeSession(wsebSession); downstreamAcceptor.unbind(downstreamAddress); upstreamAcceptor.unbind(upstreamAddress); wsebSession.shutdownScheduledCommands(); wsebSession.logout(); } };
@Override protected IoFuture dispose0() throws Exception { for (IoSessionIdleTracker tracker : sessionIdleTrackers) { tracker.dispose(); } return super.dispose0(); }
inactivityTracker.addSession(wsebSession);
@Override public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { idleTracker.removeSession(session); // Processor remove takes care of firing sessionClosed on the filter chain. if (session.isIoRegistered()) { if (currentThread() == session.getIoThread()) { session.getProcessor().remove(session); } else { // This race can occur because org.jboss.netty.channel.socket.nio.AbstractNioChannel.setWorker // only schedules a task to unregister or register instead of doing it immediately session.getIoExecutor().execute(new Runnable() { @Override public void run() { session.getProcessor().remove(session); } }); } } else { // session is being realigned (by calls to setIoAlignment), defer closed processing // to when we have an operational io executor session.setClosedReceived(); } }
@Override protected IoFuture dispose0() throws Exception { channelGroup.close().await(); channelFactory.releaseExternalResources(); for (IoSessionIdleTracker tracker : sessionIdleTrackers) { tracker.dispose(); } return null; }
@Override protected IoFuture dispose0() throws Exception { channelGroup.close().await(); unbind(); bootstrap.releaseExternalResources(); for (IoSessionIdleTracker tracker : sessionIdleTrackers) { tracker.dispose(); } return null; }