¿Cómo enviar un mensaje WAMP de Autobahn / Twisted desde fuera del protocolo?

Estoy siguiendo los ejemplos básicos de wamp pubsub en el código github :

Este ejemplo publica mensajes desde dentro de la clase:

class Component(ApplicationSession): """ An application component that publishes an event every second. """ def __init__(self, realm = "realm1"): ApplicationSession.__init__(self) self._realm = realm def onConnect(self): self.join(self._realm) @inlineCallbacks def onJoin(self, details): counter = 0 while True: self.publish('com.myapp.topic1', counter) counter += 1 yield sleep(1) 

Quiero crear una referencia para poder publicar mensajes a través de esta conexión desde otra parte del código, es decir, myobject.myconnection.publish('com.myapp.topic1', 'My message')

A partir de esta pregunta similar , la respuesta parece ser que, al conectarme, necesito establecer algo como self.factory.myconnection = self . He intentado múltiples permutaciones de esto sin éxito.

La parte de configuración de fábrica se encuentra a continuación:

      ## create a WAMP application session factory ## from autobahn.twisted.wamp import ApplicationSessionFactory session_factory = ApplicationSessionFactory() ## .. and set the session class on the factory ## session_factory.session = Component ## create a WAMP-over-WebSocket transport client factory ## from autobahn.twisted.websocket import WampWebSocketClientFactory transport_factory = WampWebSocketClientFactory(session_factory, args.wsurl, debug = args.debug) transport_factory.setProtocolOptions(failByDrop = False) ## start a WebSocket client from an endpoint ## client = clientFromString(reactor, args.websocket) client.connect(transport_factory) 

    ¿Dónde se adjuntaría cualquier referencia que establezca dentro de la clase? al client ? a transport_factory ? a session_factory ?

    Al unirse a la sesión de la aplicación en el reino WAMP, se establece una referencia a sí mismo en la fábrica de la sesión de la aplicación:

     class MyAppComponent(ApplicationSession): ... snip def onJoin(self, details): if not self.factory._myAppSession: self.factory._myAppSession = self 

    Luego puede acceder a esta sesión desde cualquier parte de su código, por ejemplo,

      @inlineCallbacks def pub(): counter = 0 while True: ## here we can access the app session that was created .. ## if session_factory._myAppSession: session_factory._myAppSession.publish('com.myapp.topic123', counter) print("published event", counter) else: print("no session") counter += 1 yield sleep(1) pub()