public void Main(string[] args)
{
Dictionary <string, object> options = parse_args(new Dictionary <string, ArgSpec> {
{ "-m", new ArgSpec {
name = "mode",
type = delegate(string val) {
val = val.ToLower();
if (val == "lib" || val == "library")
{
return(ServingMode.LIB);
}
else if (val == "simple")
{
return(ServingMode.SIMPLE);
}
else if (val == "threaded")
{
return(ServingMode.THREADED);
}
else
{
throw new ArgumentException("invalid mode: " + val);
}
},
defaultvalue = ServingMode.SIMPLE,
} },
{ "-h", new ArgSpec {
name = "host",
type = delegate(string val) { return(val); },
defaultvalue = "127.0.0.1",
} },
{ "-p", new ArgSpec {
name = "port",
type = delegate(string val) { return(Int32.Parse(val)); },
defaultvalue = 0,
} },
},
args);
ServingMode mode = (ServingMode)options["mode"];
BaseServer server = null;
switch (mode)
{
case ServingMode.SIMPLE:
if ((int)options["port"] == 0)
{
throw new ArgumentException("simple mode requires specifying a port");
}
server = new SimpleServer(processorFactory,
new SocketTransportFactory((string)options["host"], (int)options["port"]));
break;
case ServingMode.THREADED:
if ((int)options["port"] == 0)
{
throw new ArgumentException("threaded mode requires specifying a port");
}
server = new ThreadedServer(processorFactory,
new SocketTransportFactory((string)options["host"], (int)options["port"]));
break;
case ServingMode.LIB:
server = new LibraryModeServer(processorFactory,
new SocketTransportFactory((string)options["host"], (int)options["port"]));
break;
default:
throw new ArgumentException("invalid mode: " + mode);
}
server.Serve();
}