/**
*
*/
package org.limewire.nio;
import java.io.IOException;
import java.nio.channels.IllegalSelectorException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.spi.AbstractSelectableChannel;
import java.nio.channels.spi.AbstractSelector;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@SuppressWarnings("unchecked")
class StubSelector extends AbstractSelector {
private Set keys = new HashSet();
private Set selectedKeys = new HashSet();
StubSelector() {
super(null);
}
@Override
protected void implCloseSelector() throws IOException {
}
@Override
protected SelectionKey register(AbstractSelectableChannel ch, int ops, Object att) {
if(!(ch instanceof StubChannel))
throw new IllegalSelectorException();
StubSelectionKey key = new StubSelectionKey(this, ch, ops, att);
keys.add(key);
return key;
}
@Override
public Set keys() {
return keys;
}
@Override
public int select() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int select(long timeout) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public Set selectedKeys() {
return selectedKeys;
}
@Override
public int selectNow() throws IOException {
selectedKeys.clear();
for(Iterator i = keys.iterator(); i.hasNext();) {
StubSelectionKey key = (StubSelectionKey)i.next();
StubChannel channel = (StubChannel)key.channel();
int ready = channel.readyOps() & key.interestOps();
if(ready != 0) {
key.setReadyOps(ready);
selectedKeys.add(key);
}
}
return selectedKeys.size();
}
@Override
public Selector wakeup() {
return this;
}
}