//=========================================================================
// Summary  : */
// Filename : _vehicleConfigurationServer.cc
// Author   : */
// Project  : */
// Revision : 1
// Created  : 2000/08/19
// Modified : 2000/08/19
//=========================================================================
// Description :
//=========================================================================
#include <stdio.h>
#include <process.h>
#include "VehicleConfigurator.h"
#include "VehicleConfigurationServer.h"
#include "Syslog.h"
#include "System.h"

int main(int argc, char **argv)
{

  if ( getnid() != 1 )
  {
	  fprintf(stderr, "Vehicle configuration server should only be run on node 1.\n");
	  exit(1);
  }

  if ( System::checkLogDir() )
  {
	  fprintf(stderr, "Fix above problems with log/directory structure and try again.\n");
	  exit(1);
  }

  VehicleConfigurator::setInert(True);

  char configFile[256];
  Boolean isSim = False,
       debug = False;

  strcpy(configFile, System::configurationFile("vehicle.cfg"));

  switch (argc) {

  case 1:
      try{
	  Syslog::write("Using default vehicle config file \"%s\"", configFile);
      } catch(...) {
	  fprintf(stdout, "Syslog::write failing.  Deal.\n");
	  exit(-1);
      }
    break;

  case 2:
       if( !strcmp(argv[1], "-sim" ) ) {
            dprintf("VehicleConfigurationServer starting in sim mode");
            isSim = True;
       }
    break;

  default:
    Syslog::write("usage: %s [configFile]", argv[0]);
    exit(1);
  }

  if( System::findServer( VehicleConfigurationIFServerName ) > 0 ) {
       Syslog::write("A vehicle configuration server is already running.");
       exit(-1);
  }

  // Spin off child -- launch a true daemon

  if( fork() > 0 ) {
       // I'm the parent }
       ;
  } else {

       fclose( stdin );

       try {

	    VehicleConfigurator::setInert( True );
	    VehicleConfigurator::setName("vehicleConfig");


	    System::copyToLogDir(configFile);

	    VehicleConfigurationServer *server =
		 new VehicleConfigurationServer("vehicle", configFile, isSim);

	    server->run();

	    delete server;
       }
       catch (...) {
		// Used to do a syslog::write, but that's not the best idea - since vcs failed
		//  for one reason or another, syslog::write would probably fail, too.
	    fprintf(stderr, "vehicleConfigurationServer - caught exception!\n");
       }

  }

  return 0;
}
