⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axacceptor.java

📁 java NIO源代码,初学者学习java NIO技术的基础代码
💻 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 + -