eProsima / Micro-XRCE-DDS

An XRCE DDS implementation. Looking for commercial support? Contact info@eprosima.com
Apache License 2.0
156 stars 17 forks source link

How can I connect 2 or 3 clients(GR-ROSE) from an Agent? #56

Closed b0toku closed 3 years ago

b0toku commented 3 years ago

I'd like to connect 2 or 3 clients(GR-ROSE) from an agent and send from some nodes to some clients as below. node1 -> client1 (GR-ROSE1) node2 -> client2 (GR-ROSE2)

I can't find how I should do for this. Could someone tell me how I can do?

My environment is below.

Environment OS: Ubuntu18.04.5 LTS ROS2: Dashing Diademata Micro-XRCE-DDS-Agent: v1.1.0

Please have a look if you need to check programs below. These are programs (ROS2 side(talker), client (GR-ROSE) side(listener)), two terminals (Micro-XRCE-DDS-Agent, talker program) in Ubuntu, Serial monitor of client(GR-ROSE). These are to send from a node to a client(GR-ROSE).

Program (ROS2 side(talker))

// Copyright 2014 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// www.apache.org/.../LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <chrono>
#include <cstdio>
#include <memory>
#include <string>
#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>

using namespace std::chrono_literals;

class Talker : public rclcpp::Node
{
public:
explicit Talker(const std::string & topic_name)
: Node("talker"), count_(0)
{
// タイマー実行されるイベントハンドラー関数
auto publish_message =
[this]() -> void // ラムダ式による関数オブジェクトの定義
{
// 送信するメッセージ
auto msg = std::make_unique<std_msgs::msg::String>();
msg->data = "Hello world!" + std::to_string(count_++);

RCLCPP_INFO(this->get_logger(), "%s", msg->data.c_str());
pub_->publish(std::move(msg));
};

// chatterトピックの送信設定
rclcpp::QoS qos(rclcpp::KeepLast(10));
pub_ = create_publisher<std_msgs::msg::String>(topic_name, qos);
// publish_messageの1000ミリ秒周期でのタイマー実行
timer_ = create_wall_timer(1000ms, publish_message);
}

private:
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_;
rclcpp::TimerBase::SharedPtr timer_;
size_t count_;
};

int main(int argc, char * argv[])
{
// クライアントライブラリの初期化
setvbuf(stdout, NULL, _IONBF, BUFSIZ);
rclcpp::init(argc, argv);

// talkerノードの生成とスピン開始
auto node = std::make_shared<Talker>("chatter");
rclcpp::spin(node);
rclcpp::shutdown();

return 0;
}

Program (client (GR-ROSE) side(listener))

// Copyright 2018 eSOL Co.,Ltd.
// Copyright 2018 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// www.apache.org/.../LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <Arduino.h>
#include <WiFiEsp.h>
#include <Ethernet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>

#include "ros2_msg/Ros2String.h"

#include <uxr/client/client.h>
#include <ucdr/microcdr.h>

extern "C" {
#include <FreeRTOS.h>
#include <task.h>
}

// Micro-XRCE-DDS-Client key identifier of the client.
// If multiple clients connect to the same agent, each client must have a different key.
#define CLIENT_KEY 0xCCCCDDDD

#define BUFFER_SIZE UXR_CONFIG_TCP_TRANSPORT_MTU

char ssid[] = "SSID"; // your network SSID (name)
char pass[] = "PASSWORD"; // your network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
byte mac[] = { 0x74, 0x90, 0x50, 0x00, 0x79, 0x03 };
IPAddress ip(192, 168, 0, 3);

uxrSession session;
uxrTCPTransport transport;
uxrTCPPlatform tcp_platform;
uxrStreamId output_stream;
uxrStreamId input_stream;
static char agent_ip[32] = {0};

uint8_t output_best_effort_stream_buffer[BUFFER_SIZE];
uint8_t input_best_effort_stream_buffer[BUFFER_SIZE];

static bool use_ethernet = true;

