core: recreation of matchmaking, add: matchmaking support multiple modes

This commit is contained in:
2023-12-23 12:54:33 +01:00
parent 278e2cbe54
commit 6c39a13aca
8 changed files with 143 additions and 41 deletions

View File

@ -6,8 +6,7 @@ from games.models import GameModel
import json
queue_id: [int] = []
queue_ws: [WebsocketConsumer] = []
from .models import Waiter, WaitingRoom, WaitingRoomManager, normal
class MatchMaking(WebsocketConsumer):
@ -24,25 +23,20 @@ class MatchMaking(WebsocketConsumer):
self.channel_layer.group_add(self.group_name, self.channel_name)
self.accept()
self.mode = int(self.scope['url_route']['kwargs']['mode'])
self.group_name = self.mode
global queue_id, queue_ws
queue_id.append(user.pk)
queue_ws.append(self)
waiting_room: WaitingRoom = normal.get(self.mode)
waiting_room.append(Waiter(user.pk, self))
if len(set(queue_id)) == 2:
game_id: int = GameModel().create(set(queue_id))
event = {"game_id": game_id}
for ws in queue_ws:
ws.send(text_data=json.dumps({'game_id': game_id}))
queue_id.clear()
queue_ws.clear()
print(len(waiting_room), "/", self.mode, [len(waiting_room),self.mode])
if (len(waiting_room) == self.mode):
game_id: int = GameModel().create(waiting_room.get_users_id())
waiting_room.broadcast({"detail": "Game found !", "game_id": game_id})
waiting_room.clear()
def disconnect(self, close_code):
user: User = self.scope["user"]
global queue_id, queue_ws
if (user.pk in queue_id):
queue_ws.pop(queue_id.index(user.pk))
queue_id.remove(user.pk)
self.channel_layer.group_discard(self.group_name, self.channel_name)
waiting_room: WaitingRoom = normal.get(self.mode)
waiter: Waiter = waiting_room.get_waiter_by_socket(self)
if (waiter is not None):
waiting_room.remove(self.scope["user"].pk)