fix: matchmaking support start stop, multi connection
This commit is contained in:
@ -10,17 +10,16 @@ class Waiter:
|
||||
self.user_id: int = user_id
|
||||
self.socket: WebsocketConsumer = socket
|
||||
|
||||
def send(self, data: dict):
|
||||
self.socket.send(text_data=json.dumps(data))
|
||||
def send(self, detail: str, data: dict = {}):
|
||||
raw_data: dict = {"detail": detail}
|
||||
raw_data.update(data)
|
||||
self.socket.send(text_data=json.dumps(raw_data))
|
||||
|
||||
def accept(self):
|
||||
self.socket.accept()
|
||||
|
||||
def disconnect(self):
|
||||
self.socket.disconnect()
|
||||
|
||||
def __eq__(self, obj):
|
||||
return self.user_id == obj.user_id
|
||||
self.socket.disconnect(200)
|
||||
|
||||
class WaitingRoom:
|
||||
|
||||
@ -29,10 +28,10 @@ class WaitingRoom:
|
||||
self._mode: int = mode
|
||||
self._waiting_room_manager = waiting_room_manager
|
||||
|
||||
def broadcast(self, data: dict):
|
||||
def broadcast(self, detail: str, data: dict = {}):
|
||||
for waiter in self._waiter_list:
|
||||
waiter: Waiter
|
||||
waiter.send(data)
|
||||
waiter.send(detail, data)
|
||||
|
||||
def clear(self):
|
||||
self._waiter_list.clear()
|
||||
@ -44,20 +43,25 @@ class WaitingRoom:
|
||||
return waiter
|
||||
return None
|
||||
|
||||
def append(self, waiter: Waiter):
|
||||
def get_waiter_by_user_id(self, user_id: int):
|
||||
for waiter in self._waiter_list:
|
||||
waiter: Waiter
|
||||
if (waiter.user_id == user_id):
|
||||
return waiter
|
||||
return None
|
||||
|
||||
self.remove(waiter)
|
||||
|
||||
def append(self, waiter: Waiter):
|
||||
tmp: Waiter = self.get_waiter_by_user_id(waiter.user_id)
|
||||
if (tmp is not None):
|
||||
tmp.send("Connection close: Another connection open with the same user id.")
|
||||
self.remove(tmp)
|
||||
waiter.accept()
|
||||
self._waiter_list.append(waiter)
|
||||
|
||||
def remove(self, users_id):
|
||||
for waiter in self._waiter_list:
|
||||
waiter: Waiter = waiter
|
||||
if (waiter == users_id):
|
||||
waiter.disconnect()
|
||||
if (self.empty()):
|
||||
self._waiting_room_manager.remove(self)
|
||||
return
|
||||
def remove(self, waiter: Waiter):
|
||||
self._waiter_list.remove(waiter)
|
||||
waiter.disconnect()
|
||||
|
||||
def empty(self):
|
||||
for _ in self._waiter_list:
|
||||
|
Reference in New Issue
Block a user