From ad188585514b2075828828a071dab972cf61cde4 Mon Sep 17 00:00:00 2001 From: Nomads_Reach <144523850+NomadsReach@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:06:46 -0400 Subject: [PATCH] Add GNS-aware dedicated server entrypoint --- server/dedicated_server.py | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 server/dedicated_server.py diff --git a/server/dedicated_server.py b/server/dedicated_server.py new file mode 100644 index 0000000..9d23c4e --- /dev/null +++ b/server/dedicated_server.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +from config import Config, load_config, validate_config +from server_service import ServerConfig, ServerService + + +def build_service_config(config: Config, config_path: Path) -> ServerConfig: + return ServerConfig( + host=config.host, + port=config.port, + server_name=config.server_name, + server_description=config.server_description, + max_players=config.max_players, + log_verbosity=config.log_verbosity, + admin_port=config.admin_port, + bans_path=str(config_path.parent / "bans.json"), + enable_gns_transport=config.enable_gns_transport, + gns_bridge_path=config.gns_bridge_path, + ) + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Commonwealth Online dedicated server") + parser.add_argument( + "--config", + default="commonwealth-server.json", + help="Path to the server JSON configuration file", + ) + args = parser.parse_args(argv) + + config_path = Path(args.config).expanduser().resolve() + try: + config = load_config(str(config_path)) + except Exception as error: + print(f"[ERROR] Could not load {config_path}: {error}", file=sys.stderr) + return 2 + + valid, errors = validate_config(config) + if not valid: + for error in errors: + print(f"[ERROR] {error}", file=sys.stderr) + return 2 + + service = ServerService(build_service_config(config, config_path)) + service.add_log_listener(lambda message, **_: print(message, flush=True)) + try: + service.serve_forever() + except KeyboardInterrupt: + pass + finally: + service.stop() + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())