home · contact · privacy
Move socket configuration into command line options.
[plomrogue2] / plomrogue / config.py
diff --git a/plomrogue/config.py b/plomrogue/config.py
new file mode 100644 (file)
index 0000000..fcb74dd
--- /dev/null
@@ -0,0 +1,35 @@
+from plomrogue.io_websocket import PlomWebSocketServer
+from plomrogue.io_tcp import PlomTCPServer, PlomTCPServerSSL
+from plomrogue.errors import ArgError
+
+def parse_command_line_arguments():
+    import argparse
+    parser = argparse.ArgumentParser()
+    parser.add_argument('savefile')
+    parser.add_argument('--server-type', nargs='+', required=True,
+                        choices=['tcp', 'tcp_ssl', 'ws'])
+    parser.add_argument('--port', nargs='+', required=True, type=int)
+    parser.add_argument('--keyfile')
+    parser.add_argument('--certfile')
+    opts = parser.parse_args()
+    if len(opts.server_type) != len(opts.port):
+        raise ArgError('number of ports unequal to number of server types')
+    if 'tcp_ssl' in opts.server_type and not (opts.keyfile or opts.certfile):
+        raise ArgError('need key and cert file for tcp_ssl server')
+    config = {
+        'savefile': opts.savefile,
+        'servers': {},
+        'keyfile': opts.keyfile,
+        'certfile': opts.certfile,
+    }
+    for i in range(len(opts.port)):
+        server_type = opts.server_type[i]
+        if server_type == 'ws':
+            config['servers'][opts.port[i]] = PlomWebSocketServer
+        elif server_type == 'tcp':
+            config['servers'][opts.port[i]] = PlomTCPServer
+        elif server_type == 'tcp_ssl':
+            config['servers'][opts.port[i]] = PlomTCPServerSSL
+    return config
+
+config = parse_command_line_arguments()