Sync from GitHub main #1
@@ -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())
|
||||||
Reference in New Issue
Block a user