Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import Any, Callable, List, TypeVar
- from enum import Enum
- from dataclasses import dataclass
- class EventType(Enum):
- MESSAGE = 1
- MENTION = 2
- class MetaEvent():
- def __new__(metacls, name, bases, namespace, **kwargs):
- return super().__new__(metacls, name, bases, namespace)
- def __init__(cls, name, bases, namespace, event_types: List[EventType]=[], **kwargs):
- cls.event_types = event_types
- super().__init__(name, bases, namespace)
- class EventBase:
- pass
- @dataclass
- class RoomEvent(EventBase):
- room_id: int
- room_name: int
- @dataclass
- class MessageEvent(RoomEvent, metaclass=MetaEvent, event_types=[EventType.MESSAGE]):
- content: str
- message_id: int
- user_id: int
- user_name: str
- @dataclass
- class MentionEvent(MessageEvent, metaclass=MetaEvent, event_types=[EventType.MENTION]):
- parent_id: int
- target_user_id: int
- EventHandler = Callable[[Any], None]
- T = TypeVar("T", bound=EventBase)
- class Room:
- def __init__(self):
- self._handlers: dict[EventType, set[EventHandler]] = {
- eventType: set() for eventType in EventType
- }
- self.add_handler(MentionEvent, self._mentionHandler)
- def add_handler(self, cls: T, handler: Callable[[T], None]):
- for event_type in cls.event_types:
- self._handlers[event_type].add(handler)
- def _mentionHandler(e: MentionEvent):
- pass
Advertisement
Add Comment
Please, Sign In to add comment