runtime/WampClient.py
branch#2486
changeset 2195 2cef75d036c2
parent 2194 35d6b9321ffd
child 2196 9017e830ae70
equal deleted inserted replaced
2194:35d6b9321ffd 2195:2cef75d036c2
    24 
    24 
    25 from __future__ import absolute_import
    25 from __future__ import absolute_import
    26 from __future__ import print_function
    26 from __future__ import print_function
    27 import time
    27 import time
    28 import json
    28 import json
       
    29 import inspect
    29 from autobahn.twisted import wamp
    30 from autobahn.twisted import wamp
    30 from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
    31 from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
    31 from autobahn.wamp import types, auth
    32 from autobahn.wamp import types, auth
    32 from autobahn.wamp.serializer import MsgPackSerializer
    33 from autobahn.wamp.serializer import MsgPackSerializer
    33 from twisted.internet.defer import inlineCallbacks
    34 from twisted.internet.defer import inlineCallbacks
   108         _WampSession = None
   109         _WampSession = None
   109         print(_('WAMP session left'))
   110         print(_('WAMP session left'))
   110 
   111 
   111 
   112 
   112 class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
   113 class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
       
   114     def __init__(self, config, *args, **kwargs):
       
   115         WampWebSocketClientFactory.__init__(self, *args, **kwargs)
       
   116 
       
   117         arguments = inspect.getargspec(self.setProtocolOptions).args
       
   118         protocolOptions = config.extra.get('protocolOptions', None)
       
   119 
       
   120         validProtocolOptions = {}
       
   121 
       
   122         for key in protocolOptions:
       
   123             if key in arguments:
       
   124                 validProtocolOptions[key] = protocolOptions[key]
       
   125 
       
   126         if len(validProtocolOptions) > 0:
       
   127             self.setProtocolOptions(**validProtocolOptions)
       
   128             print(_("Added custom protocol options"))
       
   129 
       
   130         del validProtocolOptions
       
   131         del protocolOptions
       
   132 
   113     def buildProtocol(self, addr):
   133     def buildProtocol(self, addr):
   114         self.resetDelay()
   134         self.resetDelay()
   115         return ReconnectingClientFactory.buildProtocol(self, addr)
   135         return ReconnectingClientFactory.buildProtocol(self, addr)
   116 
   136 
   117     def clientConnectionFailed(self, connector, reason):
   137     def clientConnectionFailed(self, connector, reason):
   166         config=component_config)
   186         config=component_config)
   167     session_factory.session = WampSession
   187     session_factory.session = WampSession
   168 
   188 
   169     # create a WAMP-over-WebSocket transport client factory
   189     # create a WAMP-over-WebSocket transport client factory
   170     transport_factory = ReconnectingWampWebSocketClientFactory(
   190     transport_factory = ReconnectingWampWebSocketClientFactory(
       
   191         component_config,
   171         session_factory,
   192         session_factory,
   172         url=WSClientConf["url"],
   193         url=WSClientConf["url"],
   173         serializers=[MsgPackSerializer()])
   194         serializers=[MsgPackSerializer()])
   174 
   195 
   175     # start the client from a Twisted endpoint
   196     # start the client from a Twisted endpoint