void on_topic(uxrSession* session, uxrObjectId object_id, uint16_t request_id, uxrStreamId stream_id, struct ucdrBuffer* mb, void* args);
void on_agent_found(const uxrAgentAddress* address, void* args);
static void prvUXRManagerTask(void * pvParameters);

void setup() {
// Initialize the LED pin
pinMode(PIN_LED1, OUTPUT);

if(!use_ethernet)
{
// initialize serial for debugging
Serial.begin(115200);
// initialize serial for ESP module
Serial6.begin(115200);
// initialize ESP module
WiFi.init(&Serial6);
}
else
{
// Serial output to USB
Serial.begin(9600);
}

if(!use_ethernet)
{
// check for the presence of the shield
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue
while (true);
}
// attempt to connect to WiFi network
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
}
else
{
// Setting IP
Ethernet.begin(mac, ip);
}

// Wait for network configuration
vTaskDelay(5000);

// Discovery Agent
Serial.println("Discovery Agent...");
uxrAgentAddress chosen;
chosen.ip = agent_ip;

// Choose Ethernet or WiFi
uxr_discovery_choose_ethernet(use_ethernet);

// Try forever until Agent is found
uxr_discovery_agents_default(INT_MAX, 1000, on_agent_found, &chosen);

Serial.print("Chosen agent => ip: ");
Serial.print(chosen.ip);
Serial.print(", port: ");
Serial.println(chosen.port);

// Transport
tcp_platform.use_ethernet = use_ethernet;
if (!uxr_init_tcp_transport(&transport, &tcp_platform, chosen.ip, chosen.port))
{
Serial.println("Error at create transport.");
return;
}

// Session
uxr_init_session(&session, &transport.comm, CLIENT_KEY);
uxr_set_topic_callback(&session, on_topic, NULL);
if (!uxr_create_session(&session))
{
Serial.println("Error at create session.");
return;
}

// Streams
output_stream = uxr_create_output_best_effort_stream(&session, output_best_effort_stream_buffer, BUFFER_SIZE);
input_stream = uxr_create_input_best_effort_stream(&session);

// Create entities
uxrObjectId participant_id = uxr_object_id(0x01, UXR_PARTICIPANT_ID);
const char* participant_xml = "<dds>"
"<participant>"
"<rtps>"
"<name>default_xrce_participant</name>"
"</rtps>"
"</participant>"
"</dds>";
uint16_t participant_req = uxr_buffer_create_participant_xml(&session, output_stream, participant_id, 0, participant_xml, UXR_REPLACE);

// In order to avoid buffer overflow, uxr_flash_output_streams() has to be
// called everytime entities message is created.
(void) uxr_flash_output_streams(&session);

uxrObjectId topic_id = uxr_object_id(0x01, UXR_TOPIC_ID);
const char* topic_xml = "<dds>"
"<topic>"
"<name>rt/chatter</name>"
"<dataType>std_msgs::msg::dds_::String_</dataType>"
"</topic>"
"</dds>";
uint16_t topic_req = uxr_buffer_create_topic_xml(&session, output_stream, topic_id, participant_id, topic_xml, UXR_REPLACE);

// In order to avoid buffer overflow, uxr_flash_output_streams() has to be
// called everytime entities message is created.
(void) uxr_flash_output_streams(&session);

uxrObjectId subscriber_id = uxr_object_id(0x01, UXR_SUBSCRIBER_ID);
const char* subscriber_xml = "";
uint16_t subscriber_req = uxr_buffer_create_subscriber_xml(&session, output_stream, subscriber_id, participant_id, subscriber_xml, UXR_REPLACE);

// In order to avoid buffer overflow, uxr_flash_output_streams() has to be
// called everytime entities message is created.
(void) uxr_flash_output_streams(&session);

uxrObjectId datareader_id = uxr_object_id(0x01, UXR_DATAREADER_ID);
const char* datareader_xml = "<dds>"
"<data_reader>"
"<topic>"
"<kind>NO_KEY</kind>"
"<name>rt/chatter</name>"
"<dataType>std_msgs::msg::dds_::String_</dataType>"
"</topic>"
"</data_reader>"
"</dds>";
uint16_t datareader_req = uxr_buffer_create_datareader_xml(&session, output_stream, datareader_id, subscriber_id, datareader_xml, UXR_REPLACE);

