Ejemplo n.º 1
0
    def testRoundtrip(self):

        goodScope = Scope("/good")

        inconnector = self._getInPushConnector(goodScope)
        outconnector = self._getOutConnector(goodScope)

        receiver = SettingReceiver(goodScope)
        inconnector.setObserverAction(receiver)

        # first an event that we do not want
        event = Event(EventId(uuid.uuid4(), 0))
        event.scope = Scope("/notGood")
        event.data = "dummy data"
        event.type = str
        event.metaData.senderId = uuid.uuid4()
        outconnector.handle(event)

        # and then a desired event
        event.scope = goodScope
        outconnector.handle(event)

        with receiver.resultCondition:
            while receiver.resultEvent is None:
                receiver.resultCondition.wait(10)
            self.assertTrue(receiver.resultEvent)
            # ignore meta data here
            event.setMetaData(None)
            receiver.resultEvent.setMetaData(None)
            self.assertEqual(receiver.resultEvent, event)

        inconnector.deactivate()
        outconnector.deactivate()
Ejemplo n.º 2
0
    def testPullRoundtrip(self):

        goodScope = Scope("/good")

        try:
            inconnector = self._getInPullConnector(goodScope)
        except NotImplementedError:
            return
        outconnector = self._getOutConnector(goodScope)

        # first an event that we do not want
        event = Event(EventId(uuid.uuid4(), 0))
        event.scope = Scope("/notGood")
        event.data = "dummy data"
        event.type = str
        event.metaData.senderId = uuid.uuid4()
        outconnector.handle(event)

        # and then a desired event
        event.scope = goodScope
        outconnector.handle(event)

        received = inconnector.raiseEvent(True)
        # ignore meta data here
        event.setMetaData(None)
        received.setMetaData(None)
        self.assertEqual(received, event)

        inconnector.deactivate()
        outconnector.deactivate()
Ejemplo n.º 3
0
    def publish_cache(self):
        self.__logger.debug("[{}] Publishing cache... ({} total)".format(
            self.__authority,
            len(self.__send_cache_dynamic.keys()) +
            len(self.__send_cache_static.keys())))
        for _, v in self.__send_cache_dynamic.iteritems():
            event = Event()
            event.setData(v[0])
            event.setType(type(v[0]))
            event.setScope(self.__rsb_informer_transform.getScope().concat(
                Scope(self.__scope_suffix_dynamic)))
            event.setMetaData(v[1])
            self.__rsb_informer_transform.publishEvent(event)

        for _, v in self.__send_cache_static.iteritems():
            event = Event()
            event.setData(v[0])
            event.setType(type(v[0]))
            event.setScope(self.__rsb_informer_transform.getScope().concat(
                Scope(self.__scope_suffix_static)))
            event.setMetaData(v[1])
            self.__rsb_informer_transform.publishEvent(event)
Ejemplo n.º 4
0
    def send_transform(self, transform, transform_type):
        '''
        Add transform information to the rct data structure.
        :param transform:
        :param transform_type:
        :return: True unless an error occured
        '''

        if not self.__rsb_informer_transform:
            self.__logger.error(
                "[{}] RSB communicator was not initialized!".format(
                    self.__authority))

        # some small type checks for usability
        assert isinstance(
            transform, Transform
        ), "Input transformation has to be of type rct.Transform! (Input was: {})".format(
            type(transform))
        assert hasattr(
            TransformType, transform_type
        ), "Input transformation type has to be of type rct.TransformType! (Input was: {})".format(
            type(transform_type))

        cache_key = transform.get_frame_parent() + transform.get_frame_child()
        meta_data = MetaData()

        if transform.get_authority() is "":
            meta_data.setUserInfo(self.__user_key_authority, self.__authority)
        else:
            meta_data.setUserInfo(self.__user_key_authority,
                                  transform.get_authority())

        self.__logger.info("[{}] Publishing transform from {}".format(
            self.__authority, self.__rsb_informer_transform.getId()))

        # TODO: threaded?
        event = Event()
        event.setData(transform)
        event.setType(type(transform))
        event.setMetaData(meta_data)

        if transform_type is TransformType.STATIC:
            self.__send_cache_static[cache_key] = (transform, meta_data)
            event.setScope(self.__rsb_informer_transform.getScope().concat(
                Scope(self.__scope_suffix_static)))

        elif transform_type is TransformType.DYNAMIC:
            self.__send_cache_dynamic[cache_key] = (transform, meta_data)
            event.setScope(self.__rsb_informer_transform.getScope().concat(
                Scope(self.__scope_suffix_dynamic)))

        else:
            self.__logger.error(
                "[{}] Cannot send transform. Reason: Unknown TransformType: {}"
                .format(self.__authority, str(transform_type)))
            return False

        self.__logger.info("[{}] Sending {} to scope {}".format(
            self.__authority, transform.__str__(), event.getScope()))
        self.__rsb_informer_transform.publishEvent(event)
        self.__logger.debug("[{}] Sending successful!".format(
            self.__authority))

        return True