private boolean scheduleIdleTimeout(IChannel channel) { final int timeout = m_conf.sessionIdleTimeoutInSeconds(); if (timeout > 0) return channel.scheduleIdleTimeout(timeout); if (timeout == 0) channel.close(); return true; }
@Override public void onChannelIdleTimedOut(IChannel channel) { try { c_logger.debug("{}: IDLE_TIMEOUT", channel); final ISessionListener<I, O> listener = m_listener; if (listener != null) listener.onSessionIdleTimedOut(channel); } finally { channel.close(); } }
@Override public void onChannelException(IChannel channel, Throwable t) { try { c_logger.error( StrUtil.join(channel, "(remoteAddr=", channel.remoteAddress(), ") got an error"), t); final ISessionListener<I, O> listener = m_listener; if (listener != null) listener.onSessionException(channel, t); } catch (Throwable e) { c_logger.error( StrUtil.join(channel, "(remoteAddr=", channel.remoteAddress(), ") Unexpected Error: "), e); } finally { channel.close(); } }
@Override public void onChannelOpened(IChannel channel) { c_logger.debug("{}(remoteAddr={}): OPENED", channel, channel.remoteAddress()); final Long id = channel.id(); final ConcurrentHashMap<Long, IChannel> channels = m_channels; if (channels != null) channels.put(id, channel); if (m_stopped) { channel.close(); return; } // failed to schedule, channel has been closed if (!scheduleIdleTimeout(channel)) return; final ISessionListener<I, O> listener = m_listener; if (listener != null) listener.onSessionOpened(channel); }
private void closeChannels() { final Collection<IChannel> channels = m_channels.values(); for (final IChannel channel : channels) channel.close(); }
@Override public void closeSession(ISession session) { ((IChannel) session).close(); }