matchmaking support multigame
This commit is contained in:
@ -18,17 +18,27 @@ class MatchMaking(WebsocketConsumer):
|
||||
def connect(self):
|
||||
|
||||
user: User = self.scope["user"]
|
||||
|
||||
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.group_name = self.mode
|
||||
|
||||
waiting_room: WaitingRoom = normal.get(self.mode)
|
||||
|
||||
waiting_room: WaitingRoom = normal.get(self.gamemode, self.mode)
|
||||
waiting_room.append(Waiter(user.pk, self))
|
||||
|
||||
if (self.mode < 2 or self.mode > 4):
|
||||
data: dict = {
|
||||
"detail": "The mode must be > 1 and < 4.",
|
||||
}
|
||||
self.send(json.dumps(data))
|
||||
self.disconnect(1000)
|
||||
return
|
||||
|
||||
if (self.mode < 2 or self.mode > 4):
|
||||
data: dict = {
|
||||
"detail": "The mode must be > 1 and < 4.",
|
||||
@ -45,7 +55,7 @@ class MatchMaking(WebsocketConsumer):
|
||||
|
||||
def disconnect(self, close_code):
|
||||
super().close(close_code)
|
||||
waiting_room: WaitingRoom = normal.get(self.mode)
|
||||
waiting_room: WaitingRoom = normal.get(self.gamemode, self.mode)
|
||||
waiter: Waiter = waiting_room.get_member_by_socket(self)
|
||||
if (waiter is not None):
|
||||
waiting_room.remove(waiter, close_code)
|
@ -13,9 +13,10 @@ class Waiter(AbstractRoomMember):
|
||||
|
||||
class WaitingRoom(AbstractRoom):
|
||||
|
||||
def __init__(self, room_manager,mode):
|
||||
def __init__(self, room_manager, gamemode: str, mode: int):
|
||||
super().__init__(room_manager)
|
||||
self.mode = mode
|
||||
self.gamemode = gamemode
|
||||
|
||||
def append(self, waiter: Waiter):
|
||||
tmp: Waiter = self.get_member_by_user_id(waiter.user_id)
|
||||
@ -27,12 +28,13 @@ class WaitingRoom(AbstractRoom):
|
||||
|
||||
class WaitingRoomManager(AbstractRoomManager):
|
||||
|
||||
def get(self, mode: int):
|
||||
def get(self, gamemode: str, mode: int):
|
||||
|
||||
for waiting_room in self._room_list:
|
||||
waiting_room: WaitingRoom
|
||||
if (waiting_room.mode == mode):
|
||||
if (waiting_room.mode == mode and waiting_room.gamemode == gamemode):
|
||||
return waiting_room
|
||||
tmp: WaitingRoom = WaitingRoom(self, mode)
|
||||
tmp: WaitingRoom = WaitingRoom(self, gamemode, mode)
|
||||
super().append(tmp)
|
||||
return tmp
|
||||
|
||||
|
@ -2,5 +2,5 @@ from django.urls import re_path
|
||||
from . import consumers
|
||||
|
||||
websocket_urlpatterns = [
|
||||
re_path(r'ws/matchmaking/(?P<mode>\d+)$', consumers.MatchMaking.as_asgi())
|
||||
re_path(r'ws/matchmaking/(?P<gamemode>\w+)/(?P<mode>\d+)$', consumers.MatchMaking.as_asgi())
|
||||
]
|
||||
|
Reference in New Issue
Block a user