core: recreation of matchmaking, add: matchmaking support multiple modes
This commit is contained in:
@ -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)
|
Reference in New Issue
Block a user