Cant send a message to a Django channel

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Cant send a message to a Django channel

Praful Bagai
I want to send a message over a channel using Django Channels. This is what I'm doing. I create a consumer first. I'm able to echo back the received messages. However, not able to send messages to a specific channel/group.


    class Consumer(AsyncJsonWebsocketConsumer):
        """Consumer."""
   
        def _get_connection_id(self):
            return ''.join(e for e in self.channel_name if e.isalnum())
   
        async def connect(self):
            scope = self.scope
            user_id = str(scope['user'].user_id)
            connection_id = self._get_connection_id()
            # Adding connection to DB.
            obj = UserConnection.add(connection_id=connection_id, user_id=user_id)
   
            # Accept the connection
            await self.accept()
   
            # Adding current to group.
            await self.channel_layer.group_add(
                user_id,
                connection_id,
            )
   
        async def disconnect(self, close_code):
            """Remove the connection and decrement connection_count in DB."""
            connection_id = self._get_connection_id()
            user_id = str(self.scope['user'].user_id)
   
            UserConnection.drop(connection_id=connection_id)
   
            # Dropping from group.
            await self.channel_layer.group_discard(
                user_id,
                connection_id,
            )
   
        async def receive_json(self, data, **kwargs):
            """Receive messages over socket."""
            resp = data
            # I'm able to echo back the received message after some processing.
            await self.send(json.dumps(resp, default=str))
   
   
    # This does not works.
    def send_to_connection(connection_id, data):
        """Send the data to the connected socket id."""
        return get_channel_layer().group_send(connection_id, data)
   
   

Now when I try to send a message, the connected socket does not receives the message.


    >>> connection_id = UserConnection.objects.get(user_id=user_id).connection_id
    >>> send_to_connection(connection_id, {'a':1})
    # returns <coroutine object RedisChannelLayer.group_send at 0x109576d40>


What's the issue in the code?

______________________________________________________________________
This email has been scanned by the Symantec Email Security.cloud service.
For more information please contact [hidden email]
______________________________________________________________________

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CADxEvOHm4CE7CuchCLXCeg21vy7ifZPq4vuvWs5-uELuFjRUyw%40mail.gmail.com.