diff options
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/ConnectionListener.java')
-rw-r--r-- | src/main/java/com/juick/xmpp/s2s/ConnectionListener.java | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/src/main/java/com/juick/xmpp/s2s/ConnectionListener.java b/src/main/java/com/juick/xmpp/s2s/ConnectionListener.java index f29b8d09..982f2efc 100644 --- a/src/main/java/com/juick/xmpp/s2s/ConnectionListener.java +++ b/src/main/java/com/juick/xmpp/s2s/ConnectionListener.java @@ -1,28 +1,49 @@ package com.juick.xmpp.s2s; -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; +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 ugnich + * @author vt */ public class ConnectionListener implements Runnable { + private static final Logger logger = Logger.getLogger(ConnectionListener.class.getName()); + + ExecutorService connectionPool; + @Override public void run() { try { - ServerSocket listener = new ServerSocket(5269); - while (true) { - Socket sock = listener.accept(); - ConnectionIn conn = new ConnectionIn(sock); - XMPPComponent.addConnectionIn(conn); - Thread t = new Thread(conn); - t.start(); - } - } catch (IOException e) { - System.out.println("IOException on socket listen: " + e.toString()); + connectionPool = Executors.newCachedThreadPool(); + final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open(); + listener.bind(new InetSocketAddress(5269)); + logger.info("s2s listener ready"); + listener.accept(null, new CompletionHandler<AsynchronousSocketChannel, Object>() { + @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); } } } |