Edouard@1439: #!/usr/bin/env python Edouard@1439: # -*- coding: utf-8 -*- Edouard@1439: Edouard@1439: import sys Edouard@1439: from twisted.python import log Edouard@1439: Edouard@1439: from twisted.internet import reactor, ssl Edouard@1439: from autobahn.twisted import wamp Edouard@1439: from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS Edouard@1439: from autobahn.wamp import types Edouard@1439: import json Edouard@1439: Edouard@1439: _WampSession = None Edouard@1439: _PySrv = None Edouard@1439: Edouard@1439: class WampSession(wamp.ApplicationSession): Edouard@1439: def onJoin(self, details): Edouard@1439: global _WampSession Edouard@1439: _WampSession = self Edouard@1439: print 'WAMP session joined by :', self.config.extra["ID"] Edouard@1439: Edouard@1439: def onLeave(self, details): Edouard@1439: global _WampSession Edouard@1439: _WampSession = None Edouard@1439: print 'WAMP session left' Edouard@1439: Edouard@1439: Edouard@1439: def RegisterWampClient(wampconf): Edouard@1439: Edouard@1439: WSClientConf = json.load(open(wampconf)) Edouard@1439: Edouard@1439: ## TODO log to PLC console instead Edouard@1439: ## 0) start logging to console Edouard@1439: log.startLogging(sys.stdout) Edouard@1439: Edouard@1439: ## 1) create a WAMP application session factory Edouard@1439: component_config = types.ComponentConfig( Edouard@1439: realm = WSClientConf["realm"], Edouard@1439: extra = {"ID":WSClientConf["ID"]}) Edouard@1439: session_factory = wamp.ApplicationSessionFactory( Edouard@1439: config = component_config) Edouard@1439: session_factory.session = WampSession Edouard@1439: Edouard@1439: ## TODO select optimum serializer for passing session lists Edouard@1439: ## optional: use specific set of serializers Edouard@1439: #from autobahn.wamp.serializer import * Edouard@1439: #serializers = [] Edouard@1439: ##serializers.append(JsonSerializer(batched = True)) Edouard@1439: ##serializers.append(MsgPackSerializer(batched = True)) Edouard@1439: #serializers.append(JsonSerializer()) Edouard@1439: ##serializers.append(MsgPackSerializer()) Edouard@1439: serializers = None Edouard@1439: Edouard@1439: ## 2) create a WAMP-over-WebSocket transport client factory Edouard@1439: transport_factory = WampWebSocketClientFactory( Edouard@1439: session_factory, Edouard@1439: url = WSClientConf["url"], Edouard@1439: serializers = serializers, Edouard@1439: debug = False, Edouard@1439: debug_wamp = False) Edouard@1439: Edouard@1439: ## 3) start the client from a Twisted endpoint Edouard@1439: conn = connectWS(transport_factory) Edouard@1439: print "WAMP clien connecting to :",WSClientConf["url"] Edouard@1439: return conn Edouard@1439: Edouard@1439: def GetSession(): Edouard@1439: global _WampSession Edouard@1439: return _WampSession Edouard@1439: Edouard@1439: def SetServer(pysrv): Edouard@1439: global _PySrv Edouard@1439: _PySrv = pysrv Edouard@1439: