Calls callback functions

def dispatch_message(self, message_type, client_id, client_storage, args, kwargs):
        """
        Calls callback functions
        """
        logger.debug("Backend message ({message_type}) : {args} {kwargs}".format(
            message_type=dict(MESSAGES_TYPES)[message_type], args=args, kwargs=kwargs))

        if message_type in [ON_OPEN, ON_CLOSE, ON_RECEIVE]:
            # Find if client exists in clients_list
            client = next(
                (c for c in self.factory.clients_list if c._client_id == client_id), None)

            # Create a fake client if it doesn't exists
            if not client:
                client = FakeClient(storage=client_storage, factory=self.factory)

        if message_type == ON_OPEN:
            reactor.callInThread(
                self.factory.mease.call_openers, client, self.factory.clients_list)

        elif message_type == ON_CLOSE:
            reactor.callInThread(
                self.factory.mease.call_closers, client, self.factory.clients_list)

        elif message_type == ON_RECEIVE:
            reactor.callInThread(
                self.factory.mease.call_receivers,
                client,
                self.factory.clients_list,
                kwargs.get('message', ''))

        elif message_type == ON_SEND:
            routing = kwargs.pop('routing')

            reactor.callInThread(
                self.factory.mease.call_senders,
                routing,
                self.factory.clients_list,
                *args,
                **kwargs)