Skip to content

Add Discovery Server setting in the UI #70

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions plugins/datastreamer_plugin/datastreamer/FastDdsDataStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,13 @@ void FastDdsDataStreamer::on_domain_connection(
connect_to_domain_(domain_id);
}

void FastDdsDataStreamer::on_server_connection(
unsigned int domain_id, const std::string& server_ip, unsigned int server_port)
{
DEBUG("FastDdsDataStreamer on_domain_connection " << domain_id);
connect_to_server_(domain_id, server_ip, server_port);
}

////////////////////////////////////////////////////
// AUXILIAR METHODS
////////////////////////////////////////////////////
Expand All @@ -260,6 +267,19 @@ void FastDdsDataStreamer::connect_to_domain_(
select_topics_dialog_.connect_to_domain(domain_id);
}

void FastDdsDataStreamer::connect_to_server_(
unsigned int domain_id, const std::string& server_ip, unsigned int server_port)
{
DEBUG("FastDdsDataStreamer connect_to_server_ " << server_ip<<":"<<server_port<<" using domain "<<domain_id);
// Reset view and handler
select_topics_dialog_.reset();
fastdds_handler_.reset();

// Connect to domain
fastdds_handler_.connect_to_server(domain_id, server_ip, server_port);
select_topics_dialog_.connect_to_server(domain_id, server_ip, server_port);
}

void FastDdsDataStreamer::create_series_()
{
// Get all series from topics and create them
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ class FastDdsDataStreamer :
virtual void on_domain_connection(
unsigned int domain_id) override;

virtual void on_server_connection(
unsigned int domain_id, const std::string& server_ip, unsigned int server_port);

////////////////////////////////////////////////////
// STATIC METHODS AND PUBLIC MEMBERS
Expand All @@ -132,6 +134,9 @@ class FastDdsDataStreamer :
void connect_to_domain_(
unsigned int domain_id);

void connect_to_server_(
unsigned int domain_id, const std::string& server_ip, unsigned int server_port);

void create_series_();

////////////////////////////////////////////////////
Expand Down
10 changes: 10 additions & 0 deletions plugins/datastreamer_plugin/fastdds/Handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ void Handler::connect_to_domain(
participant_ = std::make_unique<Participant>(domain, discovery_database_, listener_);
}

void Handler::connect_to_server(
const uint32_t domain, const std::string& server_ip, unsigned int server_port)
{
// Reset in case a Handler exist
reset();

// Create participant using discovery server
participant_ = std::make_unique<Participant>(domain, discovery_database_, listener_, true, server_ip, server_port);
}

void Handler::register_type_from_xml(
const std::string& xml_path)
{
Expand Down
3 changes: 3 additions & 0 deletions plugins/datastreamer_plugin/fastdds/Handler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ class Handler
void connect_to_domain(
const uint32_t domain);

void connect_to_server(
const uint32_t domain, const std::string& server_ip, unsigned int server_port);

void register_type_from_xml(
const std::string& xml_path);

Expand Down
21 changes: 19 additions & 2 deletions plugins/datastreamer_plugin/fastdds/Participant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,33 @@ void ReaderHandlerDeleter::operator ()(
Participant::Participant(
DomainId_t domain_id,
std::shared_ptr<TopicDataBase> discovery_database,
FastDdsListener* listener)
FastDdsListener* listener,
bool use_discovery_server,
const std::string& server_ip,
const unsigned int& server_port)
: listener_(listener)
, discovery_database_(discovery_database)
{
// TODO check entities are created correctly

DomainParticipantQos participant_qos = default_participant_qos_();
// Connect participat to server if discovery server is used
if(use_discovery_server){
// Define server locator
eprosima::fastdds::rtps::Locator_t server_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(server_locator, server_ip);
server_locator.port = server_port;
server_locator.kind = LOCATOR_KIND_UDPv4;
// Set participant as SUPER CLIENT
participant_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = eprosima::fastdds::rtps::DiscoveryProtocol::SUPER_CLIENT;
// Connect to remote server
participant_qos.wire_protocol().builtin.discovery_config.m_DiscoveryServers.push_back(server_locator);
}

// Create Domain Participant
participant_ = DomainParticipantFactory::get_instance()->create_participant(
domain_id,
default_participant_qos_(),
participant_qos,
this,
default_listener_mask_());

Expand Down
5 changes: 4 additions & 1 deletion plugins/datastreamer_plugin/fastdds/Participant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,10 @@ class Participant : public eprosima::fastdds::dds::DomainParticipantListener
Participant(
eprosima::fastdds::dds::DomainId_t domain_id,
std::shared_ptr<TopicDataBase> discovery_database,
FastDdsListener* listener);
FastDdsListener* listener,
bool use_discovery_server = false,
const std::string& server_ip = "127.0.0.1",
const unsigned int& server_port = 11811);

virtual ~Participant();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ void Configuration::save_default_settings(
settings.setValue(prefix + DISCARD_LARGE_ARRAYS_SETTINGS_TAG, data_type_configuration.discard_large_arrays);
settings.setValue(prefix + XML_DATATYPE_FILES_SETTINGS_TAG, xml_datatypes_files);
settings.setValue(prefix + DOMAIN_ID_SETTINGS_TAG, domain_id);
settings.setValue(prefix + SERVER_IP_SETTINGS_TAG, server_ip.c_str());
settings.setValue(prefix + SERVER_PORT_SETTINGS_TAG, server_port);
}

void Configuration::load_default_settings(
Expand All @@ -103,6 +105,8 @@ void Configuration::load_default_settings(
data_type_configuration.discard_large_arrays).toBool();
xml_datatypes_files = settings.value(prefix + XML_DATATYPE_FILES_SETTINGS_TAG, xml_datatypes_files).toStringList();
domain_id = settings.value(prefix + DOMAIN_ID_SETTINGS_TAG, domain_id).toInt();
server_ip = settings.value(prefix + SERVER_IP_SETTINGS_TAG, server_ip.c_str()).toString().toStdString();
server_port = settings.value(prefix + SERVER_PORT_SETTINGS_TAG, server_port).toUInt();
}

} /* namespace ui */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ struct Configuration
// DDS Configuration
unsigned int domain_id = 0;
QStringList xml_datatypes_files; // Empty in initialization
// Discovery server configuration
std::string server_ip = "127.0.0.1";
unsigned int server_port = 11811;

////////////////////
// Advance options
Expand All @@ -87,6 +90,8 @@ struct Configuration
constexpr static const char* DISCARD_LARGE_ARRAYS_SETTINGS_TAG = "discard_large_arrays";
constexpr static const char* XML_DATATYPE_FILES_SETTINGS_TAG = "xml_datatype_files";
constexpr static const char* DOMAIN_ID_SETTINGS_TAG = "domain_id_files";
constexpr static const char* SERVER_IP_SETTINGS_TAG = "server_ip_files";
constexpr static const char* SERVER_PORT_SETTINGS_TAG = "server_port_files";
};


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ struct UiListener
static_cast<void>(domain_id);
}

