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

import java.io.IOException;

import nmc.common.*;

public class InboundMessageQ implements Runnable {
    private FifoQueue q = new FifoQueue(50);
    private DatagramIoPort dgmRx;

    Thread myThread;
  
    public InboundMessageQ(int myRxPortNumber) throws IOException {
       System.out.println("InboundMessageQ ctor "+myRxPortNumber);
       dgmRx = DatagramIoPort.GetRcvPort(myRxPortNumber);
       System.out.println("InboundMessageQ ctor got my port ");
        
        // we won't get here if an IOException is thrown
        myThread = new Thread(this);
    }
  
    public Message blockingGet() {
    System.out.println("InboundMessageQ.blockingGet() entry");	
        return (Message)q.blockingDequeue();
    }

    public Message blockingGet(int timeout) {
    	System.out.println("InboundMessageQ.blockingGet("+timeout+")");
        return (Message)q.blockingDequeue(timeout);
    }
  
    public void getOne() throws IOException {
       System.out.println("InboundMessageQ.getOne() Inbound blocking on socket read...");
        byte[] rcvdData = dgmRx.blockingRx();
        Message m = DecerealizingFactory.parse(rcvdData);
        q.enqueue(m);
        System.out.println("InboundMessageQ.getOne()  received: " + m.toString());
    }
  
    public synchronized void startInboundMessaging() {
        try {
        System.out.println("InboundMessageQ.startInboundMessaging()  creating thread");
        myThread = new Thread(this);
        System.out.println("InboundMessageQ.startInboundMessaging()  starting thread");
        myThread.start();
	} catch (Exception e) {
	    System.out.println("InboundMessageQ.startInboundMessaging() Inbound caught exception, stopping. e="+ e);
	}
       System.out.println("InboundMessageQ.startInboundMessaging()  returning");

    }
  
    public void run() {
        System.out.println("InboundMessageQ.run() InboundMessage thread starting...");
        try {
	    while (true) {
		    getOne();
        }
	} catch (Exception e) {
	    System.out.println("InboundMessageQ.run() Inbound caught exception, stopping. e="+ e);
	    }
    }
  
    public boolean isEmpty() {
  	    return q.isEmpty();
    }
  
}
