from channels.generic.websocket import WebsocketConsumer from .AbstractRoomMember import AbstractRoomMember class AbstractRoom: def __init__(self, room_manager): self._member_list: [AbstractRoomMember] = [] self.room_manager = room_manager def broadcast(self, detail: str, data: dict = {}): for member in self._member_list: member: AbstractRoomMember member.send(detail, data) def clear(self): self._member_list.clear() def get_member_by_socket(self, socket: WebsocketConsumer): for member in self._member_list: member: AbstractRoomMember if (member.socket is socket): return member return None def get_member_by_user_id(self, user_id: int): for member in self._member_list: member: AbstractRoomMember if (member.user_id == user_id): return member return None def append(self, member: AbstractRoomMember): self._member_list.append(member) member.accept() def remove(self, member: AbstractRoomMember, code: int = 1000): self._member_list.remove(member) member.disconnect(code) def empty(self): for _ in self._member_list: return False return True def get_users_id(self): return [member.user_id for member in self._member_list] def __len__(self): return len(self._member_list)