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 |