virtual void on_server_connection(
unsigned int domain_id, const std::string& server_ip, unsigned int server_port){
DEBUG("Calling on_server_connection " << domain_id << " " << server_ip << " " << server_port);
static_cast<void>(domain_id);
static_cast<void>(server_ip);
static_cast<void>(server_port);
}
};

} /* namespace ui */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ DialogSelectTopics::DialogSelectTopics(
, configuration_(configuration)
, listener_(listener)
, domain_id_connected_(configuration.domain_id) // This is initialized here as it does not come from configuration
, server_ip_(configuration.server_ip)
, server_port_(configuration.server_port)
, select_all_topics_(QKeySequence(Qt::CTRL + Qt::Key_A), this)
, deselect_all_topics_(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_A), this)
{
Expand All @@ -71,6 +73,12 @@ DialogSelectTopics::DialogSelectTopics(
this,
&DialogSelectTopics::on_connectionToDomain);

connect(
this,
&DialogSelectTopics::connection_to_server_signal,
this,
&DialogSelectTopics::on_connectionToServer);

/////
// Set shortcuts

Expand Down Expand Up @@ -137,6 +145,14 @@ void DialogSelectTopics::connect_to_domain(
emit connection_to_domain_signal(domain_id);
}

void DialogSelectTopics::connect_to_server(
const uint32_t domain_id,
const std::string& server_ip,
unsigned int server_port)
{
emit connection_to_server_signal(domain_id, utils::string_to_QString(server_ip), server_port);
}

void DialogSelectTopics::on_lineEditFilter_textChanged(
const QString& search_string)
{
Expand Down Expand Up @@ -193,9 +209,16 @@ void DialogSelectTopics::on_change_domain_button_clicked()
// Nevertheless lets check it
if (domain_id != domain_id_connected_)
{
// Get server ip and port before the reset called by on_domain_connection
QString server_ip = ui->server_ip->text();
unsigned int server_port = ui->server_port->text().toUInt();

// Call listener to connect to domain
listener_->on_domain_connection(
static_cast<unsigned int>(domain_id));

// Set the server ip and port to the value before the reset called by on_domain_connection
on_connectionToServer(domain_id, server_ip, server_port);
}
}
// In case the dialog is cancelled, do nothing
Expand All @@ -204,6 +227,27 @@ void DialogSelectTopics::on_change_domain_button_clicked()
delete change_domain_dialog;
}

