diff --git a/sapl/base/consumers.py b/sapl/base/consumers.py index db0365cf4..3498a4ce9 100644 --- a/sapl/base/consumers.py +++ b/sapl/base/consumers.py @@ -1,10 +1,54 @@ import json from asgiref.sync import async_to_sync -from channels.generic.websocket import WebsocketConsumer +from channels.generic.websocket import AsyncWebsocketConsumer, WebsocketConsumer -class ChatConsumer(WebsocketConsumer): +class ChatConsumer(AsyncWebsocketConsumer): + async def connect(self): + self.room_name = self.scope['url_route']['kwargs']['room_name'] + self.room_group_name = 'chat_%s' % self.room_name + + # Join room group + await self.channel_layer.group_add( + self.room_group_name, + self.channel_name + ) + + await self.accept() + + async def disconnect(self, close_code): + # Leave room group + await self.channel_layer.group_discard( + self.room_group_name, + self.channel_name + ) + + # Receive message from WebSocket + async def receive(self, text_data): + text_data_json = json.loads(text_data) + message = text_data_json['message'] + + # Send message to room group + await self.channel_layer.group_send( + self.room_group_name, + { + 'type': 'chat_message', + 'message': message + } + ) + + # Receive message from room group + async def chat_message(self, event): + message = event['message'] + + # Send message to WebSocket + await self.send(text_data=json.dumps({ + 'message': message + })) + + +class ChatConsumer__tutorial2(WebsocketConsumer): def connect(self): self.room_name = self.scope['url_route']['kwargs']['room_name'] self.room_group_name = 'chat_%s' % self.room_name