|
- #include "hello_world_publisher.hpp"
- #include <iostream>
- #include <thread>
-
- HelloWorldPublisher::PubListener::PubListener()
- : matched_(0)
- {
- }
-
- HelloWorldPublisher::PubListener::~PubListener()
- {
- }
-
- void HelloWorldPublisher::PubListener::on_publication_matched(
- DataWriter*,
- const PublicationMatchedStatus& info)
- {
- if (info.current_count_change == 1)
- {
- matched_ = info.total_count;
- std::cout << "Publisher matched." << std::endl;
- }
- else if (info.current_count_change == -1)
- {
- matched_ = info.total_count;
- std::cout << "Publisher unmatched." << std::endl;
- }
- else
- {
- std::cout << info.current_count_change
- << " is not a valid value for PublicationMatchedStatus current count change." << std::endl;
- }
- }
-
- HelloWorldPublisher::HelloWorldPublisher()
- : participant_(nullptr)
- , publisher_(nullptr)
- , topic_(nullptr)
- , writer_(nullptr)
- , type_(new HelloWorldPubSubType())
- {
- }
-
- HelloWorldPublisher::~HelloWorldPublisher()
- {
- if (writer_ != nullptr)
- {
- publisher_->delete_datawriter(writer_);
- }
- if (publisher_ != nullptr)
- {
- participant_->delete_publisher(publisher_);
- }
- if (topic_ != nullptr)
- {
- participant_->delete_topic(topic_);
- }
- DomainParticipantFactory::get_instance()->delete_participant(participant_);
- }
-
- bool HelloWorldPublisher::init()
- {
- hello_.index(0);
- hello_.message("HelloWorld");
-
- DomainParticipantQos participantQos;
- participantQos.name("Participant_publisher");
- participant_ = DomainParticipantFactory::get_instance()->create_participant(0, participantQos);
-
- if (participant_ == nullptr)
- {
- return false;
- }
-
- // Register the Type
- type_.register_type(participant_);
-
- // Create the publications Topic
- topic_ = participant_->create_topic("HelloWorldTopic", "HelloWorld", TOPIC_QOS_DEFAULT);
-
- if (topic_ == nullptr)
- {
- return false;
- }
-
- // Create the Publisher
- publisher_ = participant_->create_publisher(PUBLISHER_QOS_DEFAULT, nullptr);
-
- if (publisher_ == nullptr)
- {
- return false;
- }
-
- // Create the DataWriter
- writer_ = publisher_->create_datawriter(topic_, DATAWRITER_QOS_DEFAULT, &listener_);
-
- if (writer_ == nullptr)
- {
- return false;
- }
- return true;
- }
-
- bool HelloWorldPublisher::publish()
- {
- if (listener_.matched_ > 0)
- {
- hello_.index(hello_.index() + 1);
- writer_->write(&hello_);
- return true;
- }
- return false;
- }
-
- std::string HelloWorldPublisher::getCurrentMessage() const
- {
- return hello_.message();
- }
-
- int HelloWorldPublisher::getCurrentIndex() const
- {
- return hello_.index();
- }
|