Как отправить данные от одного потребителя к другому потребителю
Это потребитель, который обслуживает данные для других клиентов.
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, получат эти данные. Я хочу сделать такую функциональность. Как я могу этого добиться? Пожалуйста, помогите мне!