# Project name: SmartehIDE
# __init__.py.py: spacer widget module initialization
# 19. 01. 2017 12:24 Uporabnik
# Copyright (c) 2017 Smarteh d.o.o. <info@smarteh.si>
# THIS PROGRAM COMES WITH NO WARRANTY
from autobahn.twisted import wamp
from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
from autobahn.wamp import types
from autobahn.wamp import auth
from autobahn.wamp.serializer import MsgPackSerializer
import connectors.WAMP as WAMP
from connectors.WAMP import WAMP_connector_factory, WampSession
from threading import _sleep
class MWWampSession(WampSession):
self.join(u"Automation", [u"wampcra"], USER)
print "CRA checking init ..."
def onChallenge(self, challenge):
if challenge.method == u"wampcra":
key = PASSWORDS[USER].encode('utf8')
key = auth.derive_key(key, "salt123", 100, 16)
signature = auth.compute_wcs(key, challenge.extra['challenge'].encode('utf8'))
return signature.decode('ascii')
raise Exception("don't know how to handle authmethod {}".format(challenge.method))
def onLeave(self, details):
global _WampSession, _WampSessionEvent
_WampSessionEvent.clear()
print 'WAMP session left'
DefalutWAMP_connector_factory = WAMP_connector_factory
def MWRegisterWampClient(realm, ID, url, confnodesroot):
## start logging to console
# log.startLogging(sys.stdout)
# create a WAMP application session factory
component_config = types.ComponentConfig(
session_factory = wamp.ApplicationSessionFactory(
config = component_config)
session_factory.session = MWWampSession
# create a WAMP-over-WebSocket transport client factory
transport_factory = WampWebSocketClientFactory(
serializers = [MsgPackSerializer()])
# settings autoPing in seconds
#transport_factory.autoPingInterval = 60
#transport_factory.autoPingTimeout = 20
# start the client from a Twisted endpoint
conn = connectWS(transport_factory)
confnodesroot.logger.write(_("WAMP connecting to URL : %s\n")%url)
def MWWAMP_connector_factory(uri, confnodesroot):
def CustomFunctionCall(self, funcname, args=None):
member = self.__dict__.get(funcname, None)
member = WampSessionProcMapper(funcname)
self.__dict__[funcname] = member
WAMP.RegisterWampClient = MWRegisterWampClient
WAMP.WampSession = MWWampSession
wamp_connector = DefalutWAMP_connector_factory(uri, confnodesroot)
wamp_connector.CustomFunctionCall = CustomFunctionCall