import edu.cmu.paid.network.*;
import edu.cmu.paid.network.voyager.*;
import edu.cmu.paid.network.exception.*;
import java.lang.String;

// import edu.cmu.paid.authentication.*;

/**
 * Temporary file for testing Client and Server objects.
 * 
 * Local object on Server.
 * 
 * @author Orly Canlas (edited from Will Ross's RunServer)
 */ 

public class TestServer {

  /**
   * Creates a Server object, exports it.
   */
  public static void main(String[] args) {

    String net_server_port = "";
    String net_server_name = "";
    CServer myNetServer = null;
    //    Authentication myAuthServer = null;
    IServer exported_net_server = null;
    //Authentication_Interface exported_auth_server = null;

    //get port number to use
    if(args.length == 1)
      net_server_port = args[0];
    else
      net_server_port = "9000";

    net_server_name = new String(net_server_port + "/SERVER");

    //Start voyager
    try {
      RemoteObjectManager.startup();
    } catch(Exception e) { System.err.println("* RunServer: voyager startup failed."); }

    //create a new CServer object
    myNetServer = new CServer( );

    //export the CServer to specified port and get a proxy to it
    boolean test = false;
    while(test == false) {
      try {
        exported_net_server = (IServer) RemoteObjectManager.export( myNetServer, net_server_port );
        test = true;
      } catch(Exception e) { 
        if(Integer.parseInt(net_server_port) < 65536) {
          int portnum = Integer.parseInt(net_server_port);
          portnum++;
          net_server_port = String.valueOf( portnum ); 
        } else {
          System.err.println("* RunServer: no ports available.");
          System.exit(0);
	}
      }
    }
      
    //Bind a name to the exported CServer
    try {
      RemoteObjectManager.bind(net_server_name, exported_net_server);
    } catch(Exception e) { System.err.println("* RunServer: Name binding error:" + e); }

    /**

    //create a new Authentication object
    //    myAuthServer = new Authentication();

    //export myAuthServer to port 1234 and get a proxy to it
      try {
        exported_auth_server = (IServer) RemoteObjectManager.export( myAuthServer, "1234" );
      } catch(Exception e) { System.err.println("* RunServer: unable to export AuthServer."); }
  
      // name exported_auth_server..
      */
    //now we just sit and let the CServer serve.
    System.out.println("Server running on port " + net_server_port);

  }
}

