Skip to content

Commit 59f071f

Browse files
committed
cache online users list on connect and disconnect
1 parent 831c9b0 commit 59f071f

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

chats/consumers/chat.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
import json
3+
from json import JSONDecodeError
34
from typing import Optional
45

56
from channels.generic.websocket import AsyncJsonWebsocketConsumer
@@ -45,6 +46,12 @@ async def connect(self):
4546
cache.set(
4647
get_user_channel_cache_key(self.user), self.channel_name, ONE_WEEK_IN_SECONDS
4748
)
49+
# set user online
50+
cache.delete(get_user_online_cache_key(self.user))
51+
online_users = cache.get(get_users_online_cache_key(), set())
52+
online_users.add(self.user.id)
53+
cache.set(get_users_online_cache_key(), online_users)
54+
4855
# get all projects that user is a member of
4956
project_ids_list = Collaborator.objects.filter(user=self.user).values_list(
5057
"project", flat=True
@@ -66,7 +73,10 @@ async def connect(self):
6673

6774
async def disconnect(self, close_code):
6875
"""User disconnected from websocket"""
69-
pass
76+
cache.delete(get_user_online_cache_key(self.user))
77+
online_users = cache.get(get_users_online_cache_key(), set())
78+
online_users.discard(self.user.id)
79+
cache.set(get_users_online_cache_key(), online_users)
7080

7181
async def receive_json(self, content, **kwargs):
7282
"""Receive message from WebSocket in JSON format"""
@@ -212,3 +222,15 @@ async def __process_general_event(self, event: Event, room_name: str):
212222
# await self.close(200)
213223
else:
214224
raise ValueError("Unknown event type")
225+
226+
async def decode_json(self, text_data) -> dict:
227+
try:
228+
return json.loads(text_data)
229+
except JSONDecodeError as error:
230+
await self.disconnect(400)
231+
raise error
232+
233+
234+
"""
235+
236+
"""

0 commit comments

Comments
 (0)