diff --git a/pyproject.toml b/pyproject.toml index 16a9eee..e7e9022 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,7 @@ description = "" readme = "README.md" requires-python = ">=3.13" dependencies = [ - "loguru>=0.7.3", + "fastapi>=0.116.1", + "uvicorn>=0.35.0", "websockets>=15.0.1", ] diff --git a/ruff.toml b/ruff.toml deleted file mode 100644 index 5b14ed6..0000000 --- a/ruff.toml +++ /dev/null @@ -1,77 +0,0 @@ -# Exclude a variety of commonly ignored directories. -exclude = [ - ".bzr", - ".direnv", - ".eggs", - ".git", - ".git-rewrite", - ".hg", - ".ipynb_checkpoints", - ".mypy_cache", - ".nox", - ".pants.d", - ".pyenv", - ".pytest_cache", - ".pytype", - ".ruff_cache", - ".svn", - ".tox", - ".venv", - ".vscode", - "__pypackages__", - "_build", - "buck-out", - "build", - "dist", - "node_modules", - "site-packages", - "venv", -] - -# Same as Black. -line-length = 88 -indent-width = 4 - -# Assume Python 3.9 -target-version = "py39" - -[lint] -# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. -# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or -# McCabe complexity (`C901`) by default. -select = ["E4", "E7", "E9", "F"] -ignore = [] - -# Allow fix for all enabled rules (when `--fix`) is provided. -fixable = ["ALL"] -unfixable = [] - -# Allow unused variables when underscore-prefixed. -dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" - -[format] -# Like Black, use double quotes for strings. -quote-style = "double" - -# Like Black, indent with spaces, rather than tabs. -indent-style = "space" - -# Like Black, respect magic trailing commas. -skip-magic-trailing-comma = false - -# Like Black, automatically detect the appropriate line ending. -line-ending = "auto" - -# Enable auto-formatting of code examples in docstrings. Markdown, -# reStructuredText code/literal blocks and doctests are all supported. -# -# This is currently disabled by default, but it is planned for this -# to be opt-out in the future. -docstring-code-format = false - -# Set the line length limit used when formatting code snippets in -# docstrings. -# -# This only has an effect when the `docstring-code-format` setting is -# enabled. -docstring-code-line-length = "dynamic" \ No newline at end of file diff --git a/src/pyg2o/server_v3.py b/src/pyg2o/server_v3.py new file mode 100644 index 0000000..0f28afe --- /dev/null +++ b/src/pyg2o/server_v3.py @@ -0,0 +1,35 @@ +from fastapi import WebSocket, FastAPI, Depends +from fastapi.security import HTTPBasic, HTTPBasicCredentials + +class Server: + + def __init__(self, app: FastAPI): + self._security = HTTPBasic() + self._register_routes(app) + + def _register_routes(self, app): + @app.get('/auth') + async def pyg2o_auth(credentials: HTTPBasicCredentials = Depends(self._security)): + ... + + @app.websocket('/pyg2o') + async def pyg2o_main(websocket: WebSocket): + await self._handle_server_connection(websocket) + + @app.websocket('/pyg2o/{playerid}') + async def pyg2o_client(websocket: WebSocket, playerid: int): + await self._handle_client_connection(websocket, playerid) + + # I have to do this crap, because I've spent like 2hrs to figure out why pyright ignores type: ignore stuff + # I give up + _ = pyg2o_main + _ = pyg2o_client + + async def _verify_server_token(self, headers): + ... + + async def _handle_server_connection(self, websocket: WebSocket): + await websocket.accept() + + async def _handle_client_connection(self, websocket: WebSocket, playerid: int): + ...