// In order to avoid buffer overflow, uxr_flash_output_streams() has to be
// called everytime entities message is created.
(void) uxr_flash_output_streams(&session);

// Request topics
uxrDeliveryControl delivery_control = {0};
delivery_control.max_samples = UXR_MAX_SAMPLES_UNLIMITED;
(void) uxr_buffer_request_data(&session, output_stream, datareader_id, input_stream, &delivery_control);

xTaskCreate(prvUXRManagerTask, "ListenerDemo", configMINIMAL_STACK_SIZE * 5, NULL, 2, NULL);
}

void loop() {
// Do nothing
vTaskDelay(10000);
}

void on_topic(uxrSession* session, uxrObjectId object_id, uint16_t request_id, uxrStreamId stream_id, struct ucdrBuffer* mb, void* args) {
(void) session; (void) object_id; (void) request_id; (void) stream_id;

Ros2String topic;
Ros2String_deserialize_topic(mb, &topic);

Serial.print("Received topic: ");
Serial.println(topic.data);

// Toggle the heartbeat LED
digitalWrite(PIN_LED1, !digitalRead(PIN_LED1));
}

void on_agent_found(const uxrAgentAddress* address, void* args) {
uxrAgentAddress* agent = (uxrAgentAddress*)args;

Serial.print("Found agent => ip: ");
Serial.print(address->ip);
Serial.print(", port: ");
Serial.println(address->port);

memcpy((void*)(agent->ip), address->ip, 32);
agent->port = address->port;
}

static void prvUXRManagerTask(void * pvParameters) {
// Cannot confirm whether client is connected to agent or not.
while (1)
{
// Receive topics
(void) uxr_run_session_time(&session, 1);

vTaskDelay(1);
}

// Delete resources
(void) uxr_delete_session(&session);
(void) uxr_close_tcp_transport(&transport);

// Delete this task
vTaskDelete(NULL);
}

Terminal in Ubuntu (Micro-XRCE-DDS-Agent)

bash: install/local_setup.bash: そのようなファイルやディレクトリはありません
b0toku@b0toku-System-Product-Name:~$ cd micro-XRCE-DDS-agent
b0toku@b0toku-System-Product-Name:~/micro-XRCE-DDS-agent$ cd build
b0toku@b0toku-System-Product-Name:~/micro-XRCE-DDS-agent/build$ LD_PRELOAD="/usr/local/lib/libfastrtps.so.1 /usr/local/lib/libfastcdr.so.1" MicroXRCEAgent tcp -p 2020 -d
Enter 'q' for exit
[1608177907.777215] info | TCPServerLinux.cpp | init | running... | port: 2020
[1608177907.777541] info | DiscoveryServerLinux.cpp | init | running... | Port: 7400
[1608177907.919927] info | Root.cpp | create_client | create | client_key: 0xCCCCDDDD, session_id: 0x81
[1608177907.919991] info | TCPServerBase.cpp | on_create_client | session established | client_key: 0xCCCCDDDD, address: 192.168.0.3:13549

Terminal in Ubuntu (talker program) bash: install/local_setup.bash: そのようなファイルやディレクトリはありません b0toku@b0toku-System-Product-Name:~$ . ~/ros2/install/setup.bash b0toku@b0toku-System-Product-Name:~$ ros2 run hello_world talker [INFO] [talker]: Hello world!0 [INFO] [talker]: Hello world!1 [INFO] [talker]: Hello world!2 [INFO] [talker]: Hello world!3 [INFO] [talker]: Hello world!4 [INFO] [talker]: Hello world!5

Serial monitor of client(GR-ROSE)

Discovery Agent...
Found agent => ip: 192.168.0.104, port: 2020
Chosen agent => ip: 192.168.0.104, port: 2020
Received topic: Hello world!0
Received topic: Hello world!1
Received topic: Hello world!2
Received topic: Hello world!3
Received topic: Hello world!4
Received topic: Hello world!5
pablogs9 commented 3 years ago

