package com.juick.xmpp.s2s; import java.net.InetSocketAddress; import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author vt */ public class ConnectionListener implements Runnable { private static final Logger logger = Logger.getLogger(ConnectionListener.class.getName()); ExecutorService connectionPool; @Override public void run() { try { connectionPool = Executors.newCachedThreadPool(); final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open(); listener.bind(new InetSocketAddress(5269)); logger.info("s2s listener ready"); listener.accept(null, new CompletionHandler() { @Override public void completed(AsynchronousSocketChannel result, Object attachment) { listener.accept(connectionPool, this); ConnectionIn client = new ConnectionIn(result); XMPPComponent.addConnectionIn(client); connectionPool.submit(client); } @Override public void failed(Throwable exc, Object attachment) { } }); Thread.currentThread().join(); listener.close(); } catch (Exception e) { logger.log(Level.SEVERE, "s2s listener exception", e); } } }