 1Content-type: application/x-Unknown; charset=UTF8package nmc.sidekick;

import java.io.IOException;


import nmc.common.*;


public  class DriverMessageQ implements Runnable {

    protected FifoQueue q = null;

    protected Thread myThread;
    protected SensorDriver driver=null;
    
    public DriverMessageQ() throws IOException {
      System.out.println("DriverMessageQ Dflt Ctor ");
        myThread = new Thread(this);
        q=new FifoQueue(10);
        driver=null;
    }
    public DriverMessageQ( int depth) throws IOException {
      System.out.println("DriverMessageQ  Ctor "+depth);
        myThread = new Thread(this);
        q=new FifoQueue(depth);
        driver=null;
    }
    public DriverMessageQ( SensorDriver drvr,int depth) throws IOException {
      System.out.println("DriverMessageQ  Ctor depth "+depth+" drvr "+drvr);
        myThread = new Thread(this);
        q=new FifoQueue(depth);
        driver=drvr;
    }
    public Message blockingGet() {
       System.out.println("DriverMessageQ.blockingGet()  doing blocking dequeue");
        return (Message)q.blockingDequeue();
    }
        
     public void put(Message m) {
     	q.enqueue(m);
     }
 
    public void getOne() throws IOException {
        System.out.println("DriverMessageQ.getOne() InboundFifo blocking on socket read...");
        Message m = blockingGet();
        System.out.println("DriverMessageQ.getOne() received: " + m.toString());
        driver.handleMessage(m);
    }
  
    public void setDriver(SensorDriver d){
    	driver =d;
	return;
    }
    public synchronized void startInboundMessaging() {
         try {
            System.out.println("DriverMessageQ.startInboundMessaging() starting");
           myThread = new Thread(this);
           myThread.start();
         }catch(Exception e) {
	    System.out.println("DriverMessageQ.startInboundMessaging() InboundFifo caught exception, stopping. e="+ e);
	    }
    }
  
    public void run() {
        System.out.println("DriverMessageQ.run() InboundFifo thread starting...");
        try {
	    while (true) {
		    getOne();
        		}
	} catch (Exception e) {
	    System.out.println("DriverMessageQ.run() InboundFifo caught exception, stopping. e="+ e);
	    }
    }
  
    public boolean isEmpty() {
  	    return q.isEmpty();
    }
  
}