void DialogSelectTopics::on_use_discovery_server_button_clicked() {
DEBUG("Calling on_use_discovery_server_button_clicked");
// Get server ip and port
QString server_ip = ui->server_ip->text();
unsigned int server_port = ui->server_port->text().toUInt();

if (ui->use_discovery_server_button->isChecked()) {
// Call listener to connect to server
listener_->on_server_connection(domain_id_connected_, server_ip.toStdString(), server_port);
ui->use_discovery_server_button->setText("ON");
ui->change_domain_button->setEnabled(false);
} else {
// Call listener to connect to domain
listener_->on_domain_connection(domain_id_connected_);
// Set the server ip and port to the value before the reset called by on_domain_connection
on_connectionToServer(domain_id_connected_, server_ip, server_port);
ui->use_discovery_server_button->setText("OFF");
ui->change_domain_button->setEnabled(true);
}
}

void DialogSelectTopics::on_include_files_button_clicked()
{
DEBUG("Calling on_include_files_button_clicked");
Expand Down Expand Up @@ -336,6 +380,21 @@ void DialogSelectTopics::on_connectionToDomain(
QString::number(domain_id_connected_));
}

void DialogSelectTopics::on_connectionToServer(
const uint32_t domain_id,
const QString& server_ip,
unsigned int server_port)
{
domain_id_connected_ = domain_id;
server_ip_ = server_ip.toStdString();
server_port_ = server_port;

ui->current_domain_label->setText(
QString::number(domain_id_connected_));
ui->server_ip->setText(server_ip_.c_str());
ui->server_port->setText(QString::number(server_port_));
}

void DialogSelectTopics::clean_topics_list_()
{
DEBUG("Calling clean_topics_list_");
Expand All @@ -352,6 +411,7 @@ void DialogSelectTopics::reset_to_configuration_()
// FastDDS configuration
// Set current domain
on_connectionToDomain(configuration_.domain_id);
on_connectionToServer(configuration_.domain_id, utils::string_to_QString(configuration_.server_ip), configuration_.server_port);

// Add XML files
// First erase every data in the list
Expand Down Expand Up @@ -390,6 +450,8 @@ void DialogSelectTopics::update_configuration_()
// Domain id
configuration_.domain_id =
static_cast<unsigned int>(domain_id_connected_);
configuration_.server_ip = server_ip_;
configuration_.server_port = server_port_;

// Array
configuration_.data_type_configuration.max_array_size =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ class DialogSelectTopics : public QDialog
void connect_to_domain(
const uint32_t domain_id);

void connect_to_server(
const uint32_t domain_id,
const std::string& server_ip,
unsigned int server_port);
signals:

void reset_view_signal();
Expand All @@ -76,6 +80,11 @@ class DialogSelectTopics : public QDialog
void connection_to_domain_signal(
const uint32_t domain_id);

void connection_to_server_signal(
const uint32_t domain_id,
const QString& server_ip,
const uint32_t server_port);

private slots:

void on_lineEditFilter_textChanged(
Expand All @@ -86,6 +95,8 @@ private slots:

void on_change_domain_button_clicked();

void on_use_discovery_server_button_clicked();

void on_include_files_button_clicked();

void on_include_dir_button_clicked();
Expand All @@ -106,6 +117,11 @@ private slots:
void on_connectionToDomain(
const uint32_t domain_id);

void on_connectionToServer(
const uint32_t domain_id,
const QString& server_ip,
unsigned int server_port);

protected:

void clean_topics_list_();
Expand Down Expand Up @@ -149,6 +165,9 @@ private slots:
constexpr static const unsigned int TypeNameTableIndex_ = 1;

unsigned int domain_id_connected_;
//! Variables storing discovery server information
std::string server_ip_;
unsigned int server_port_;

QShortcut select_all_topics_;
QShortcut deselect_all_topics_;
Expand Down
Loading