--- a/runtime/WampClient.py Thu Feb 05 23:32:31 2015 +0100
+++ b/runtime/WampClient.py Sun Feb 08 16:50:54 2015 +0100
@@ -2,38 +2,59 @@
# -*- coding: utf-8 -*-
import sys
-from twisted.python import log
-
-from twisted.internet import reactor, ssl
+#from twisted.python import log
from autobahn.twisted import wamp
from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
+from twisted.internet.defer import inlineCallbacks
from autobahn.wamp import types
+from autobahn.wamp.serializer import MsgPackSerializer
import json
_WampSession = None
_PySrv = None
+ExposedCalls = ["StartPLC",
+ "StopPLC",
+ "ForceReload",
+ "GetPLCstatus",
+ "NewPLC",
+ "MatchMD5",
+ "SetTraceVariablesList",
+ "GetTraceVariables",
+ "RemoteExec",
+ "GetLogMessage",
+ ]
+
+def MakeCallee(name):
+ global _PySrv
+ def Callee(*args,**kwargs):
+ return getattr(_PySrv.plcobj, name)(*args,**kwargs)
+ return Callee
+
+
class WampSession(wamp.ApplicationSession):
+
+ @inlineCallbacks
def onJoin(self, details):
global _WampSession
_WampSession = self
print 'WAMP session joined by :', self.config.extra["ID"]
+ for name in ExposedCalls:
+ reg = yield self.register(MakeCallee(name), name)
def onLeave(self, details):
global _WampSession
_WampSession = None
print 'WAMP session left'
-
def RegisterWampClient(wampconf):
WSClientConf = json.load(open(wampconf))
- ## TODO log to PLC console instead
- ## 0) start logging to console
- log.startLogging(sys.stdout)
+ ## start logging to console
+ # log.startLogging(sys.stdout)
- ## 1) create a WAMP application session factory
+ # create a WAMP application session factory
component_config = types.ComponentConfig(
realm = WSClientConf["realm"],
extra = {"ID":WSClientConf["ID"]})
@@ -41,27 +62,17 @@
config = component_config)
session_factory.session = WampSession
- ## TODO select optimum serializer for passing session lists
- ## optional: use specific set of serializers
- #from autobahn.wamp.serializer import *
- #serializers = []
- ##serializers.append(JsonSerializer(batched = True))
- ##serializers.append(MsgPackSerializer(batched = True))
- #serializers.append(JsonSerializer())
- ##serializers.append(MsgPackSerializer())
- serializers = None
-
- ## 2) create a WAMP-over-WebSocket transport client factory
+ # create a WAMP-over-WebSocket transport client factory
transport_factory = WampWebSocketClientFactory(
session_factory,
url = WSClientConf["url"],
- serializers = serializers,
+ serializers = [MsgPackSerializer()],
debug = False,
debug_wamp = False)
- ## 3) start the client from a Twisted endpoint
+ # start the client from a Twisted endpoint
conn = connectWS(transport_factory)
- print "WAMP clien connecting to :",WSClientConf["url"]
+ print "WAMP client connecting to :",WSClientConf["url"]
return conn
def GetSession():