# HG changeset patch # User dporopat # Date 1524040953 -7200 # Node ID 4e511f5aad196ecb687e2336ccb98bea1fbc65ae # Parent 6417f5b59eff48437e75dde4bd1b0f61e9c806fb #2486 Added global TransportFactory, needed in WebInterface reconnecting function. diff -r 6417f5b59eff -r 4e511f5aad19 runtime/WampClient.py --- a/runtime/WampClient.py Wed Apr 18 10:40:16 2018 +0200 +++ b/runtime/WampClient.py Wed Apr 18 10:42:33 2018 +0200 @@ -27,6 +27,7 @@ import time import json import inspect +import re from autobahn.twisted import wamp from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS from autobahn.wamp import types, auth @@ -35,6 +36,7 @@ from twisted.internet.protocol import ReconnectingClientFactory +_transportFactory = None _WampSession = None _PySrv = None @@ -132,13 +134,16 @@ print(_('WAMP session joined (%s) by:' % time.ctime()), ID) def onLeave(self, details): - global _WampSession + global _WampSession, _transportFactory + super(WampSession, self).onLeave(details) _WampSession = None + _transportFactory = None print(_('WAMP session left')) class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory): def __init__(self, config, *args, **kwargs): + global _transportFactory WampWebSocketClientFactory.__init__(self, *args, **kwargs) protocolOptions = config.extra.get('protocolOptions', None) @@ -148,18 +153,25 @@ if validProtocolOptions: self.setProtocolOptions(**validProtocolOptions) #print(_("Added custom protocol options")) + _transportFactory = self def buildProtocol(self, addr): self.resetDelay() return ReconnectingClientFactory.buildProtocol(self, addr) def clientConnectionFailed(self, connector, reason): - print(_("WAMP Client connection failed (%s) .. retrying .." % time.ctime())) - ReconnectingClientFactory.clientConnectionFailed(self, connector, reason) + if self.continueTrying: + print(_("WAMP Client connection failed (%s) .. retrying .." % time.ctime())) + super(ReconnectingWampWebSocketClientFactory, self).clientConnectionFailed(connector, reason) + else: + del connector def clientConnectionLost(self, connector, reason): - print(_("WAMP Client connection lost (%s) .. retrying .." % time.ctime())) - ReconnectingClientFactory.clientConnectionFailed(self, connector, reason) + if self.continueTrying: + print(_("WAMP Client connection lost (%s) .. retrying .." % time.ctime())) + super(ReconnectingWampWebSocketClientFactory, self).clientConnectionFailed(connector, reason) + else: + del connector def LoadWampClientConf(wampconf): @@ -184,13 +196,23 @@ return None +def IsCorrectUri(uri): + if re.match(r'w{1}s{1,2}:{1}/{2}.+:{1}[0-9]+/{1}.+', uri): + return True + else: + return False + + def RegisterWampClient(wampconf, secretfname): - WSClientConf = LoadWampClientConf(wampconf) if not WSClientConf: print(_("WAMP client connection not established!")) - return + return False + + if not IsCorrectUri(WSClientConf["url"]): + print(_("WAMP url {} is not correct!".format(WSClientConf["url"]))) + return False WampSecret = LoadWampSecret(secretfname) @@ -215,10 +237,16 @@ # start the client from a Twisted endpoint conn = connectWS(transport_factory) print(_("WAMP client connecting to :"), WSClientConf["url"]) - return conn + return True # conn + + +def GetTransportFactory(): + global _transportFactory + return _transportFactory def GetSession(): + global _WampSession return _WampSession