WS change
Build and Push Docker Image / build-and-push (push) Successful in 24s

This commit is contained in:
ciomek committed 2026-08-30 11:46:57 +02:00
1 parent 3617793136
commit 8c8f98623e
2 files changed
+40 -11

No files matched your search

+4 -11
View File
@@ -1,12 +1,9 @@
import asyncio
import threading
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 user_threads, user_world_requests
from loon.web.users.state import subscribe_player, get_user_messages, unsubscribe_player
router = APIRouter(prefix="/users", tags=["users"])
@@ -47,16 +44,12 @@ async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
user = websocket.user.user
queue = asyncio.Queue()
user_threads[user.uuid] = queue
user_world_requests[user.uuid] = set()
subscribe_player(user)
try:
while True:
message = await queue.get()
async for message in get_user_messages(user):
await websocket.send_text(message)
except WebSocketDisconnect:
pass
finally:
user_threads.pop(user.uuid, None)
user_world_requests.pop(user.uuid, None)
unsubscribe_player(user)
+36
View File
@@ -1,2 +1,38 @@
import asyncio
from loon.web.users.models import User
user_threads = {}
user_world_requests = {}
async def send_to_player(user: User, msg):
queue = user_threads.get(user.uuid)
if queue is not None:
await queue.put(msg)
def get_player_thread(user: User):
return user_threads.get(user.uuid)
async def get_user_messages(user: User):
queue = user_threads.get(user.uuid)
if queue is None:
return
while True:
yield await queue.get()
def subscribe_player(user: User):
queue = asyncio.Queue()
user_threads[user.uuid] = queue
user_world_requests[user.uuid] = set()
return user_threads[user.uuid]
def unsubscribe_player(user: User):
user_threads.pop(user.uuid, None)
user_world_requests.pop(user.uuid, None)