<html>
<xmp>
/**
 * Title: GPS Simulator
 * Copyright: Copyright (c) 2002
 * Company:   University of Oregon Computer Science Dept.
 *
 * @author Jason Prideaux
 * @version 1.0
 *
 */

package transport;

import transport.protocol.*;
import controller.*;

import java.io.*;
import java.net.*;
import java.util.*;


/* ====================================================================== */
/** This class is used by the controller to receive Messages sent by ipaq
 *  clients.  This class mearly passes the messages up to the Controller,
 *  it to deal with.
 *
 */
public class SocketReceiver extends Thread {

	/** The port to listen on. */
	private int port;

	/** The SocketReceiverListener object to pass messages to. */
	private SocketReceiverListener controller;



    /* ===================================================================== */
    /** This constructor initializes the Receiver, so that it is ready to begin
     *  listening for messages.
     *
     *  @param  controller   The listener to notify.
     *  @param  port   The port this receiver is listening on.
     *
     */
	public SocketReceiver(SocketReceiverListener controller, int port){

		this.port = port;
		this.controller = controller;

	} //Constructor



    /* ===================================================================== */
    /** This method opens a Socket and listens to it forever.  When it gets
     *  an incoming message it will pass it up to the Listener, and then
     *  continue to listen.
     *
     */
	public void run(){

		try{
			// Get socket to listen to.
			ServerSocket listen = new ServerSocket(port);

			while(true){

				try{

					// Get the Socket for client connecting to us.
					Socket s;
					s = listen.accept();


					// Get the incoming message.
					BufferedInputStream bufin = new BufferedInputStream(s.getInputStream());
					ObjectInputStream objin = new ObjectInputStream(bufin);

					Message msg = (Message)objin.readObject();

					// Give message to our listener.
					controller.incomingMessage(msg);


				}catch(Exception ee){System.out.println(ee);}


			} //while

		}catch(Exception e){System.out.println(e);}

	} //method: run


} //class: SocketReceiver
</xmp>
</html>
