Files
loon-backend/loon/web/users/router.py
T
ciomek 8c8f98623e
Build and Push Docker Image / build-and-push (push) Successful in 24s
WS change
2026-08-30 11:46:57 +02:00

55 lines
1.5 KiB
Python

from fastapi import APIRouter, Request
from starlette.websockets import WebSocket, WebSocketDisconnect
from loon.web import get_mqtt_manager
from loon.web.auth.middleware import authenticated
from loon.web.users.state import subscribe_player, get_user_messages, unsubscribe_player
router = APIRouter(prefix="/users", tags=["users"])
@router.get("/me")
@authenticated
async def me(request: Request):
return request.user.user.model_dump(exclude={"password", "id"})
@router.post("/inventory/request")
@authenticated
async def request_inventory(request: Request):
user = request.user.user
get_mqtt_manager().publish(f"loon/player/{user.uuid}/inventory/full/request")
return 200
@router.post("/online/request")
@authenticated
async def request_online(request: Request):
user = request.user.user
get_mqtt_manager().publish(f"loon/player/{user.uuid}/online/request")
return 200
@router.post("/position/request")
@authenticated
async def request_position(request: Request):
user = request.user.user
get_mqtt_manager().publish(f"loon/player/{user.uuid}/position/request")
return 200
@router.websocket("/me")
@authenticated
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
user = websocket.user.user
subscribe_player(user)
try:
async for message in get_user_messages(user):
await websocket.send_text(message)
except WebSocketDisconnect:
pass
finally:
unsubscribe_player(user)