#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
from twisted.internet.protocol import ReconnectingClientFactory
ExposedCalls = ["StartPLC",
def Callee(*args,**kwargs):
return getattr(_PySrv.plcobj, name)(*args,**kwargs)
class WampSession(wamp.ApplicationSession):
def onJoin(self, details):
print 'WAMP session joined by :', self.config.extra["ID"]
for name in ExposedCalls:
reg = yield self.register(MakeCallee(name), name)
def onLeave(self, details):
print 'WAMP session left'
class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
def clientConnectionFailed(self, connector, reason):
print("WAMP Client connection failed .. retrying ..")
def clientConnectionLost(self, connector, reason):
print("WAMP Client connection lost .. retrying ..")
def RegisterWampClient(wampconf):
WSClientConf = json.load(open(wampconf))
## start logging to console
# log.startLogging(sys.stdout)
# create a WAMP application session factory
component_config = types.ComponentConfig(
realm = WSClientConf["realm"],
extra = {"ID":WSClientConf["ID"]})
session_factory = wamp.ApplicationSessionFactory(
config = component_config)
session_factory.session = WampSession
# create a WAMP-over-WebSocket transport client factory
transport_factory = ReconnectingWampWebSocketClientFactory(
url = WSClientConf["url"],
serializers = [MsgPackSerializer()],
# start the client from a Twisted endpoint
conn = connectWS(transport_factory)
print "WAMP client connecting to :",WSClientConf["url"]