diff -r b81cb670e6b2 -r af75a1894a32 src/proto2/Application.cc --- a/src/proto2/Application.cc Sun Nov 09 20:40:46 2008 +0000 +++ b/src/proto2/Application.cc Sun Nov 09 21:51:13 2008 +0000 @@ -23,25 +23,29 @@ private: // arguments CL_CommandLine args; - + + bool arg_graphics; std::string arg_port; - bool arg_dedicated; + bool arg_server; std::string arg_connect; void parse_args (int argc, char **argv) { // set up the options args.add_option('p', "port", "PORT", "set network port used", true); - args.add_option('D', "dedicated", "", "act as a network server", true); - args.add_option('c', "connect", "SERVERHOST", "act as a network client", true); + args.add_option('s', "server", "", "act as a network server", true); + args.add_option('c', "client", "SERVERHOST", "act as a network client", true); + args.add_option('g', "graphics", "", "run graphics/local input. Implied with --connect", true); // set defaults + arg_graphics = false; arg_port = NETWORK_PORT_STR; - arg_dedicated = false; + arg_server = false; arg_connect = ""; try { // parse args args.parse_args(argc, argv); + } catch (CL_Error &e) { throw ArgumentError(e.message); } @@ -52,12 +56,17 @@ arg_port = args.get_argument(); break; - case 'D': - arg_dedicated = true; + case 's': + arg_server = true; break; case 'c': arg_connect = args.get_argument(); + arg_graphics = true; + break; + + case 'g': + arg_graphics = true; break; case CL_CommandLine::REST_ARG: @@ -70,31 +79,41 @@ } // check for valid combinations of arugments - if (arg_dedicated && !arg_connect.empty()) - throw ArgumentError("-D and -c are mutually exclusive"); - - if (!arg_dedicated && arg_connect.empty()) - throw ArgumentError("nothing to do"); + if (!(arg_server xor !arg_connect.empty())) + throw ArgumentError("must supply *exactly* one of --server/--client"); } public: virtual int main (int argc, char **argv) { - // initialize core + // initialize the ClanLib components that we use CL_SetupCore setup_core; - + CL_SetupNetwork setup_network; + CL_SetupDisplay setup_disp; + CL_SetupGL setup_gl; + try { // parse arugments parse_args(argc, argv); + + // our engine + Engine engine; - // run engine based on args - if (arg_dedicated) { - Engine::runNetworkServer(arg_port); + // setup graphics + if (arg_graphics) + engine.setupGraphics(); + + // setup either network server or client + if (arg_server) { + engine.setupNetworkServer(arg_port); } else if (!arg_connect.empty()) { - Engine::runNetworkClient(arg_connect, arg_port); + engine.setupNetworkClient(arg_connect, arg_port); } else assert(false); + + // run the main loop + engine.run(); // succesful return return 0;