56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
from django.db import models
|
|
|
|
from channels.generic.websocket import WebsocketConsumer
|
|
import json
|
|
|
|
from transcendence.abstract.AbstractRoom import AbstractRoom
|
|
from transcendence.abstract.AbstractRoomManager import AbstractRoomManager
|
|
from transcendence.abstract.AbstractRoomMember import AbstractRoomMember
|
|
|
|
# Create your models here.
|
|
class Waiter(AbstractRoomMember):
|
|
pass
|
|
|
|
class WaitingRoom(AbstractRoom):
|
|
|
|
def __init__(self, room_manager, game_type: str, mode: int):
|
|
|
|
super().__init__(room_manager)
|
|
self._member_list: set[Waiter]
|
|
|
|
self.mode: int = mode
|
|
self.game_type: str = game_type
|
|
|
|
def append(self, waiter: Waiter):
|
|
|
|
tmp: Waiter = self.get_member_by_user(waiter.user)
|
|
if (tmp is not None):
|
|
tmp.send("Connection close: Another connection open with the same user id.")
|
|
self.remove(tmp)
|
|
|
|
waiter.socket.accept()
|
|
|
|
super().append(waiter)
|
|
|
|
class WaitingRoomManager(AbstractRoomManager):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self._room_list: set[WaitingRoom]
|
|
|
|
|
|
def get(self, game_type: str, mode: int) -> WaitingRoom:
|
|
|
|
for waiting_room in self._room_list:
|
|
waiting_room: WaitingRoom
|
|
if (waiting_room.mode == mode and waiting_room.game_type == game_type):
|
|
return waiting_room
|
|
|
|
tmp: WaitingRoom = WaitingRoom(self, game_type, mode)
|
|
|
|
super().append(tmp)
|
|
|
|
return tmp
|
|
|
|
waiting_room_manager: WaitingRoomManager = WaitingRoomManager() |