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


import java.io.IOException;
import java.io.InterruptedIOException;
import nmc.common.*;

public class OutboundMessageQ implements Runnable {
    private Object mutex; // because q can change (later)
    private FifoQueue q = new FifoQueue(50);
    private Thread myThread;
    private String destinationIpAddr;
    private DatagramIoPort dgmTx;
    private int destinationPortNumber;
    
    public OutboundMessageQ(String destinationIpAddr, 
                            int destinationPortNumber) 
        throws IOException
    {
    	System.out.println("OutboundMessageQ Ctor "+destinationIpAddr+":"+destinationPortNumber);
	this.dgmTx = DatagramIoPort.GetTxPort(destinationIpAddr, 
	                                      destinationPortNumber);
	this.destinationIpAddr     = destinationIpAddr;
	this.destinationPortNumber = destinationPortNumber;
    }
  
    public void put(Message msg) {
    	System.out.println("OutboundMessageQ.put() : "+msg);
  	q.enqueue(msg);
    }
  
    public void sendOne() throws IOException {
    	System.out.println("OutboundMessageQ.sendOne blocking");
  	Message m = (Message)q.blockingDequeue();
  	System.out.println("OutboundMessageQ.sendOne got "+m);
	byte[] msgStr = m.cerealize();
	dgmTx.send(msgStr);
    }
  
    public synchronized void startOutboundMessaging() {
	try {
    	System.out.println("OutboundMessageQ.startOutboundMessaging creating thread");
  	myThread = new Thread(this);
   	System.out.println("OutboundMessageQ.startOutboundMessaging starting thread");
  	myThread.start();
	} catch (Exception e) {
            System.out.println("OutboundMessageQ.startOutboundMessaging caught exception, stopping. e="+ e);
	}
   	System.out.println("OutboundMessageQ.startOutboundMessaging returning");
    }
  
    public void run() {
  	System.out.println("OutboundMessageQ.run() thread starting...");
	try {
            while (true) {
                sendOne();
            }
	} catch (Exception e) {
            System.out.println("OutboundMessageQ.run()  caught exception, stopping. e="+ e);
	}
    }
}
