Extending django-omnibusΒΆ

To extend django-omnibus lets have a look at the mousemove example.

In this example project, we subclassed the connection handler and replaced the method close_connection to send an event to all other connected clients when the connection is closed.

# Example connection.py

from omnibus.factories import websocket_connection_factory


# Our factory function
def mousemove_connection_factory(auth_class, pubsub):
    # Generate a new connection class using the default websocket connection
    # factory (we have to pass an auth class - provided by the server and a
    # pubsub singleton, also provided by the omnibusd server
    class GeneratedConnection(websocket_connection_factory(auth_class, pubsub)):
        def close_connection(self):
            # We subclassed the `close_connection` method to publish a
            # message. Afterwards, we call the parent's method.
            self.pubsub.publish(
                'mousemoves', 'disconnect',
                sender=self.authenticator.get_identifier()
            )
            return super(GeneratedConnection, self).close_connection()

    # Return the generated connection class
    return GeneratedConnection

As you can see, we wrote a new connection factory which returns the extended connection handler. This factory is used in the settings like this

OMNIBUS_CONNECTION_FACTORY = 'example_project.connection.mousemove_connection_factory'

This is all you have to do to send a “disconnect” event when a client closes the connection.