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)