Files
2026-02-12 10:50:49 +01:00

69 lines
1.9 KiB
Python

from __future__ import annotations
import argparse
import os
from app import create_app
from models import db
from sockets import socketio, start_event_monitor
from udp_listener import start_udp_listener
def _ensure_sqlite_schema(app) -> None:
"""Very small schema migration helper for SQLite dev deployments."""
uri: str = app.config.get("SQLALCHEMY_DATABASE_URI", "")
if not uri.startswith("sqlite:"):
return
import sqlite3
path = uri.split("///", 1)[-1]
try:
conn = sqlite3.connect(path)
# Global settings table (used for e.g. idle fallback image)
conn.execute(
"CREATE TABLE IF NOT EXISTS app_settings ("
"key VARCHAR(64) PRIMARY KEY, "
"value VARCHAR(255) NOT NULL"
")"
)
conn.commit()
finally:
try:
conn.close()
except Exception:
pass
def main() -> None:
parser = argparse.ArgumentParser(description="SyncPlayer server")
parser.add_argument("command", nargs="?", default="run", choices=["run", "init-db"], help="Command")
parser.add_argument("--host", default=os.environ.get("HOST", "0.0.0.0"))
parser.add_argument("--port", type=int, default=int(os.environ.get("PORT", "5000")))
args = parser.parse_args()
app = create_app()
with app.app_context():
db.create_all()
_ensure_sqlite_schema(app)
if args.command == "init-db":
with app.app_context():
db.create_all()
_ensure_sqlite_schema(app)
print("Database initialized")
return
# Start UDP listener in background
start_udp_listener(app)
# Monitor trigger expiry (clears in-memory state when end_time passes)
start_event_monitor(app)
# Prefer gevent on Windows/Python 3.14+. (eventlet is not compatible there)
socketio.run(app, host=args.host, port=args.port)
if __name__ == "__main__":
main()