package org.limewire.rudp; import java.nio.channels.CancelledKeyException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; /** * A selection key for UDP connections. */ class UDPSelectionKey extends SelectionKey { private final Selector selector; private final SelectableChannel channel; private volatile boolean valid = true; private int readyOps = 0; private volatile int interestOps = 0; UDPSelectionKey(Selector selector, Object attachment, SelectableChannel channel, int ops) { this.selector = selector; this.channel = channel; interestOps(ops); attach(attachment); } @Override public void cancel() { valid = false; } @Override public SelectableChannel channel() { return channel; } @Override public int interestOps() { return interestOps; } @Override public SelectionKey interestOps(int ops) { if(!isValid()) throw new CancelledKeyException(); this.interestOps = ops; return this; } @Override public boolean isValid() { return valid; } @Override public int readyOps() { if(!isValid()) throw new CancelledKeyException(); return readyOps; } public void setReadyOps(int readyOps) { this.readyOps = readyOps; } @Override public Selector selector() { return selector; } }