Beispiel #1
0
    def __init__(self):
        """
        Defines dictionary attibutes sorted by room_id
        For each room:
        - new_message_events contains gevent.Event objects used by message
          handlers to pause/restart execution and implement long polling
        - messages stores the queue of the latest 50 messages
        - counters contains iterators to pick up message identifiers
        - connected_users is a dictionary holding the usernames of connected
          users sorted by the time of their latest request
        - new_connected_user_event contains gevent.Event objects used
          by self.notify_users_list and self.get_users_list methods to
          implement long polling

        """
        self.handler = MessageHandlerFactory()
        self.new_message_events = {}
        self.messages = {}
        self.counters = {}
        self.connected_users = {}
        self.new_connected_user_event = {}
        rooms = Room.objects.all()
        for room in rooms:
            self.new_message_events[room.id] = Event()
            self.messages[room.id] = deque(maxlen=50)
            self.counters[room.id] = itertools.count(1)
            self.connected_users[room.id] = {}
            self.new_connected_user_event[room.id] = Event()
from utils.handlers import MessageHandlerFactory
from django.dispatch import Signal

chat_message_received = Signal(providing_args=[
    "room_id",
    "username",
    "message",
    "date",
])

handler = MessageHandlerFactory()

chat_message_received.connect(handler.handle_received_message)