69 lines
1.9 KiB
Python
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()
|