コード例 #1
0
ファイル: PTMHub.py プロジェクト: tubav/teagle
class PTMHub(BaseManager):
	def __init__(self, *args, **kw):
		super(PTMHub, self).__init__(*args, **kw)
		self.__shadow_manager = ShadowManager(client = self)
		self.__subscription_manager = SubscriptionManager()
		self.__notification_manager = NotificationManager(registry = self.registry)
		
	def get_method_dispatcher(self):
		return HubMethodDispatcher(self)
		
	def __check_resolvable(self, owner):
		self.get_adapter(owner)
		
	def __mangle_notify_args(self, condition, owner, reference):
		if not owner:
			raise InternalIllegalArgumentError(owner)
		return (NotificationId(condition), Identifier(owner, need_abs = True), Identifier(reference, need_abs = True))
		
	def do_subscribe(self, condition, owner, reference):
		self.__check_resolvable(owner)
		self.__subscription_manager.add_subscription(*self.__mangle_notify_args(condition, owner, reference))
		
	def do_unsubscribe(self, condition, owner, reference):
		self.__subscription_manager.remove_subscription(*self.__mangle_notify_args(condition, owner, reference))
		
	def do_notify(self, condition, owner, reference):
		(condition, owner, reference) = self.__mangle_notify_args(condition, owner, reference)
		self.__do_notify(condition, owner, reference)
		
	def __do_notify(self, condition, owner, reference):
		if DELETED in condition:
			condition = DELETED
		self.__notification_manager.notify(condition, owner, reference)
		
	def do_signal(self, condition, reference):
		(condition, _, reference) = self.__mangle_notify_args(condition, "/", reference)
		subscribers = self.__subscription_manager.get_subscribers(condition, reference)
		for s in subscribers:
			try:
				self.do_notify(condition, s, reference)
			except:
				logger.exception("notify failed")
	
	def do_register(self, identifier, payload):
		payload = self.__shadow_manager.get_shadow(payload)
		super(PTMHub, self).do_register(identifier, payload)
		
	def register_adapter(self, identifier, adapter):
		if not isinstance(adapter, AbstractResourceAdapter):
			raise TypeError("Need an instance of ResourceAdapter here. Got: " + str(adapter))
		super(PTMHub, self).do_register(identifier, adapter)
コード例 #2
0
ファイル: PTMHub.py プロジェクト: tubav/teagle
	def __init__(self, *args, **kw):
		super(PTMHub, self).__init__(*args, **kw)
		self.__shadow_manager = ShadowManager(client = self)
		self.__subscription_manager = SubscriptionManager()
		self.__notification_manager = NotificationManager(registry = self.registry)