Fast-DDS-python icon indicating copy to clipboard operation
Fast-DDS-python copied to clipboard

Prompt [PARTICIPANT Error] error

Open 1130164523 opened this issue 2 years ago • 0 comments

I would like to use the "contentfilteredtopic" feature. Here is my test code. Could you please tell me where I went wrong? Here is the full error message: 2023-06-10 16:01:28.942 [DDSSQLFILTER Error] No TypeObject found for type HelloWorldtype -> Function eprosima::fastdds::dds::DDSSQLFilter::DDSFilterFactory::create_content_filter 2023-06-10 16:01:28.942 [PARTICIPANT Error] Could not create filter of class DDSSQL for expression "index > 5 -> Function eprosima::fastdds::dds::DomainParticipantImpl::create_contentfilteredtopic

Here is the full code: ` import asyncio import os import argparse import time from ctypes import byref from threading import Condition

if os.name == 'nt': import win32api

win32api.LoadLibrary('HelloWorld')

import fastdds import HelloWorld

class ReaderListener(fastdds.DataReaderListener): def init(self, callback): super().init() self._callback = callback

def on_data_available(self, reader):
    info = fastdds.SampleInfo()
    data = HelloWorld.HelloWorld()
    reader.take_next_sample(data, info)
    self._callback.put_nowait(f"Received {data.message()} {data.index()}")

def on_subscription_matched(self, datareader, info):
    print(f"ReaderListener info.current_count_change {info.current_count_change}")
    if (0 < info.current_count_change):
        print("Subscribers matching Publishers {}\r\n".format(info.last_publication_handle))
    else:
        print("Publisher with mismatched subscribers {}\r\n".format(info.last_publication_handle))

class Reader(): def init(self, domain=0, callback=None): factory = fastdds.DomainParticipantFactory.get_instance() self.participant_qos = fastdds.DomainParticipantQos() factory.get_default_participant_qos(self.participant_qos) self.participant = factory.create_participant(domain, self.participant_qos)

    self.topic_data_type = HelloWorld.HelloWorldPubSubType()
    self.topic_data_type.setName("HelloWorldtype")
    self.type_support = fastdds.TypeSupport(self.topic_data_type)
    self.participant.register_type(self.type_support)


    self.topic_qos2 = fastdds.TopicQos()
    self.participant.get_default_topic_qos(self.topic_qos2)
    self.topic2 = self.participant.create_topic("HelloWorldTopic2", "HelloWorldtype", self.topic_qos2)


    self.filter_topic =self.participant.create_contentfilteredtopic("FilteredTopic", self.topic2,r"index > 5", [])

    self.subscriber_qos = fastdds. SubscriberQos()
    self.participant.get_default_subscriber_qos(self.subscriber_qos)
    self.subscriber = self.participant.create_subscriber(self.subscriber_qos)

    self.listener2 = ReaderListener(callback)
    self.reader_qos2 = fastdds.DataReaderQos()
    self.subscriber.get_default_datareader_qos(self.reader_qos2)
    self.reader = self.subscriber.create_datareader(self.filter_topic, self.reader_qos2, self.listener2)

def __del__(self):
    factory = fastdds.DomainParticipantFactory.get_instance()
    self.participant.delete_contained_entities()
    factory.delete_participant(self.participant)

import asyncio.queues

async def task_handler(_queue):

while True:
    try:

        eventobj = await _queue.get()
        print(eventobj)
        _queue.task_done()
    except Exception as e:
        print(e)

async def msg(info): print(11)

if name == 'main': async def main(): try: _queue = asyncio.Queue() bb = Reader(callback=_queue) asyncio.create_task(task_handler(_queue)) while 1: await asyncio.sleep(1) except Exception as e: print(e)

    del bb


asyncio.run(main())

`

1130164523 avatar Jun 10 '23 08:06 1130164523