@Override public void write(ISession session, O msg) { final ConcurrentHashMap<Long, IChannel> channels = m_channels; if (channels == null) return; final IChannel channel = channels.get(session.id()); if (channel != null) { channel.write(msg); return; } final Object remoteAddr = session.remoteAddress(); c_logger.warn( StrUtil.join( session, "(remoteAddr=", remoteAddr, ") failed to send(channel closed): ", StrUtil.getLineSeparator(), msg)); if (msg instanceof AutoCloseable) { try { ((AutoCloseable) msg).close(); } catch (Throwable t) { c_logger.error( StrUtil.join( session, "(remoteAddr=", remoteAddr, ") failed to close message: ", StrUtil.getLineSeparator(), msg), t); } } }