示例#1
0
  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;
  }
示例#2
0
  @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();
    }
  }
示例#3
0
  @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();
    }
  }
示例#4
0
  @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);
  }
示例#5
0
 private void closeChannels() {
   final Collection<IChannel> channels = m_channels.values();
   for (final IChannel channel : channels) channel.close();
 }
示例#6
0
 @Override
 public void closeSession(ISession session) {
   ((IChannel) session).close();
 }