diff --git a/synapse/notifier.py b/synapse/notifier.py
index b969011b32..1656717cd7 100644
--- a/synapse/notifier.py
+++ b/synapse/notifier.py
@@ -24,6 +24,15 @@ logger = logging.getLogger(__name__)
class _NotificationListener(object):
+ """ This represents a single client connection to the events stream.
+
+ The events stream handler will have yielded to the deferred, so to
+ notify the handler it is sufficient to resolve the deferred.
+
+ This listener will also keep track of which rooms it is listening in
+ so that it can remove itself from the indexes in the Notifier class.
+ """
+
def __init__(self, user, rooms, from_token, limit, timeout, deferred):
self.user = user
self.from_token = from_token
@@ -36,6 +45,11 @@ class _NotificationListener(object):
self.pending_notifications = []
def notify(self, notifier, events, start_token, end_token):
+ """ Inform whoever is listening about the new events. This will
+ also remove this listener from all the indexes in the Notifier
+ it knows about.
+ """
+
result = (events, (start_token, end_token))
try:
@@ -51,6 +65,11 @@ class _NotificationListener(object):
class Notifier(object):
+ """ This class is responsible for notifying any listeners when there are
+ new events available for it.
+
+ Primarily used from the /events stream.
+ """
def __init__(self, hs):
self.hs = hs
@@ -67,6 +86,13 @@ class Notifier(object):
@log_function
@defer.inlineCallbacks
def on_new_room_event(self, event, extra_users=[]):
+ """ Used by handlers to inform the notifier something has happened
+ in the room, room event wise.
+
+ This triggers the notifier to wake up any listeners that are
+ listening to the room, and any listeners for the users in the
+ `extra_users` param.
+ """
room_id = event.room_id
source = self.event_sources.sources["room"]
@@ -94,6 +120,11 @@ class Notifier(object):
@defer.inlineCallbacks
def on_new_user_event(self, users=[], rooms=[]):
+ """ Used to inform listeners that something has happend
+ presence/user event wise.
+
+ Will wake up all listeners for the given users and rooms.
+ """
source = self.event_sources.sources["presence"]
listeners = set()
@@ -117,6 +148,10 @@ class Notifier(object):
)
def get_events_for(self, user, rooms, pagination_config, timeout):
+ """ For the given user and rooms, return any new events for them. If
+ there are no new events wait for up to `timeout` milliseconds for any
+ new events to happen before returning.
+ """
deferred = defer.Deferred()
self._get_events(
|