This commit is contained in:
AdrienLSH
2024-05-14 08:50:37 +02:00
parent 95f0097ce5
commit e308e8f012
231 changed files with 70 additions and 22 deletions

View File

@ -0,0 +1,57 @@
from __future__ import annotations
from channels.generic.websocket import WebsocketConsumer
from .AbstractRoomMember import AbstractRoomMember
from django.contrib.auth.models import User
from profiles.models import ProfileModel
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .AbstractRoomManager import AbstractRoomManager
class AbstractRoom:
def __init__(self, room_manager: AbstractRoomManager):
self._member_list: set[AbstractRoomMember] = set()
self._room_manager: AbstractRoomManager = room_manager
def broadcast(self, detail: str, data: dict = {}, excludes: set[AbstractRoomMember] = set()) -> None:
members: set[AbstractRoomMember] = self._member_list - excludes
for member in members:
member.send(detail, data)
def get_member_by_socket(self, socket: WebsocketConsumer) -> AbstractRoomMember | None:
for member in self._member_list:
if member.socket is socket:
return member
def get_member_by_user(self, user: User) -> AbstractRoomMember:
for member in self._member_list:
if member.user == user:
return member
def get_members_profiles(self) -> set[ProfileModel]:
return set(member.user.profilemodel for member in self._member_list)
def get_members(self) -> set[ProfileModel]:
return set(member.user for member in self._member_list)
def append(self, member: AbstractRoomMember) -> None:
self._member_list.add(member)
def remove(self, member: AbstractRoomMember) -> None:
self._member_list.remove(member)
def get_users(self) -> set[User]:
return set(member.user for member in self._member_list)
def __len__(self) -> int:
return len(self._member_list)

View File

@ -0,0 +1,12 @@
from .AbstractRoom import AbstractRoom
class AbstractRoomManager:
def __init__(self):
self._room_list: list[AbstractRoom] = []
def remove(self, room: AbstractRoom) -> None:
self._room_list.remove(room)
def append(self, room: AbstractRoom) -> None:
self._room_list.append(room)

View File

@ -0,0 +1,16 @@
from channels.generic.websocket import WebsocketConsumer
from django.contrib.auth.models import User
import json
class AbstractRoomMember:
def __init__(self, user: User, socket: WebsocketConsumer):
self.user: User = user
self.socket: WebsocketConsumer = socket
def send(self, detail: str, data: dict = {}) -> None:
raw_data: dict = {"detail": detail}
raw_data.update(data)
self.socket.send(text_data=json.dumps(raw_data))