class Router: """ Basic WAMP router. This class implements :class:`autobahn.wamp.interfaces.IRouter`. """ def __init__(self, factory, realm, options = None): """ Ctor. :param factory: The router factory this router was created by. :type factory: Object that implements :class:`autobahn.wamp.interfaces.IRouterFactory`.. :param realm: The realm this router is working for. :type realm: str :param options: Router options. :type options: Instance of :class:`autobahn.wamp.types.RouterOptions`. """ self.factory = factory self.realm = realm self._options = options or types.RouterOptions() self._broker = Broker(realm, self._options) self._dealer = Dealer(realm, self._options) self._attached = 0 def attach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.attach` """ self._broker.attach(session) self._dealer.attach(session) self._attached += 1 return [self._broker._role_features, self._dealer._role_features] def detach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.detach` """ self._broker.detach(session) self._dealer.detach(session) self._attached -= 1 if not self._attached: self.factory.onLastDetach(self) def process(self, session, msg): """ Implements :func:`autobahn.wamp.interfaces.IRouter.process` """ ## Broker ## if isinstance(msg, message.Publish): self._broker.processPublish(session, msg) elif isinstance(msg, message.Subscribe): self._broker.processSubscribe(session, msg) elif isinstance(msg, message.Unsubscribe): self._broker.processUnsubscribe(session, msg) ## Dealer ## elif isinstance(msg, message.Register): self._dealer.processRegister(session, msg) elif isinstance(msg, message.Unregister): self._dealer.processUnregister(session, msg) elif isinstance(msg, message.Call): self._dealer.processCall(session, msg) elif isinstance(msg, message.Cancel): self._dealer.processCancel(session, msg) elif isinstance(msg, message.Yield): self._dealer.processYield(session, msg) elif isinstance(msg, message.Error) and msg.request_type == message.Invocation.MESSAGE_TYPE: self._dealer.processInvocationError(session, msg) else: raise ProtocolError("Unexpected message {}".format(msg.__class__))
class Router: """ Basic WAMP router. This class implements :class:`autobahn.wamp.interfaces.IRouter`. """ def __init__(self, factory, realm, options=None): """ Ctor. :param factory: The router factory this router was created by. :type factory: Object that implements :class:`autobahn.wamp.interfaces.IRouterFactory`.. :param realm: The realm this router is working for. :type realm: str :param options: Router options. :type options: Instance of :class:`autobahn.wamp.types.RouterOptions`. """ self.debug = False self.factory = factory self.realm = realm self._options = options or types.RouterOptions() self._broker = Broker(realm, self._options) self._dealer = Dealer(realm, self._options) self._attached = 0 def attach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.attach` """ self._broker.attach(session) self._dealer.attach(session) self._attached += 1 return [self._broker._role_features, self._dealer._role_features] def detach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.detach` """ self._broker.detach(session) self._dealer.detach(session) self._attached -= 1 if not self._attached: self.factory.onLastDetach(self) def process(self, session, msg): """ Implements :func:`autobahn.wamp.interfaces.IRouter.process` """ if self.debug: print("Router.process: {}".format(msg)) ## Broker ## if isinstance(msg, message.Publish): self._broker.processPublish(session, msg) elif isinstance(msg, message.Subscribe): self._broker.processSubscribe(session, msg) elif isinstance(msg, message.Unsubscribe): self._broker.processUnsubscribe(session, msg) ## Dealer ## elif isinstance(msg, message.Register): self._dealer.processRegister(session, msg) elif isinstance(msg, message.Unregister): self._dealer.processUnregister(session, msg) elif isinstance(msg, message.Call): self._dealer.processCall(session, msg) elif isinstance(msg, message.Cancel): self._dealer.processCancel(session, msg) elif isinstance(msg, message.Yield): self._dealer.processYield(session, msg) elif isinstance( msg, message.Error ) and msg.request_type == message.Invocation.MESSAGE_TYPE: self._dealer.processInvocationError(session, msg) else: raise ProtocolError("Unexpected message {}".format(msg.__class__))
class Router: """ Basic WAMP router. This class implements :class:`autobahn.wamp.interfaces.IRouter`. """ def __init__(self, factory, realm): self.factory = factory self.realm = realm self._broker = Broker(realm) self._dealer = Dealer(realm) self._attached = 0 def attach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.attach` """ self._broker.attach(session) self._dealer.attach(session) self._attached += 1 return [self._broker._role_features, self._dealer._role_features] def detach(self, session): """ Implements :func:`autobahn.wamp.interfaces.IRouter.detach` """ self._broker.detach(session) self._dealer.detach(session) self._attached -= 1 if not self._attached: self.factory.onLastDetach(self) def process(self, session, msg): """ Implements :func:`autobahn.wamp.interfaces.IRouter.process` """ ## Broker ## if isinstance(msg, message.Publish): self._broker.processPublish(session, msg) elif isinstance(msg, message.Subscribe): self._broker.processSubscribe(session, msg) elif isinstance(msg, message.Unsubscribe): self._broker.processUnsubscribe(session, msg) ## Dealer ## elif isinstance(msg, message.Register): self._dealer.processRegister(session, msg) elif isinstance(msg, message.Unregister): self._dealer.processUnregister(session, msg) elif isinstance(msg, message.Call): self._dealer.processCall(session, msg) elif isinstance(msg, message.Cancel): self._dealer.processCancel(session, msg) elif isinstance(msg, message.Yield): self._dealer.processYield(session, msg) elif isinstance(msg, message.Error) and msg.request_type == message.Invocation.MESSAGE_TYPE: self._dealer.processInvocationError(session, msg) else: raise ProtocolError("Unexpected message {}".format(msg.__class__))