コード例 #1
0
    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))
コード例 #2
0
ファイル: set.py プロジェクト: OlyaT/FunFic
    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)
コード例 #3
0
    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),
        )
コード例 #4
0
ファイル: set.py プロジェクト: LifeDJIK/S.H.I.V.A.
    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)