Some cleanup in WampClient and added functions that are usefull for extensions that need to use pub/sub.
authorEdouard Tisserant
Tue, 02 Oct 2018 15:52:11 +0200
changeset 2306 908471b344ba
parent 2273 a0efe3d9c853
child 2307 c44692b53736
Some cleanup in WampClient and added functions that are usefull for extensions that need to use pub/sub.
runtime/WampClient.py
--- a/runtime/WampClient.py	Wed Sep 12 11:36:50 2018 +0200
+++ b/runtime/WampClient.py	Tue Oct 02 15:52:11 2018 +0200
@@ -32,13 +32,13 @@
 from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
 from autobahn.wamp import types, auth
 from autobahn.wamp.serializer import MsgPackSerializer
-from twisted.internet.defer import inlineCallbacks
 from twisted.internet.protocol import ReconnectingClientFactory
 from twisted.python.components import registerAdapter
 
 from formless import annotate, webform
 import formless
 from nevow import tags, url, static
+from runtime import GetPLCObjectSingleton
 
 mandatoryConfigItems = ["ID", "active", "realm", "url"]
 
@@ -87,7 +87,7 @@
 def GetCallee(name):
     """ Get Callee or Subscriber corresponding to '.' spearated object path """
     names = name.split('.')
-    obj = _PySrv.plcobj
+    obj = GetPLCObjectSingleton()
     while names:
         obj = getattr(obj, names.pop(0))
     return obj
@@ -115,7 +115,6 @@
             raise Exception(
                 "don't know how to handle authmethod {}".format(challenge.method))
 
-    @inlineCallbacks
     def onJoin(self, details):
         global _WampSession
         _WampSession = self
@@ -128,13 +127,13 @@
                 registerOptions = None
                 print(_("TypeError register option: {}".format(e)))
 
-            yield self.register(GetCallee(name), u'.'.join((ID, name)), registerOptions)
+            self.register(GetCallee(name), u'.'.join((ID, name)), registerOptions)
 
         for name in SubscribedEvents:
-            yield self.subscribe(GetCallee(name), unicode(name))
+            self.subscribe(GetCallee(name), unicode(name))
 
         for func in DoOnJoin:
-            yield func(self)
+            func(self)
 
         print(_('WAMP session joined (%s) by:' % time.ctime()), ID)
 
@@ -145,6 +144,9 @@
         _transportFactory = None
         print(_('WAMP session left'))
 
+    def publishWithOwnID(eventID, value):
+        ID = self.config.extra["ID"]
+        self.publish(unicode(ID+'.'+eventID), value)
 
 class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
 
@@ -341,6 +343,13 @@
     global _PySrv
     _PySrv = pysrv
 
+def PublishEvent(eventID, value):
+    if getWampStatus() == "Attached":
+         _WampSession.publish(eventID, value)
+
+def PublishEventWithOwnID(eventID, value):
+    if getWampStatus() == "Attached":
+         _WampSession.publishWithOwnID(eventID, value)
 
 # WEB CONFIGURATION INTERFACE
 WAMP_SECRET_URL = "secret"