📄 axacceptor.java
字号:
package org.Arios.XServer;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import org.Arios.XFactory.ReaderThreadFactory;
import org.Arios.XFactory.WriterThreadFactory;
import org.Arios.XHandler.ReaderHandler;
import org.Arios.XWrap.Request;
public class AxAcceptor extends AxAbstractAccepter {
private int size;
private boolean isFull = false;
private boolean isJoin = false;
private ReaderThreadFactory reader;
private WriterThreadFactory writer;
public AxAcceptor(int size) {
super();
this.size = size;
reader = new ReaderThreadFactory("ReaderThread");
writer = new WriterThreadFactory("WriterThread");
}
@Override
public void register(SelectionKey key) {
try {
this.clientSocket = (SocketChannel) key.channel();
Request request = new Request(clientSocket);
clientSocket.configureBlocking(false);
clientSocket.register(s, SelectionKey.OP_READ, request);
if(!this.isJoin){
this.joinFreeQueue();
}
if (this.getSize() == this.size) {
manager.update();
}
} catch (ClosedChannelException e) {
this.removeKey(key);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void removeKey(SelectionKey key) {
if(this.isFull)
key.cancel();
else
this.isJoin=false;
key.cancel();
}
@Override
public void run() {
for (;;) {
try {
int i = 0;
i = s.select();
if (i > 0) {
Iterator<SelectionKey> it = s.selectedKeys().iterator();
while (it.hasNext()) {
SelectionKey key = it.next();
it.remove();
if (key.isReadable()) {
reader.execute(new ReaderHandler(key));
} else if (key.isWritable()) {
writer.execute(new ReaderHandler(key));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void joinFreeQueue(){
manager.add(this);
this.isJoin = true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -