dockered
This commit is contained in:
57
django/transcendence/abstract/AbstractRoom.py
Normal file
57
django/transcendence/abstract/AbstractRoom.py
Normal 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)
|
12
django/transcendence/abstract/AbstractRoomManager.py
Normal file
12
django/transcendence/abstract/AbstractRoomManager.py
Normal 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)
|
16
django/transcendence/abstract/AbstractRoomMember.py
Normal file
16
django/transcendence/abstract/AbstractRoomMember.py
Normal 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))
|
Reference in New Issue
Block a user