本文整理匯總了Java中java.nio.channels.SelectionKey.interestOps方法的典型用法代碼示例。如果您正苦於以下問題:Java SelectionKey.interestOps方法的具體用法?Java SelectionKey.interestOps怎麽用?Java SelectionKey.interestOps使用的例子?那麽恭喜您, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類java.nio.channels.SelectionKey的用法示例。
在下文中一共展示了SelectionKey.interestOps方法的20個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於我們的係統推薦出更棒的Java代碼示例。
示例1: finishConnection
點讚 3
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
private final void finishConnection(SelectionKey key, MMOConnection con)
{
try
{
((SocketChannel) key.channel()).finishConnect();
}
catch (IOException e)
{
con.getClient().onForcedDisconnection();
closeConnectionImpl(key, con);
}
// key might have been invalidated on finishConnect()
if (key.isValid())
{
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
key.interestOps(key.interestOps() & ~SelectionKey.OP_CONNECT);
}
}
開發者ID:rubenswagner,項目名稱:L2J-Global,代碼行數:20,
示例2: Client
點讚 3
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public Client() throws IOException {
// 同樣的,注冊鬧鍾.
this.selector = Selector.open();
// 連接遠程server
socketChannel = SocketChannel.open();
// 如果快速的建立了連接,返回true.如果沒有建立,則返回false,並在連接後出發Connect事件.
Boolean isConnected = socketChannel.connect(new InetSocketAddress("localhost", 3562));
socketChannel.configureBlocking(false);
SelectionKey key = socketChannel.register(selector, SelectionKey.OP_READ);
if (isConnected) {
this.sendFirstMsg();
} else {
// 如果連接還在嘗試中,則注冊connect事件的監聽. connect成功以後會出發connect事件.
key.interestOps(SelectionKey.OP_CONNECT);
}
}
開發者ID:minilynn,項目名稱:samplecode,代碼行數:19,
示例3: SSLSocketChannel2
點讚 3
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public SSLSocketChannel2( SocketChannel channel , SSLEngine sslEngine , ExecutorService exec , SelectionKey key ) throws IOException {
if( channel == null || sslEngine == null || exec == null )
throw new IllegalArgumentException( "parameter must not be null" );
this.socketChannel = channel;
this.sslEngine = sslEngine;
this.exec = exec;
readEngineResult = writeEngineResult = new SSLEngineResult( Status.BUFFER_UNDERFLOW, sslEngine.getHandshakeStatus(), 0, 0 ); // init to prevent NPEs
tasks = new ArrayList>( 3 );
if( key != null ) {
key.interestOps( key.interestOps() | SelectionKey.OP_WRITE );
this.selectionKey = key;
}
createBuffers( sslEngine.getSession() );
// kick off handshake
socketChannel.write( wrap( emptybuffer ) );// initializes res
processHandshake();
}
開發者ID:LDLN,項目名稱:Responder-Android,代碼行數:21,
示例4: setInterestedInWrite
點讚 3
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
@Override
protected void setInterestedInWrite(NioSession session, boolean isInterested) throws Exception {
SelectionKey key = session.getSelectionKey();
if (key == null) {
return;
}
int newInterestOps = key.interestOps();
if (isInterested) {
newInterestOps |= SelectionKey.OP_WRITE;
//newInterestOps &= ~SelectionKey.OP_READ;
} else {
newInterestOps &= ~SelectionKey.OP_WRITE;
//newInterestOps |= SelectionKey.OP_READ;
}
key.interestOps(newInterestOps);
}
開發者ID:eclipse,項目名稱:neoscada,代碼行數:21,
示例5: NIOServerCnxn
點讚 3
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public NIOServerCnxn(ZooKeeperServer zk, SocketChannel sock,
SelectionKey sk, NIOServerCnxnFactory factory) throws IOException {
this.zkServer = zk;
this.sock = sock;
this.sk = sk;
this.factory = factory;
if (this.factory.login != null) {
this.zooKeeperSaslServer = new ZooKeeperSaslServer(factory.login);
}
if (zk != null) {
outstandingLimit = zk.getGlobalOutstandingLimit();
}
sock.socket().setTcpNoDelay(true);
/* set socket linger to false, so that socket close does not
* block */
sock.socket().setSoLinger(false, -1);
InetAddress addr = ((InetSocketAddress) sock.socket()
.getRemoteSocketAddress()).getAddress();
authInfo.add(new Id("ip", addr.getHostAddress()));
sk.interestOps(SelectionKey.OP_READ);
}
開發者ID:l294265421,項目名稱:ZooKeeper,代碼行數:22,
示例6: invokeCallbacks
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
/** Set the selected interest set on the port and run it. */
protected void invokeCallbacks() {
final Set selectedKeys = m_selector.selectedKeys();
ArrayList generatedTasks = null;
for(SelectionKey key : selectedKeys) {
final VoltPort port = (VoltPort) key.attachment();
if (port == null) {
continue;
}
try {
port.lockForHandlingWork();
key.interestOps(0);
final Runnable runner = getPortCallRunnable(port);
if (m_useExecutorService) {
if (generatedTasks == null) generatedTasks = new ArrayList();
generatedTasks.add(runner);
} else {
runner.run();
}
}
catch (CancelledKeyException e) {
e.printStackTrace();
// no need to do anything here until
// shutdown makes more sense
}
}
if (generatedTasks != null && !generatedTasks.isEmpty()) {
synchronized (m_tasks) {
m_tasks.addAll(generatedTasks);
if (m_tasks.size() > 1) {
m_tasks.notifyAll();
} else {
m_tasks.notify();
}
}
}
selectedKeys.clear();
}
開發者ID:s-store,項目名稱:sstore-soft,代碼行數:43,
示例7: setKey
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
void setKey (SelectionKey key) {
m_selectionKey = key;
m_channel = (SocketChannel)key.channel();
m_readStream = new NIOReadStream();
m_writeStream = new NIOWriteStream(
this,
m_handler.offBackPressure(),
m_handler.onBackPressure(),
m_handler.writestreamMonitor());
m_interestOps = key.interestOps();
}
開發者ID:s-store,項目名稱:s-store,代碼行數:12,
示例8: writeAndFlush
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public Futures.WriteFuture writeAndFlush(NioChannel channel, Object msg) {
SelectionKey key = channel.socketChannel().keyFor(selectorLoop.selector());
if (key != null && key.isValid()) {
key.interestOps(SelectionKey.OP_WRITE);
}
return write(channel, msg, true);
}
開發者ID:lemonJun,項目名稱:TakinRPC,代碼行數:8,
示例9: connect
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
final public void connect(SelectionKey key) throws IOException
{
if(clientSocket)
{
if(!((SocketChannel)key.channel()).finishConnect())
{
throw new IOException("Error connecting the channel.");
}
key.interestOps(key.interestOps()&~SelectionKey.OP_CONNECT);
connected(key);
}else
{
throw new IOException("Connect is not allowed on non-client channel.");
}
}
開發者ID:rizsi,項目名稱:rcom,代碼行數:16,
示例10: enableWrite
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
private void enableWrite(boolean wakeup) {
boolean needWakeup = false;
try {
SelectionKey key = this.processKey;
key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
needWakeup = true;
} catch (Exception e) {
AbstractConnection.LOGGER.warn("can't enable write " + e);
}
if (needWakeup && wakeup) {
processKey.selector().wakeup();
}
}
開發者ID:huang-up,項目名稱:mycat-src-1.6.1-RELEASE,代碼行數:15,
示例11: write
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
private void write(SelectionKey key) throws IOException {
SocketChannel channel = (SocketChannel) key.channel();
synchronized (this.sendQueues) {
List queue = this.sendQueues.get(channel);
ByteBuffer buffer = queue.get(0).toBuffer();
try {
channel.write(buffer);
queue.remove(0);
} catch (IOException exception) {
key.cancel();
channel.close();
if (this.rconSessions.contains(channel)) {
this.rconSessions.remove(channel);
}
if (this.sendQueues.containsKey(channel)) {
this.sendQueues.remove(channel);
}
return;
}
if (queue.isEmpty()) {
this.sendQueues.remove(channel);
}
key.interestOps(SelectionKey.OP_READ);
}
}
開發者ID:CoreXDevelopment,項目名稱:CoreX,代碼行數:30,
示例12: registerForRead
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
protected void registerForRead(final SelectionKey key, ObjectReader reader) {
if ( log.isTraceEnabled() )
log.trace("Adding key for read event:"+key);
reader.finish();
//register our OP_READ interest
Runnable r = new Runnable() {
@Override
public void run() {
try {
if (key.isValid()) {
// cycle the selector so this key is active again
key.selector().wakeup();
// resume interest in OP_READ, OP_WRITE
int resumeOps = key.interestOps() | SelectionKey.OP_READ;
key.interestOps(resumeOps);
if ( log.isTraceEnabled() )
log.trace("Registering key for read:"+key);
}
} catch (CancelledKeyException ckx ) {
NioReceiver.cancelledKey(key);
if ( log.isTraceEnabled() )
log.trace("CKX Cancelling key:"+key);
} catch (Exception x) {
log.error("Error registering key for read:"+key,x);
}
}
};
receiver.addEvent(r);
}
開發者ID:liaokailin,項目名稱:tomcat7,代碼行數:31,
示例13: remove
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public void remove(final KeyAttachment key, final int ops) {
Runnable r = new Runnable() {
@Override
public void run() {
if (key == null)
return;
NioChannel nch = key.getChannel();
if (nch == null)
return;
SocketChannel ch = nch.getIOChannel();
if (ch == null)
return;
SelectionKey sk = ch.keyFor(selector);
try {
if (sk == null) {
if (SelectionKey.OP_WRITE == (ops & SelectionKey.OP_WRITE))
countDown(key.getWriteLatch());
if (SelectionKey.OP_READ == (ops & SelectionKey.OP_READ))
countDown(key.getReadLatch());
} else {
if (sk.isValid()) {
sk.interestOps(sk.interestOps() & (~ops));
if (SelectionKey.OP_WRITE == (ops & SelectionKey.OP_WRITE))
countDown(key.getWriteLatch());
if (SelectionKey.OP_READ == (ops & SelectionKey.OP_READ))
countDown(key.getReadLatch());
if (sk.interestOps() == 0) {
sk.cancel();
sk.attach(null);
}
} else {
sk.cancel();
sk.attach(null);
}
}
} catch (CancelledKeyException cx) {
if (sk != null) {
sk.cancel();
sk.attach(null);
}
}
}
};
events.offer(r);
wakeup();
}
開發者ID:how2j,項目名稱:lazycat,代碼行數:47,
示例14: disableRead
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public void disableRead() {
SelectionKey key = this.processKey;
key.interestOps(key.interestOps() & OP_NOT_READ);
}
開發者ID:variflight,項目名稱:feeyo-redisproxy,代碼行數:5,
示例15: process
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
/**
* State machine to send data
* @param key SelectionKey
* @return boolean
* @throws IOException
*/
public boolean process(SelectionKey key, boolean waitForAck) throws IOException {
int ops = key.readyOps();
key.interestOps(key.interestOps() & ~ops);
//in case disconnect has been called
if ((!isConnected()) && (!connecting)) throw new IOException("Sender has been disconnected, can't selection key.");
if ( !key.isValid() ) throw new IOException("Key is not valid, it must have been cancelled.");
if ( key.isConnectable() ) {
if ( socketChannel.finishConnect() ) {
completeConnect();
if ( current != null ) key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
return false;
} else {
//wait for the connection to finish
key.interestOps(key.interestOps() | SelectionKey.OP_CONNECT);
return false;
}//end if
} else if ( key.isWritable() ) {
boolean writecomplete = write(key);
if ( writecomplete ) {
//we are completed, should we read an ack?
if ( waitForAck ) {
//register to read the ack
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
} else {
//if not, we are ready, setMessage will reregister us for another write interest
//do a health check, we have no way of verify a disconnected
//socket since we don't register for OP_READ on waitForAck=false
read(key);//this causes overhead
setRequestCount(getRequestCount()+1);
return true;
}
} else {
//we are not complete, lets write some more
key.interestOps(key.interestOps()|SelectionKey.OP_WRITE);
}//end if
} else if ( key.isReadable() ) {
boolean readcomplete = read(key);
if ( readcomplete ) {
setRequestCount(getRequestCount()+1);
return true;
} else {
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
}//end if
} else {
//unknown state, should never happen
log.warn("Data is in unknown state. readyOps="+ops);
throw new IOException("Data is in unknown state. readyOps="+ops);
}//end if
return false;
}
開發者ID:liaokailin,項目名稱:tomcat7,代碼行數:57,
示例16: process
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
/**
* State machine to send data
*
* @param key
* SelectionKey
* @return boolean
* @throws IOException
*/
public boolean process(SelectionKey key, boolean waitForAck) throws IOException {
int ops = key.readyOps();
key.interestOps(key.interestOps() & ~ops);
// in case disconnect has been called
if ((!isConnected()) && (!connecting))
throw new IOException("Sender has been disconnected, can't selection key.");
if (!key.isValid())
throw new IOException("Key is not valid, it must have been cancelled.");
if (key.isConnectable()) {
if (socketChannel.finishConnect()) {
completeConnect();
if (current != null)
key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
return false;
} else {
// wait for the connection to finish
key.interestOps(key.interestOps() | SelectionKey.OP_CONNECT);
return false;
} // end if
} else if (key.isWritable()) {
boolean writecomplete = write(key);
if (writecomplete) {
// we are completed, should we read an ack?
if (waitForAck) {
// register to read the ack
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
} else {
// if not, we are ready, setMessage will reregister us for
// another write interest
// do a health check, we have no way of verify a
// disconnected
// socket since we don't register for OP_READ on
// waitForAck=false
read(key);// this causes overhead
setRequestCount(getRequestCount() + 1);
return true;
}
} else {
// we are not complete, lets write some more
key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
} // end if
} else if (key.isReadable()) {
boolean readcomplete = read(key);
if (readcomplete) {
setRequestCount(getRequestCount() + 1);
return true;
} else {
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
} // end if
} else {
// unknown state, should never happen
log.warn("Data is in unknown state. readyOps=" + ops);
throw new IOException("Data is in unknown state. readyOps=" + ops);
} // end if
return false;
}
開發者ID:how2j,項目名稱:lazycat,代碼行數:65,
示例17: write
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
public int write(ByteBuffer buf, NioChannel socket, Selector selector,
long writeTimeout, boolean block) throws IOException {
if ( SHARED && block ) {
return blockingSelector.write(buf,socket,writeTimeout);
}
SelectionKey key = null;
int written = 0;
boolean timedout = false;
int keycount = 1; //assume we can write
long time = System.currentTimeMillis(); //start the timeout timer
try {
while ( (!timedout) && buf.hasRemaining() ) {
int cnt = 0;
if ( keycount > 0 ) { //only write if we were registered for a write
cnt = socket.write(buf); //write the data
if (cnt == -1) throw new EOFException();
written += cnt;
if (cnt > 0) {
time = System.currentTimeMillis(); //reset our timeout timer
continue; //we successfully wrote, try again without a selector
}
if (cnt==0 && (!block)) break; //don't block
}
if ( selector != null ) {
//register OP_WRITE to the selector
if (key==null) key = socket.getIOChannel().register(selector, SelectionKey.OP_WRITE);
else key.interestOps(SelectionKey.OP_WRITE);
keycount = selector.select(writeTimeout);
}
if (writeTimeout > 0 && (selector == null || keycount == 0) ) timedout = (System.currentTimeMillis()-time)>=writeTimeout;
}//while
if ( timedout ) throw new SocketTimeoutException();
} finally {
if (key != null) {
key.cancel();
if (selector != null) selector.selectNow();//removes the key from this selector
}
}
return written;
}
開發者ID:sunmingshuai,項目名稱:apache-tomcat-7.0.73-with-comment,代碼行數:42,
示例18: handWrite
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
private void handWrite(SelectionKey key) throws IOException {
SocketChannel sc = (SocketChannel) key.channel();
sc.write(ByteBuffer.wrap("send to server".getBytes("UTF-8")));
key.interestOps(SelectionKey.OP_READ);
}
開發者ID:justice-code,項目名稱:QiuQiu,代碼行數:6,
示例19: handWrite
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
private void handWrite(SelectionKey key) throws IOException {
SocketChannel sc = (SocketChannel) key.channel();
sc.write(ByteBuffer.wrap("server send to client\n".getBytes("UTF-8")));
key.interestOps(SelectionKey.OP_READ);
}
開發者ID:justice-code,項目名稱:QiuQiu,代碼行數:6,
示例20: isInterestedInWrite
點讚 2
import java.nio.channels.SelectionKey; //導入方法依賴的package包/類
@Override
protected boolean isInterestedInWrite(NioSession session) {
SelectionKey key = session.getSelectionKey();
return key.isValid() && ((key.interestOps() & SelectionKey.OP_WRITE) != 0);
}
開發者ID:eclipse,項目名稱:neoscada,代碼行數:6,
注:本文中的java.nio.channels.SelectionKey.interestOps方法示例整理自Github/MSDocs等源碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。