view rep/simulator/SelectableChannelSimulator.java @ 123:5b1a0574b406 add-simulator

*** empty log message ***
author pin
date Wed, 27 Aug 2008 17:21:25 +0900
parents
children
line wrap: on
line source

package rep.simulator;

import java.nio.channels.SelectableChannel;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;



public abstract class SelectableChannelSimulator<P> extends SelectableChannel{
	protected BlockingQueue<P> qread;
	protected BlockingQueue<P> qwrite;
	protected SelectorSimulator<P> writeSelector;
	protected SelectorSimulator<P> readSelector;
	
	/* read from Queue.  */
	public P read(){
		try {
			if(readSelector!=null)
				synchronized (readSelector){
					return qread.take();
				}
			else{
				return qread.take();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
			return null;
		}
	}
	/* write to Queue.  */
	public boolean write(P p){
		try {
			if (writeSelector!=null)
				synchronized (writeSelector){
					qwrite.put(p);
					writeSelector.notifyAll();
				}
			else {
				qwrite.put(p);
			}
			return true;
		} catch (InterruptedException e) {
			e.printStackTrace();
			return false;
		}
	}
	public abstract ChannelSimulator<P> accept();
	
	/* accessor methods.  */
	public BlockingQueue<P> getReadQ(){
		return qread;
	}
	public BlockingQueue<P> getWriteQ(){
		return qwrite;
	}
	public void createReadQ(){
		qread = new LinkedBlockingQueue<P>();
	}
	public void createWriteQ(){
		qwrite = new LinkedBlockingQueue<P>();
	}
	public void setWriteSelector(SelectorSimulator<P> _selector){
		writeSelector = _selector; 
	}


	/* return state of the Queue */
	abstract public boolean isReadable();
	abstract public boolean isWritable();
	abstract public boolean isAcceptable();
	
}