mirror of
https://github.com/evgen-app/chess_rpg_backend.git
synced 2024-11-25 19:14:02 +03:00
added message in room on ready to play
This commit is contained in:
parent
46344ad776
commit
7242992b42
|
@ -102,7 +102,7 @@ class QueueConsumer(AsyncWebsocketConsumer):
|
||||||
player_score_2=opponent[1],
|
player_score_2=opponent[1],
|
||||||
)
|
)
|
||||||
|
|
||||||
await channel_layer.send(
|
await self.channel_layer.send(
|
||||||
opponent[0],
|
opponent[0],
|
||||||
{
|
{
|
||||||
"type": "info",
|
"type": "info",
|
||||||
|
@ -219,6 +219,14 @@ class RoomConsumer(AsyncWebsocketConsumer):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
if self.scope["opponent_channel"]:
|
||||||
|
await self.channel_layer.send(
|
||||||
|
self.scope["opponent_channel"],
|
||||||
|
{
|
||||||
|
"type": "channel",
|
||||||
|
"channel": self.channel_name,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
# Join room group
|
# Join room group
|
||||||
await self.channel_layer.group_add(self.room_group_name, self.channel_name)
|
await self.channel_layer.group_add(self.room_group_name, self.channel_name)
|
||||||
|
@ -253,13 +261,15 @@ class RoomConsumer(AsyncWebsocketConsumer):
|
||||||
opponent = PlayerInRoom.objects.get(player_id=p_ids[0])
|
opponent = PlayerInRoom.objects.get(player_id=p_ids[0])
|
||||||
|
|
||||||
self.scope["opponent"] = opponent.player.id
|
self.scope["opponent"] = opponent.player.id
|
||||||
|
self.scope["opponent_channel"] = opponent.channel_name
|
||||||
self.scope["opponent_score"] = opponent.score
|
self.scope["opponent_score"] = opponent.score
|
||||||
self.scope["opponent_deck"] = opponent.deck.id
|
self.scope["opponent_deck"] = opponent.deck.id
|
||||||
self.scope["opponent_first"] = opponent.first
|
self.scope["opponent_first"] = opponent.first
|
||||||
self.scope["opponent_online"] = opponent.online
|
self.scope["opponent_online"] = opponent.online
|
||||||
|
|
||||||
player.online = True
|
player.online = True
|
||||||
player.save(update_fields=["online"])
|
player.channel_name = self.channel_name
|
||||||
|
player.save(update_fields=["online", "channel_name"])
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def disconnect(self, close_code):
|
async def disconnect(self, close_code):
|
||||||
|
@ -275,11 +285,37 @@ class RoomConsumer(AsyncWebsocketConsumer):
|
||||||
|
|
||||||
# Receive message from WebSocket
|
# Receive message from WebSocket
|
||||||
async def receive(self, text_data):
|
async def receive(self, text_data):
|
||||||
# Send message to room group
|
data = None
|
||||||
await self.channel_layer.group_send(
|
|
||||||
self.room_group_name,
|
try:
|
||||||
{"type": "chat_message", "message": text_data},
|
data = json.loads(text_data)
|
||||||
|
except ValueError:
|
||||||
|
await self.send(
|
||||||
|
text_data=json.dumps(
|
||||||
|
{"type": "ERROR", "message": "data is not JSON serializable"}
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if data:
|
||||||
|
if data["type"] == "start":
|
||||||
|
if not await self.start(data):
|
||||||
|
await self.send(
|
||||||
|
text_data=json.dumps(
|
||||||
|
{"type": "ERROR", "message": "opponent is offline"}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def start(self, data):
|
||||||
|
if self.scope["opponent_channel"] and self.scope["opponent_online"]:
|
||||||
|
await self.channel_layer.send(
|
||||||
|
self.scope["opponent_channel"],
|
||||||
|
{
|
||||||
|
"type": "info",
|
||||||
|
"message": "opponent is ready to start",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
# info type group message handler
|
# info type group message handler
|
||||||
async def info(self, event):
|
async def info(self, event):
|
||||||
|
@ -306,3 +342,7 @@ class RoomConsumer(AsyncWebsocketConsumer):
|
||||||
|
|
||||||
# Send message to WebSocket
|
# Send message to WebSocket
|
||||||
await self.send(text_data=json.dumps({"lot": message}))
|
await self.send(text_data=json.dumps({"lot": message}))
|
||||||
|
|
||||||
|
async def channel(self, event):
|
||||||
|
channel = event["channel"]
|
||||||
|
self.scope["opponent_channel"] = channel
|
||||||
|
|
|
@ -31,6 +31,7 @@ class PlayerInRoom(models.Model):
|
||||||
score = models.IntegerField(blank=False)
|
score = models.IntegerField(blank=False)
|
||||||
deck = models.ForeignKey(Deck, on_delete=models.CASCADE, related_name="decks")
|
deck = models.ForeignKey(Deck, on_delete=models.CASCADE, related_name="decks")
|
||||||
online = models.BooleanField(default=False)
|
online = models.BooleanField(default=False)
|
||||||
|
channel_name = models.CharField(max_length=50, blank=True, null=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.player.name} in room {self.room.slug}"
|
return f"{self.player.name} in room {self.room.slug}"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user