11import datetime
22import json
3+ from json import JSONDecodeError
34from typing import Optional
45
56from 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