main.py 1.24 KB
Newer Older
Timothy J. Baek's avatar
Timothy J. Baek committed
1
2
3
4
5
6
7
8
9
import socketio

from apps.webui.models.users import Users
from utils.utils import decode_token

sio = socketio.AsyncServer(cors_allowed_origins=[], async_mode="asgi")
app = socketio.ASGIApp(sio, socketio_path="/ws/socket.io")

# Dictionary to maintain the user pool
Timothy J. Baek's avatar
Timothy J. Baek committed
10
11


Timothy J. Baek's avatar
Timothy J. Baek committed
12
13
14
15
16
17
18
19
USER_POOL = {}


@sio.event
async def connect(sid, environ, auth):
    print("connect ", sid)

    user = None
Timothy J. Baek's avatar
Timothy J. Baek committed
20
21
22
23
24
25
26
    if auth and "token" in auth:
        data = decode_token(auth["token"])

        if data is not None and "id" in data:
            user = Users.get_user_by_id(data["id"])

        if user:
Timothy J. Baek's avatar
Timothy J. Baek committed
27
            USER_POOL[sid] = user.id
Timothy J. Baek's avatar
Timothy J. Baek committed
28
            print(f"user {user.name}({user.id}) connected with session ID {sid}")
Timothy J. Baek's avatar
Timothy J. Baek committed
29

Timothy J. Baek's avatar
Timothy J. Baek committed
30
31
32
33
34
35
36
37
38
            print(len(set(USER_POOL)))
            await sio.emit("user-count", {"count": len(set(USER_POOL))})


@sio.on("user-count")
async def user_count(sid):
    print("user-count", sid)
    await sio.emit("user-count", {"count": len(set(USER_POOL))})

Timothy J. Baek's avatar
Timothy J. Baek committed
39
40

@sio.event
Timothy J. Baek's avatar
Timothy J. Baek committed
41
async def disconnect(sid):
Timothy J. Baek's avatar
Timothy J. Baek committed
42
43
44
    if sid in USER_POOL:
        disconnected_user = USER_POOL.pop(sid)
        print(f"user {disconnected_user} disconnected with session ID {sid}")
Timothy J. Baek's avatar
Timothy J. Baek committed
45
46

        await sio.emit("user-count", {"count": len(USER_POOL)})
Timothy J. Baek's avatar
Timothy J. Baek committed
47
48
    else:
        print(f"Unknown session ID {sid} disconnected")