Как отправить данные от одного потребителя к другому потребителю

Это потребитель, который обслуживает данные для других клиентов.

class GetLocationConsumer(AsyncConsumer):
    data = ''

async def websocket_connect(self, event):
    self.bus = self.scope["url_route"]["kwargs"]["bus"]
    print(self.bus)
    #self.user = self.scope["user"]
    self.bus_room = self.bus
    self.channel_name = self.bus_room
    await self.channel_layer.group_add(self.bus_room, self.channel_name)

    await self.send(
        {
            "type": "websocket.accept",
        }
    )
    await self.send(
        {
            "type": "websocket.send",
            "text": "connected",
        }
    )

async def websocket_receive(self, event):
    
    self.user = self.scope["user"]
    print(self.user)
    print(f'{randint(1,100)}{event["text"]}')

    await self.channel_layer.group_send(
        self.bus_room,
        {
            "type": "send_message",
            "text": event["text"],
        },
    )

async def send_message(self, event):
    # print("message hit")
    await self.send(
        {
            "type": "websocket.send",
            "text": event["text"],
        }
    )

async def websocket_disconnect(self, event):
    await self.send({"type": "websocket.send", "text": "Connection close"})
    await self.send({"type": "websocket.close", "text": "Connection close"})

Это еще один потребитель, который будет получать данные о местоположении от клиента.

class SetLocationConsumer(AsyncConsumer):

    async def websocket_connect(self, event):
        self.token = self.scope["url_route"]["kwargs"]["token"]
        print(self.token)

        if self.token is None or self.token == '':
            await self.send({
                "type": "websocket.close",
                "text": "No token provided",
            })

        self.user = await self.check_token(self.token)

        if self.user is AnonymousUser:
            await self.send({
                "type": "websocket.close",
                "text": "Invalid token",
            })

        self.bus = self.scope["url_route"]["kwargs"]["bus"]
        self.bus_room = self.bus
        self.channel_name = self.bus_room
        await self.channel_layer.group_add(self.bus_room, self.channel_name)
        await self.send({
            "type": "websocket.accept",
        })

    async def websocket_receive(self, event):

        
        await self.channel_layer.group_send(
            self.bus_room,
            {
                "type": "send_message",
                "text": event["text"],
            },
        )

    async def websocket_disconnect(self, event):
        await self.send({
            "type": "websocket.send",
            "text": "Connection close"
        })
        await self.send({
            "type": "websocket.close",
            "text": "Connection close"
        })

    @database_sync_to_async
    def check_token(self, token):
        try:
            token = Token.objects.get(key=token)
            return token.user
        except Token.DoesNotExist:
            return AnonymousUser()

    async def send_message(self, event):
       
        await self.send(
            {
                "type": "websocket.send",
                "text": event["text"],
            }
        )

Данные о местоположении будут получены SetConsumer от клиента провайдера местоположения и другие клиенты, слушающие GetConsumer, получат эти данные. Я хочу сделать такую функциональность. Как я могу этого добиться? Пожалуйста, помогите мне!

Вернуться на верх