core: fix: matchmaking and game
This commit is contained in:
@ -6,15 +6,10 @@ from games.models import GameModel
|
||||
|
||||
import json
|
||||
|
||||
from .models import Waiter, WaitingRoom, WaitingRoomManager, normal
|
||||
from .models import Waiter, WaitingRoom, waiting_room_manager
|
||||
|
||||
class MatchMaking(WebsocketConsumer):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.channel_name = "matchmaking"
|
||||
self.group_name = "matchmaking"
|
||||
|
||||
def connect(self):
|
||||
|
||||
user: User = self.scope["user"]
|
||||
@ -22,14 +17,12 @@ class MatchMaking(WebsocketConsumer):
|
||||
if (user.is_anonymous or not user.is_authenticated):
|
||||
return
|
||||
|
||||
self.channel_layer.group_add(self.group_name, self.channel_name)
|
||||
|
||||
self.mode: int = int(self.scope['url_route']['kwargs']['mode'])
|
||||
self.gamemode: str = self.scope['url_route']['kwargs']['gamemode']
|
||||
self.game_type: str = self.scope['url_route']['kwargs']['game_type']
|
||||
self.group_name = self.mode
|
||||
|
||||
waiting_room: WaitingRoom = normal.get(self.gamemode, self.mode)
|
||||
waiting_room.append(Waiter(user.pk, self))
|
||||
self.waiting_room: WaitingRoom = waiting_room_manager.get(self.game_type, self.mode)
|
||||
self.waiting_room.append(Waiter(user, self))
|
||||
|
||||
if (self.mode < 2 or self.mode > 4):
|
||||
data: dict = {
|
||||
@ -39,23 +32,22 @@ class MatchMaking(WebsocketConsumer):
|
||||
self.disconnect(1000)
|
||||
return
|
||||
|
||||
if (self.gamemode not in ["tictactoe", "pong"]):
|
||||
if (self.game_type not in ["tictactoe", "pong"]):
|
||||
data: dict = {
|
||||
"detail": "The gamemode must 'pong' or 'tictactoe'.",
|
||||
"detail": "The game_type must 'pong' or 'tictactoe'.",
|
||||
}
|
||||
self.send(json.dumps(data))
|
||||
self.disconnect(1000)
|
||||
return
|
||||
|
||||
waiting_room.broadcast(f"{len(waiting_room)} / {waiting_room.mode}")
|
||||
if (len(waiting_room) == waiting_room.mode):
|
||||
game_id: int = GameModel().create(self.gamemode, waiting_room.get_users_id())
|
||||
waiting_room.broadcast("game_found", {"game_id": game_id, "gamemode": self.gamemode})
|
||||
waiting_room.clear()
|
||||
self.waiting_room.broadcast(f"{len(self.waiting_room)} / {self.waiting_room.mode}")
|
||||
if (len(self.waiting_room) == self.waiting_room.mode):
|
||||
game_id: int = GameModel(game_type=self.game_type).create(self.waiting_room.get_members())
|
||||
self.waiting_room.broadcast("game_found", {"game_id": game_id, "game_type": self.game_type})
|
||||
|
||||
def disconnect(self, close_code):
|
||||
super().close(close_code)
|
||||
waiting_room: WaitingRoom = normal.get(self.gamemode, self.mode)
|
||||
super().disconnect(close_code)
|
||||
waiting_room: WaitingRoom = waiting_room_manager.get(self.game_type, self.mode)
|
||||
waiter: Waiter = waiting_room.get_member_by_socket(self)
|
||||
if (waiter is not None):
|
||||
waiting_room.remove(waiter, close_code)
|
||||
waiting_room.remove(waiter)
|
Reference in New Issue
Block a user