Files
multiplayer_crosswords/multiplayer_crosswords/server/server_config.py
2025-11-13 18:41:34 +01:00

51 lines
1.4 KiB
Python

from pydantic import BaseModel
DEFAULT_WEBSOCKET_HOST = "0.0.0.0"
DEFAULT_WEBSOCKET_PORT = 8765
DEFAULT_MIN_GRID_SIZE = 10
DEFAULT_MAX_GRID_SIZE = 30
DEFAULT_GRID_BLOCK_RATIO = 0.39
DEFAULT_MAX_SESSION_IDLE_TIME_SECONDS = 3600 * 48 # 2 days
class ServerConfig(BaseModel):
@classmethod
def setup(cls,
min_grid_size: int = DEFAULT_MIN_GRID_SIZE,
max_grid_size: int = DEFAULT_MAX_GRID_SIZE,
max_session_idle_time_seconds: int = DEFAULT_MAX_SESSION_IDLE_TIME_SECONDS,
grid_block_ratio: float = DEFAULT_GRID_BLOCK_RATIO,
host: str = DEFAULT_WEBSOCKET_HOST,
port: int = DEFAULT_WEBSOCKET_PORT
) -> "ServerConfig":
cls._singleton = cls(
MIN_GRID_SIZE=min_grid_size,
MAX_GRID_SIZE=max_grid_size,
MAX_SESSION_IDLE_TIME_SECONDS=max_session_idle_time_seconds,
GRID_BLOCK_RATIO=grid_block_ratio,
HOST=host,
PORT=port,
)
return cls._singleton
@classmethod
def get_config(cls) -> "ServerConfig":
if not hasattr(cls, "_singleton"):
raise ValueError("ServerConfig singleton not initialized. Call setup() first.")
return cls._singleton
MAX_GRID_SIZE: int
MIN_GRID_SIZE: int
MAX_SESSION_IDLE_TIME_SECONDS: int
GRID_BLOCK_RATIO: float
HOST: str
PORT: int