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());
これは、データレシーバーに、リスナーをデータリーダーに割り当てるために使用される「リスナー」メソッドがあることを示しているようです。
これは 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)
リーダーにはリスナーと呼ばれる属性があります。オブジェクトをその属性に割り当てましたが、効果がないようです。