I have a couple of questions:

b0toku commented 3 years ago

Thank you for your quick reply.

It might be very difficult to understand due to my bad explanation. Sorry.

jamoralp commented 3 years ago

Good morning,

Regarding this issue, I have several questions:

b0toku commented 3 years ago

Thank you for your reply.

Does client ID mean client key? I gave unique keys and IP addresses to the each client and I checked if entities are being correctly created with -v6 option.

A terminal for Micro-XRCE-DDS-Agent is below.

bash: install/local_setup.bash: そのようなファイルやディレクトリはありません
b0toku@b0toku-System-Product-Name:~$ cd micro-XRCE-DDS-agent
b0toku@b0toku-System-Product-Name:~/micro-XRCE-DDS-agent$ cd build
b0toku@b0toku-System-Product-Name:~/micro-XRCE-DDS-agent/build$ LD_PRELOAD="/usr/local/lib/libfastrtps.so.1 /usr/local/lib/libfastcdr.so.1" MicroXRCEAgent tcp -p 2020 -v6 -d
Enter 'q' for exit
[1608605724.075252] info     | TCPServerLinux.cpp | init                     | running...             | port: 2020
[1608605724.075534] info     | DiscoveryServerLinux.cpp | init                     | running...             | Port: 7400
[1608605724.075597] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 6
[1608605744.035440] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0x00000000, len: 24, data: 
0000: 80 00 00 00 00 01 10 00 58 52 43 45 01 00 01 0F AA AA BB BB 81 00 FC 03
[1608605744.035564] info     | Root.cpp           | create_client            | create                 | client_key: 0xAAAABBBB, session_id: 0x81
[1608605744.035619] info     | TCPServerBase.cpp  | on_create_client         | session established    | client_key: 0xAAAABBBB, address: 192.168.0.3:31363
[1608605744.035713] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 19, data: 
0000: 81 00 00 00 04 01 0B 00 00 00 58 52 43 45 01 00 01 0F 00
[1608605744.036639] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 112, data: 
0000: 81 01 00 00 01 05 68 00 00 0A 00 11 01 02 00 00 59 00 00 00 3C 64 64 73 3E 3C 70 61 72 74 69 63
0020: 69 70 61 6E 74 3E 3C 72 74 70 73 3E 3C 6E 61 6D 65 3E 64 65 66 61 75 6C 74 5F 78 72 63 65 5F 70
0040: 61 72 74 69 63 69 70 61 6E 74 3C 2F 6E 61 6D 65 3E 3C 2F 72 74 70 73 3E 3C 2F 70 61 72 74 69 63
0060: 69 70 61 6E 74 3E 3C 2F 64 64 73 3E 00 00 00 00
[1608605744.036708] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 124, data: 
0000: 81 01 01 00 01 05 71 00 00 0B 00 12 02 02 00 00 63 00 00 00 3C 64 64 73 3E 3C 74 6F 70 69 63 3E
0020: 3C 6E 61 6D 65 3E 72 74 2F 63 68 61 74 74 65 72 3C 2F 6E 61 6D 65 3E 3C 64 61 74 61 54 79 70 65
0040: 3E 73 74 64 5F 6D 73 67 73 3A 3A 6D 73 67 3A 3A 64 64 73 5F 3A 3A 53 74 72 69 6E 67 5F 3C 2F 64
0060: 61 74 61 54 79 70 65 3E 3C 2F 74 6F 70 69 63 3E 3C 2F 64 64 73 3E 00 00 11 00 00 00
[1608605744.036805] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 24, data: 
0000: 81 01 02 00 01 05 0F 00 00 0C 00 14 04 02 00 00 01 00 00 00 00 00 11 73
[1608605744.036845] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 168, data: 
0000: 81 01 03 00 01 05 9F 00 00 0D 00 16 06 02 00 00 91 00 00 00 3C 64 64 73 3E 3C 64 61 74 61 5F 72
0020: 65 61 64 65 72 3E 3C 74 6F 70 69 63 3E 3C 6B 69 6E 64 3E 4E 4F 5F 4B 45 59 3C 2F 6B 69 6E 64 3E
0040: 3C 6E 61 6D 65 3E 72 74 2F 63 68 61 74 74 65 72 3C 2F 6E 61 6D 65 3E 3C 64 61 74 61 54 79 70 65
0060: 3E 73 74 64 5F 6D 73 67 73 3A 3A 6D 73 67 3A 3A 64 64 73 5F 3A 3A 53 74 72 69 6E 67 5F 3C 2F 64
0080: 61 74 61 54 79 70 65 3E 3C 2F 74 6F 70 69 63 3E 3C 2F 64 61 74 61 5F 72 65 61 64 65 72 3E 3C 2F
00A0: 64 64 73 3E 00 00 14 00
[1608605744.037033] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 24, data: 
0000: 81 01 04 00 08 01 10 00 00 0E 00 16 01 00 00 01 FF FF 00 00 00 00 00 00
[1608605744.040228] debug    | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0xAAAABBBB, participant_id: 0x001(1)
[1608605744.040388] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 14, data: 
0000: 81 80 00 00 05 01 06 00 00 0A 00 11 00 00
[1608605744.040491] debug    | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0xAAAABBBB, topic_id: 0x001(2), participant_id: 0x001(1)
[1608605744.040543] debug    | ProxyClient.cpp    | create_subscriber        | subscriber created     | client_key: 0xAAAABBBB, subscriber_id: 0x001(4), participant_id: 0x001(1)
[1608605744.040582] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 14, data: 
0000: 81 80 01 00 05 01 06 00 00 0B 00 12 00 00
[1608605744.040625] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 14, data: 
0000: 81 80 02 00 05 01 06 00 00 0C 00 14 00 00
[1608605744.040795] debug    | ProxyClient.cpp    | create_datareader        | datareader created     | client_key: 0xAAAABBBB, datareader_id: 0x001(6), subscriber_id: 0x001(4)
[1608605744.040853] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 14, data: 
0000: 81 80 03 00 05 01 06 00 00 0D 00 16 00 00
[1608605744.041245] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.041681] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.041918] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.042178] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.146362] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0x00000000, len: 24, data: 
0000: 80 00 00 00 00 01 10 00 58 52 43 45 01 00 01 0F CC CC DD DD 81 00 FC 03
[1608605744.146464] info     | Root.cpp           | create_client            | create                 | client_key: 0xCCCCDDDD, session_id: 0x81
[1608605744.146504] info     | TCPServerBase.cpp  | on_create_client         | session established    | client_key: 0xCCCCDDDD, address: 192.168.0.5:23044
[1608605744.146618] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 19, data: 
0000: 81 00 00 00 04 01 0B 00 00 00 58 52 43 45 01 00 01 0F 00
[1608605744.147492] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 112, data: 
0000: 81 01 00 00 01 05 68 00 00 0A 00 11 01 02 00 00 59 00 00 00 3C 64 64 73 3E 3C 70 61 72 74 69 63
0020: 69 70 61 6E 74 3E 3C 72 74 70 73 3E 3C 6E 61 6D 65 3E 64 65 66 61 75 6C 74 5F 78 72 63 65 5F 70
0040: 61 72 74 69 63 69 70 61 6E 74 3C 2F 6E 61 6D 65 3E 3C 2F 72 74 70 73 3E 3C 2F 70 61 72 74 69 63
0060: 69 70 61 6E 74 3E 3C 2F 64 64 73 3E 00 00 00 00
[1608605744.147556] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 124, data: 
0000: 81 01 01 00 01 05 71 00 00 0B 00 12 02 02 00 00 63 00 00 00 3C 64 64 73 3E 3C 74 6F 70 69 63 3E
0020: 3C 6E 61 6D 65 3E 72 74 2F 63 68 61 74 74 65 72 3C 2F 6E 61 6D 65 3E 3C 64 61 74 61 54 79 70 65
0040: 3E 73 74 64 5F 6D 73 67 73 3A 3A 6D 73 67 3A 3A 64 64 73 5F 3A 3A 53 74 72 69 6E 67 5F 3C 2F 64
0060: 61 74 61 54 79 70 65 3E 3C 2F 74 6F 70 69 63 3E 3C 2F 64 64 73 3E 00 00 11 00 00 00
[1608605744.147664] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 24, data: 
0000: 81 01 02 00 01 05 0F 00 00 0C 00 14 04 02 00 00 01 00 00 00 00 00 11 73
[1608605744.147693] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 168, data: 
0000: 81 01 03 00 01 05 9F 00 00 0D 00 16 06 02 00 00 91 00 00 00 3C 64 64 73 3E 3C 64 61 74 61 5F 72
0020: 65 61 64 65 72 3E 3C 74 6F 70 69 63 3E 3C 6B 69 6E 64 3E 4E 4F 5F 4B 45 59 3C 2F 6B 69 6E 64 3E
0040: 3C 6E 61 6D 65 3E 72 74 2F 63 68 61 74 74 65 72 3C 2F 6E 61 6D 65 3E 3C 64 61 74 61 54 79 70 65
0060: 3E 73 74 64 5F 6D 73 67 73 3A 3A 6D 73 67 3A 3A 64 64 73 5F 3A 3A 53 74 72 69 6E 67 5F 3C 2F 64
0080: 61 74 61 54 79 70 65 3E 3C 2F 74 6F 70 69 63 3E 3C 2F 64 61 74 61 5F 72 65 61 64 65 72 3E 3C 2F
00A0: 64 64 73 3E 00 00 14 00
[1608605744.147919] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 24, data: 
0000: 81 01 04 00 08 01 10 00 00 0E 00 16 01 00 00 01 FF FF 00 00 00 00 00 00
[1608605744.150286] debug    | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0xCCCCDDDD, participant_id: 0x001(1)
[1608605744.150364] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 14, data: 
0000: 81 80 00 00 05 01 06 00 00 0A 00 11 00 00
[1608605744.150476] debug    | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0xCCCCDDDD, topic_id: 0x001(2), participant_id: 0x001(1)
[1608605744.150533] debug    | ProxyClient.cpp    | create_subscriber        | subscriber created     | client_key: 0xCCCCDDDD, subscriber_id: 0x001(4), participant_id: 0x001(1)
[1608605744.150556] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 14, data: 
0000: 81 80 01 00 05 01 06 00 00 0B 00 12 00 00
[1608605744.150590] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 14, data: 
0000: 81 80 02 00 05 01 06 00 00 0C 00 14 00 00
[1608605744.150883] debug    | ProxyClient.cpp    | create_datareader        | datareader created     | client_key: 0xCCCCDDDD, datareader_id: 0x001(6), subscriber_id: 0x001(4)
[1608605744.150922] trace    | FastEntities.cpp   | onParticipantDiscovery   | matched                | entity_id: 0.0.1.c1, guid_prefix: 1.f.50.a.1d.7b.0.0.1.0.0.0
[1608605744.150943] trace    | FastEntities.cpp   | onParticipantDiscovery   | matched                | entity_id: 0.0.1.c1, guid_prefix: 1.f.50.a.1d.7b.0.0.2.0.0.0
[1608605744.150992] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 14, data: 
0000: 81 80 03 00 05 01 06 00 00 0D 00 16 00 00
[1608605744.151212] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.215455] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.215521] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.216153] debug    | TCPServerLinux.cpp | recv_message             | [==>> TCP <<==]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0A 01 05 00 00 00 00 00 80
[1608605744.283964] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.284006] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.484020] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.484078] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.684103] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.684164] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.884200] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xAAAABBBB, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
[1608605744.884263] debug    | TCPServerLinux.cpp | send_message             | [** <<TCP>> **]        | client_key: 0xCCCCDDDD, len: 13, data: 
0000: 81 00 00 00 0B 01 05 00 00 00 03 00 80
pablogs9 commented 3 years ago

Hello @b0toku, yes, client ID means client key.

We are not sure about what is your issue or your question. Could you explain your problem more clearly?

pablogs9 commented 3 years ago

Closing due to inactivity