* Handles all keys which are ready to be processed.
*/
void handle() {
// Iterate over the selected keys
for(Iterator i = nioDaemon.getSelector().selectedKeys().iterator(); i.hasNext(); ) {
SelectionKey key = (SelectionKey)i.next();
i.remove();
// Is a new connection coming in?
if(key.isValid() && key.isAcceptable()) {
nioDaemon.getServer().handleAccept(key, nioDaemon.getSelector());
}
// an outgoing connection has been established
if(key.isValid() && key.isConnectable()) {
NIOAttachment attachment = (NIOAttachment)key.attachment();
attachment.handleConnect();
}
// incoming data can be read
if(key.isValid() && key.isReadable()) {
NIOAttachment attachment = (NIOAttachment)key.attachment();
attachment.handleRead();
}
// outgoing data can be written
if(key.isValid() && key.isWritable()) {
NIOAttachment attachment = (NIOAttachment)key.attachment();
attachment.handleWrite();
}
// clean up broken connections
if(!key.isValid()) {
NIOAttachment attachment = (NIOAttachment)key.attachment();
attachment.close(new IOException("Connection closed"));
}
}
}