///////////////////////////////////////////////////////////
///////////////// Have an itch? Scratch it! ///////////////
///////////////////////// SCRATCH /////////////////////////
/////////////////////  A MUD  Server   ////////////////////
///////////////////// By: Jared Devall ////////////////////
/////////////////////      Thanks:     ////////////////////
/////////////////////  DIKU/Merc/ROM   ////////////////////
///////////////////// Aetas/Deus Gang  ////////////////////
/////////////////////       Beej       ////////////////////
///////////////////////////////////////////////////////////

#include <string>
#include <iostream> // The STL include.
#include "avatar.h"
#include "world.h"
#include "stringutil.h"

const int portNumber = 2950;

/*
 * This is where Scratch "starts". You can specify a port and it starts
 * running the MUD on specified port. Change PORTNUMBER to change the 
 * default port.
 */
int main( int argc, char *argv[] ) {    
    int port;    // The port number the Server runs off.
    bool copyover = false;
    

	port = portNumber; // Make sure we have a default port.
	if ( argc >= 2 ) {
		if ( str_cmp( argv[1], "-copyover" ) ) {
			copyover = true;
			SocketServer::Instance().SetHostSocket( atoi(argv[2]) );			     
		} else {
			if ( atoi( argv[1] ) <= 1024 ) { // Ports from 1024 and below are Reserved
				std::cout << "Port #" << argv[1] << " Reserved." << std::endl; 
				exit( 1 );
			} else if ( atoi( argv[1] ) > 65535 ) { // No ports above 65535 
				std::cout << "Port #" << argv[1] << " Out of Range. ( # > 65535 )" << std::endl;
				exit( 1 );
			} else { // The Port the user gave is usable.
				port = atoi( argv[1] ); 
			}
		}
	}

    // Start the game
	World::Instance().Exist( "Scratch is up", port, copyover );				
	return 0;
}