java selectionkey_Java SelectionKey.interestOps方法代碼示例

本文整理匯總了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;未經允許,請勿轉載。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值