119 lines
2.9 KiB
Java
119 lines
2.9 KiB
Java
|
/*
|
||
|
Copyright (C) 2002, 2003, 2004, 2005, 2006 Jeroen Frijters
|
||
|
|
||
|
This software is provided 'as-is', without any express or implied
|
||
|
warranty. In no event will the authors be held liable for any damages
|
||
|
arising from the use of this software.
|
||
|
|
||
|
Permission is granted to anyone to use this software for any purpose,
|
||
|
including commercial applications, and to alter it and redistribute it
|
||
|
freely, subject to the following restrictions:
|
||
|
|
||
|
1. The origin of this software must not be misrepresented; you must not
|
||
|
claim that you wrote the original software. If you use this software
|
||
|
in a product, an acknowledgment in the product documentation would be
|
||
|
appreciated but is not required.
|
||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||
|
misrepresented as being the original software.
|
||
|
3. This notice may not be removed or altered from any source distribution.
|
||
|
|
||
|
Jeroen Frijters
|
||
|
jeroen@frijters.net
|
||
|
|
||
|
*/
|
||
|
package sun.nio.ch;
|
||
|
|
||
|
import java.nio.channels.CancelledKeyException;
|
||
|
import java.nio.channels.SelectableChannel;
|
||
|
import java.nio.channels.SelectionKey;
|
||
|
import java.nio.channels.Selector;
|
||
|
import java.nio.channels.spi.AbstractSelectionKey;
|
||
|
|
||
|
final class SelectionKeyImpl extends AbstractSelectionKey
|
||
|
{
|
||
|
final SelChImpl channel;
|
||
|
final SelectorImpl selector;
|
||
|
private final cli.System.Net.Sockets.Socket socket;
|
||
|
private int readyOps;
|
||
|
private volatile int interestOps;
|
||
|
|
||
|
SelectionKeyImpl(SelChImpl ch, SelectorImpl sel)
|
||
|
{
|
||
|
this.channel = ch;
|
||
|
this.selector = sel;
|
||
|
socket = ch.getFD().getSocket();
|
||
|
}
|
||
|
|
||
|
public SelectableChannel channel()
|
||
|
{
|
||
|
return (SelectableChannel)channel;
|
||
|
}
|
||
|
|
||
|
public int readyOps()
|
||
|
{
|
||
|
if (!isValid())
|
||
|
throw new CancelledKeyException();
|
||
|
|
||
|
return readyOps;
|
||
|
}
|
||
|
|
||
|
void readyOps(int ops)
|
||
|
{
|
||
|
readyOps = ops;
|
||
|
}
|
||
|
|
||
|
public synchronized int interestOps()
|
||
|
{
|
||
|
if (!isValid())
|
||
|
throw new CancelledKeyException();
|
||
|
|
||
|
return interestOps;
|
||
|
}
|
||
|
|
||
|
public synchronized SelectionKey interestOps(int ops)
|
||
|
{
|
||
|
if (!isValid())
|
||
|
throw new CancelledKeyException();
|
||
|
|
||
|
if ((ops & ~channel.validOps()) != 0)
|
||
|
throw new IllegalArgumentException();
|
||
|
|
||
|
interestOps = ops;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Selector selector()
|
||
|
{
|
||
|
return selector;
|
||
|
}
|
||
|
|
||
|
cli.System.Net.Sockets.Socket getSocket()
|
||
|
{
|
||
|
return socket;
|
||
|
}
|
||
|
|
||
|
void nioReadyOps(int ops)
|
||
|
{
|
||
|
readyOps = ops;
|
||
|
}
|
||
|
|
||
|
int nioReadyOps()
|
||
|
{
|
||
|
return readyOps;
|
||
|
}
|
||
|
|
||
|
int nioInterestOps()
|
||
|
{
|
||
|
return interestOps;
|
||
|
}
|
||
|
|
||
|
SelectionKey nioInterestOps(int ops)
|
||
|
{
|
||
|
if ((ops & ~channel().validOps()) != 0)
|
||
|
throw new IllegalArgumentException();
|
||
|
channel.translateAndSetInterestOps(ops, this);
|
||
|
interestOps = ops;
|
||
|
return this;
|
||
|
}
|
||
|
}
|