1个publisher,2个subscriber
修改HelloWorldExample.py,让发布者定时1秒向 topicName = “myTopic”中写入数据;
class Writer:
def __init__(self, domain, machine):
self.machine = machine
self._matched_reader = 0
self._cvDiscovery = Condition()
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.publisher_qos = fastdds.PublisherQos()
self.participant.get_default_publisher_qos(self.publisher_qos)
self.publisher = self.participant.create_publisher(self.publisher_qos)
self.listener = WriterListener(self)
self.writer_qos = fastdds.DataWriterQos()
self.publisher.get_default_datawriter_qos(self.writer_qos)
self.writer = self.publisher.create_datawriter(self.topic, self.writer_qos, self.listener)
self.index = 0
def write(self):
data = HelloWorld.HelloWorld()
if self.machine:
data.message("Hello World " + self.machine)
else:
data.message("Hello World")
data.index(self.index)
self.writer.write(data)
print("Sending {message} : {index}".format(message=data.message(), index=data.index()))
self.index = self.index + 1
def __del__(self):
factory = fastdds.DomainParticipantFactory.get_instance()
self.participant.delete_contained_entities()
factory.delete_participant(self.participant)
def run(self):
self.wait_discovery()
# for x in range(10) :
while True:
time.sleep(1)
self.write()
def wait_discovery(self) :
self._cvDiscovery.acquire()
print ("Writer is waiting discovery...")
self._cvDiscovery.wait_for(lambda : self._matched_reader != 0)
self._cvDiscovery.release()
print("Writer discovery finished...")
启动一个发布端,两个订阅端。
当发布端和订阅端匹配上后,发布端开始发数据,订阅端1开始接收数据,当订阅端2启动后,同样可以接收myTopic的数据,历史数据没有,仅接收到订阅匹配后发布端发出的数据。
-
1个publisher,1个subscriber(2个DataReader)
一个subscriber例化两个DataReader,两个DataReader的ReaderListener新增编号作为区别
class Reader():
def __init__(self, domain):
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.subscriber_qos = fastdds.SubscriberQos()
self.participant.get_default_subscriber_qos(self.subscriber_qos)
self.subscriber = self.participant.create_subscriber(self.subscriber_qos)
self.listener = ReaderListener(1)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reader = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener)
self.listener1 = ReaderListener(2)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reader1 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener1)
class Reader():
def __init__(self, domain):
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.subscriber_qos = fastdds.SubscriberQos()
self.participant.get_default_subscriber_qos(self.subscriber_qos)
self.subscriber = self.participant.create_subscriber(self.subscriber_qos)
self.listener = ReaderListener(1)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reader = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener)
self.listener1 = ReaderListener(2)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reader1 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener1)
启动一个发布端,然后启动一个订阅端,订阅端包括两个DataReader
-
1个publisher,2个topic,subscriber只订阅一个topic
发布端的participant 创建两个topic 分别为 "myTopic"和“myTestTopic”,并为每个topic创建一个DataWriter,两个topic共用同一个数据类型。订阅端分别订阅两个topic。
订阅端订阅 topic = “myTopic”
发布端
class Writer:
def __init__(self, domain, machine):
self.machine = machine
self._matched_reader = 0
self._cvDiscovery = Condition()
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic1 = self.participant.create_topic("myTestTopic", self.topic_data_type.getName(), self.topic_qos)
self.publisher_qos = fastdds.PublisherQos()
self.participant.get_default_publisher_qos(self.publisher_qos)
self.publisher = self.participant.create_publisher(self.publisher_qos)
self.listener = WriterListener(self)
self.writer_qos = fastdds.DataWriterQos()
self.publisher.get_default_datawriter_qos(self.writer_qos)
self.writer = self.publisher.create_datawriter(self.topic, self.writer_qos, self.listener)
self.writer1 = self.publisher.create_datawriter(self.topic1, self.writer_qos, self.listener)
self.index = 0
def write(self):
data = HelloWorld.HelloWorld()
if self.machine:
data.message("Hello World " + self.machine)
else:
data.message("Hello World" + " from myTopic")
data.index(self.index)
self.writer.write(data)
print("Sending {message} : {index}".format(message=data.message(), index=data.index()))
self.index = self.index + 1
def write1(self):
data = HelloWorld.HelloWorld()
if self.machine:
data.message("Hello World " + self.machine)
else:
data.message("Hello World" + " from myTestTopic")
data.index(self.index)
self.writer1.write(data)
print("Sending {message} : {index}".format(message=data.message(), index=data.index()))
self.index = self.index + 1
def __del__(self):
factory = fastdds.DomainParticipantFactory.get_instance()
self.participant.delete_contained_entities()
factory.delete_participant(self.participant)
def run(self):
self.wait_discovery()
# for x in range(10) :
while True:
time.sleep(1)
self.write()
self.write1()
def wait_discovery(self) :
self._cvDiscovery.acquire()
print ("Writer is waiting discovery...")
self._cvDiscovery.wait_for(lambda : self._matched_reader != 0)
self._cvDiscovery.release()
print("Writer discovery finished...")
订阅端
class Reader():
def __init__(self, domain):
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.subscriber_qos = fastdds.SubscriberQos()
self.participant.get_default_subscriber_qos(self.subscriber_qos)
self.subscriber = self.participant.create_subscriber(self.subscriber_qos)
self.listener1 = ReaderListener(1)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reade1 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener1)
def __del__(self):
factory = fastdds.DomainParticipantFactory.get_instance()
self.participant.delete_contained_entities()
factory.delete_participant(self.participant)
def run(self):
try:
input('Press any key to stop')
except:
pass
订阅端订阅 topic = “myTestTopic”
订阅端代码
class Reader():
def __init__(self, domain):
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTestTopic", self.topic_data_type.getName(), self.topic_qos)
self.subscriber_qos = fastdds.SubscriberQos()
self.participant.get_default_subscriber_qos(self.subscriber_qos)
self.subscriber = self.participant.create_subscriber(self.subscriber_qos)
self.listener1 = ReaderListener(1)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reade1 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener1)
# self.listener2 = ReaderListener(2)
# self.reader_qos = fastdds.DataReaderQos()
# self.subscriber.get_default_datareader_qos(self.reader_qos)
# self.reader2 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener2)
def __del__(self):
factory = fastdds.DomainParticipantFactory.get_instance()
self.participant.delete_contained_entities()
factory.delete_participant(self.participant)
def run(self):
try:
input('Press any key to stop')
except:
pass
-
1个publisher,2个topic,subscriber订阅2个topic
class Reader():
def __init__(self, domain):
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("HelloWorldDataType")
self.type_support = fastdds.TypeSupport(self.topic_data_type)
self.participant.register_type(self.type_support)
self.topic_qos = fastdds.TopicQos()
self.participant.get_default_topic_qos(self.topic_qos)
self.topic = self.participant.create_topic("myTopic", self.topic_data_type.getName(), self.topic_qos)
self.topic1 = self.participant.create_topic("myTestTopic", self.topic_data_type.getName(), self.topic_qos)
self.subscriber_qos = fastdds.SubscriberQos()
self.participant.get_default_subscriber_qos(self.subscriber_qos)
self.subscriber = self.participant.create_subscriber(self.subscriber_qos)
self.listener1 = ReaderListener(1)
self.reader_qos = fastdds.DataReaderQos()
self.subscriber.get_default_datareader_qos(self.reader_qos)
self.reader1 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener1)
self.reader2 = self.subscriber.create_datareader(self.topic1, self.reader_qos, self.listener1)
# self.listener2 = ReaderListener(2)
# self.reader_qos = fastdds.DataReaderQos()
# self.subscriber.get_default_datareader_qos(self.reader_qos)
# self.reader2 = self.subscriber.create_datareader(self.topic, self.reader_qos, self.listener2)
def __del__(self):
factory = fastdds.DomainParticipantFactory.get_instance()
self.participant.delete_contained_entities()
factory.delete_participant(self.participant)
def run(self):
try:
input('Press any key to stop')
except:
pass