anonstream/anonstream/routes/websocket.py

30 行
796 B
Python
Raw 通常表示 履歴

import asyncio
from quart import current_app, websocket
from anonstream.websocket import websocket_outbound, websocket_inbound
from anonstream.routes.wrappers import with_user_from
@current_app.websocket('/live')
@with_user_from(websocket)
async def live(user):
queue = asyncio.Queue()
current_app.websockets.add(queue)
producer = websocket_outbound(
queue=queue,
messages=current_app.chat['messages'].values(),
users=current_app.users,
)
consumer = websocket_inbound(
queue=queue,
chat=current_app.chat,
users=current_app.users,
connected_websockets=current_app.websockets,
user=user,
)
try:
await asyncio.gather(producer, consumer)
finally:
current_app.websockets.remove(queue)