def add_listener(self, include_value=False, item_added_func=None, item_removed_func=None): """ Adds an item listener for this container. Listener will be notified for all container add/remove events. :param include_value: (bool), whether received events include the updated item or not (optional). :param item_added_func: Function to be called when an item is added to this set (optional). :param item_removed_func: Function to be called when an item is deleted from this set (optional). :return: (str), a registration id which is used as a key to remove the listener. """ request = set_add_listener_codec.encode_request( self.name, include_value, self._is_smart) def handle_event_item(item, uuid, event_type): item = item if include_value else None member = self._context.cluster_service.get_member(uuid) item_event = ItemEvent(self.name, item, event_type, member, self._to_object) if event_type == ItemEventType.added: if item_added_func: item_added_func(item_event) else: if item_removed_func: item_removed_func(item_event) return self._register_listener( request, lambda r: set_add_listener_codec.decode_response(r), lambda reg_id: set_remove_listener_codec.encode_request( self.name, reg_id), lambda m: set_add_listener_codec.handle(m, handle_event_item))
def add_listener(self, include_value=False, item_added=None, item_removed=None): request = set_add_listener_codec.encode_request( self.name, include_value, False) def handle_event_item(item, uuid, event_type): item = item if include_value else None member = self._client.cluster.get_member_by_uuid(uuid) item_event = ItemEvent(self.name, item, event_type, member, self._to_object) if event_type == ItemEventType.added: if item_added: item_added(item_event) else: if item_removed: item_removed(item_event) return self._start_listening( request, lambda m: set_add_listener_codec.handle(m, handle_event_item), lambda r: set_add_listener_codec.decode_response(r)['response'], self.partition_key)
def add_listener( self, include_value: bool = False, item_added_func: typing.Callable[[ItemEvent[ItemType]], None] = None, item_removed_func: typing.Callable[[ItemEvent[ItemType]], None] = None, ) -> Future[str]: """Adds an item listener for this container. Listener will be notified for all container add/remove events. Args: include_value: Whether received events include the updated item or not. item_added_func: Function to be called when an item is added to this set. item_removed_func: Function to be called when an item is deleted from this set. Returns: A registration id which is used as a key to remove the listener. """ request = set_add_listener_codec.encode_request( self.name, include_value, self._is_smart) def handle_event_item(item_data, uuid, event_type): item = self._to_object(item_data) if include_value else None member = self._context.cluster_service.get_member(uuid) item_event = ItemEvent(self.name, item, event_type, member) if event_type == ItemEventType.ADDED: if item_added_func: item_added_func(item_event) else: if item_removed_func: item_removed_func(item_event) return self._register_listener( request, lambda r: set_add_listener_codec.decode_response(r), lambda reg_id: set_remove_listener_codec.encode_request( self.name, reg_id), lambda m: set_add_listener_codec.handle(m, handle_event_item), )
def add_listener(self, include_value=False, item_added=None, item_removed=None): request = set_add_listener_codec.encode_request(self.name, include_value, False) def handle_event_item(item, uuid, event_type): item = item if include_value else None member = self._client.cluster.get_member_by_uuid(uuid) item_event = ItemEvent(self.name, item, event_type, member, self._to_object) if event_type == ItemEventType.added: if item_added: item_added(item_event) else: if item_removed: item_removed(item_event) return self._start_listening(request, lambda m: set_add_listener_codec.handle(m, handle_event_item), lambda r: set_add_listener_codec.decode_response(r)['response'], self.partition_key)