DDS Openslice:如何在python中创建侦听器

2024-05-13 02:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用ADLINK的OpenSplice和他们的Python API。我似乎找不到好的文档或类参考。我想设置一种非阻塞方式来接收多条消息。他们的侦听器似乎提供了这一点,但不清楚如何在python中设置它

他们的DDS教程给出了一个C示例:

class TempSensorListener :
   public dds::sub::NoOpDataReaderListener<tutorial::TempSensorType>
   {
      public:
      virtual void on_data_available(dds::sub::DataReader<tutorial::TempSensorType>& dr)
      {
         ...
      });
   }
};

TempSensorListener listener;
dr.listener(&listener, dds::core::status::StatusMask::data_available()); 

这似乎表明datareceiver有一个“listener”方法,用于将侦听器分配给datareader

如何使用Python API实现这一点?我似乎无法从python datareceiver中找到侦听器方法

提供的Python示例(example1.py和example2.py)提供了

# Data available listener
class DataAvailableListener(Listener):
    def __init__(self):
        Listener.__init__(self)

    def on_data_available(self, entity):
        print('on_data_available called')
        l = entity.read(10)
        for (sd, si) in l:
            sd.print_vars()

但是我没有看到这个类的实例化。该示例似乎使用Waitset,而根本不使用侦听器

我期望的是:

listener = DataAvailableListener()
reader.listener(listener)

reader确实有一个名为listener的属性。我将对象指定给该属性,但它似乎没有任何效果


Tags: selfapi示例dataonpublictutorialclass
1条回答
网友
1楼 · 发布于 2024-05-13 02:45:19

我如何找到与6.10.4相同问题的解决方案:

参考dds包(包含在$OSPL_HOME/tools/python/docs/html/dds.html中)中的文档,可以使用Subscriber类的create_datareader方法设置侦听器:

from dds import *
from foo import foo_type # idlpp generated module/class

# Data available listener
class DataAvailableListener(Listener):
    def __init__(self):
        Listener.__init__(self)

    def on_data_available(self, entity):
        print('on_data_available called')
        l = entity.read(10)
        for (sd, si) in l:
            sd.print_vars()

dp = DomainParticipant()
topic = dp.create_topic('foo_topic',foo_type)
sub = dp.create_subscriber()
sub.create_datareader(topic,listener=DataAvailableListener())

相关问题 更多 >