/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package simpleserver; import java.io.IOException; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.util.ArrayList; import java.util.List; import java.util.Set; /** * * @author Michael */ public class RequestListener extends Thread { public final Charset charset = Charset.forName("utf-8"); public final CharsetEncoder encoder = charset.newEncoder(); public final CharsetDecoder decoder = charset.newDecoder(); private Selector selector ; private List newSockets = new ArrayList(); public RequestListener() throws IOException { selector = Selector.open(); start(); } public void add(SocketChannel sc) { synchronized (newSockets) { newSockets.add(sc); selector.wakeup(); } } public void run() { try { while (!Thread.interrupted()) { if (selector.select() > 0) { Set keys = selector.selectedKeys(); for (SelectionKey key : keys) ((Request)key.attachment()).process(); keys.clear(); } else synchronized (newSockets) { for (SocketChannel sc : newSockets) new Request(this, selector, sc); newSockets.clear(); } } } catch (IOException e) { throw new RuntimeException(e); } } }