view rep/channel/REPSelectionKey.java @ 203:4c0a94836357 simullator-nio-both-worked

*** empty log message ***
author kono
date Sat, 30 Aug 2008 11:21:43 +0900
parents be219ba8b39c
children 302c4a0afab6
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;
	
	public REPSelectionKey(SelectionKey key) {
		this.key = key;
	}
	
	@Override
	public void cancel() {
		key.cancel();
	}

	@Override
	public SelectableChannel channel() {
		assert(false);
		// use public SelectableChannel channel(REPPack<P>packer) instead
		return key.channel();
	}

	public SelectableChannel channel(REPPack<P>packer) {
		if (REPServerSocketChannel.isSimulation) return key.channel();
		if (key.isAcceptable()) {
			return new REPServerSocketChannel<P>(key.channel(),packer);
		} else if (key.isReadable()) {
			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() {
		assert(false);
		return key.selector(); // should return REPSelector
	}

	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();
		if (ss==null) return null;
		return new REPSocketChannel<P>(ss,pack);
	}


}