view rep/channel/REPSelectionKey.java @ 273:d6a33e295d47

*** empty log message ***
author kono
date Mon, 22 Sep 2008 18:21:35 +0900
parents 168dd841be51
children 3be92eb54b1c
line wrap: on
line source

package rep.channel;

import java.io.IOException;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;


public class REPSelectionKey<P> extends SelectionKey {
	SelectionKey key;
	private REPSelector<P> selector;
	
	public REPSelectionKey() {
		
	}
	
	public REPSelectionKey(SelectionKey key,REPSelector<P>s) {
		this.key = key;
		this.selector = s;
		attach(key.attachment());
	}
	
	@Override
	public void cancel() {
		key.cancel();
	}

	@Override
	public SelectableChannel channel() {
		if (REPServerSocketChannel.isSimulation) return key.channel();
		if (key.isAcceptable()) {
			//System.err.println("Accept selectionKey.channel = "+key.channel());
			SelectableChannel sc = key.channel();
			SelectableChannel rsc = REPSocketChannel.channels.get(sc);
			return rsc;
		} else if (key.isReadable()) {
			//System.err.println("Read selectionKey.channel = "+key.channel());
			SelectableChannel sc = key.channel();
			SelectableChannel rsc = REPSocketChannel.channels.get(sc);
			return rsc;
		}
		return null;

	}
//
//	public SelectableChannel channel(REPPack<P>packer) {
//		if (REPServerSocketChannel.isSimulation) return key.channel();
//		if (key.isAcceptable()) {
//			//System.err.println("AcceptP selectionKey.channel = "+key.channel());
//			SelectableChannel sc = key.channel();
//			SelectableChannel rsc = REPSocketChannel.channels.get(sc);
//			if (rsc!=null) return rsc;
//			return new REPServerSocketChannel<P>(key.channel(),packer);
//		} else if (key.isReadable()) {
//			//System.err.println("ReadP selectionKey.channel = "+key.channel());
//			SelectableChannel sc = key.channel();
//			SelectableChannel rsc = REPSocketChannel.channels.get(sc);
//			if (rsc!=null) return rsc;
//			return new REPSocketChannel<P>(key.channel(),packer);
//		}
//		return null;
//	}

	@Override
	public int interestOps() {
		return key.interestOps();
	}

	@Override
	public SelectionKey interestOps(int ops) {
		return key.interestOps(ops);
	}

	@Override
	public boolean isValid() {
		return key.isValid();
	}

	@Override
	public int readyOps() {
		return key.readyOps();
	}

	@Override
	public Selector selector() {
		return selector;
	}

	@SuppressWarnings("unchecked")
	public REPSocketChannel<P> accept(REPPack<P> pack) throws IOException {
		assert(!REPServerSocketChannel.isSimulation);
		if (!key.isAcceptable()) throw new IOException();
		ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
		if (ssc==null) return null;
		SocketChannel ss = (SocketChannel)ssc.accept();
		//System.err.println("Accept in SelectionKey "+ss);
		if (ss==null) return null;
		return new REPSocketChannel(ss, pack);
	}


}