view rep/channel/SelectorSimulator.java @ 175:5653cf8e3c8b

*** empty log message ***
author kent
date Thu, 28 Aug 2008 21:22:07 +0900
parents 72252e970a8b
children 9cf8147591ea
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.spi.SelectorProvider;
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
//import java.util.Set; //書き直す?
import java.util.Set;



public class SelectorSimulator extends REPSelector{
	
	private TreeSet<SelectionKey> keyList;
	private TreeSet<SelectionKey> selectedKeys;
	
	public SelectorSimulator() {
		super(null);
		keyList = new TreeSet<SelectionKey>();
	}

	//@SuppressWarnings("unchecked")
	public int select() throws IOException {
		selectedKeys = new TreeSet<SelectionKey>();
		
		synchronized(this) {

			while(selectedKeys.isEmpty()){
				for(SelectionKey key : keyList){
					if(((SelectionKeySimulator) key).isAble())
						selectedKeys.add(key);
				}

				if(selectedKeys.isEmpty())
					try {
						this.wait();
					} catch (InterruptedException e) {
						throw new IOException("Error, Selector was interrupted!");
					}
			}
		}
		return selectedKeys.size();
	}
	/*
	public <T> SelectionKeySimulator register(SelectableChannelSimulator<T> cs, int opt){
		SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
		keyList.add(key);
		return key;
	}*/
	public SelectionKeySimulator register(SelectableChannel cs, int opt, Object handler){
		SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
		key.attach(handler);
		keyList.add(key);
		return key;
	}
	/*
	public <T> SelectionKeySimulator register(ChannelSimulator<T> cs, int opt, Object handler){
		SelectionKeySimulator key = new SelectionKeySimulator(cs, opt, this);
		key.attach(handler);
		keyList.add(key);
		return key;
	}*/
	
	public <T> SelectionKey getKey(ChannelSimulator<T> channel){
		for(SelectionKey key : keyList){
			if(key.channel() == channel)
				return key;
		}
		return null;
	}

	@Override
	public void close() throws IOException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public boolean isOpen() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Set<SelectionKey> keys() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public SelectorProvider provider() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int select(long timeout) throws IOException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int selectNow() throws IOException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Selector wakeup() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<SelectionKey> selectedKeys() {
		// TODO Auto-generated method stub
		return (Set<SelectionKey>)selectedKeys;
	}

}