idl_parser.cpp
Go to the documentation of this file.
1 #include "idl_parser.hpp"
2 #include "dds_parser/dds_parser.hpp"
3 #include <memory>
4 
5 using namespace PJ;
6 
7 class MsgParserImpl : public MessageParser
8 {
9 public:
10  MsgParserImpl(const std::string& topic_name, //
11  const std::string& type_name, //
12  const std::string& schema, //
14  : MessageParser(topic_name, data), topic_name_(topic_name)
15  {
16  parser_ = std::make_unique<DDS::Parser>(topic_name, DDS::FullName(type_name), schema);
17  }
18 
19  bool parseMessage(const MessageRef serialized_msg, double& timestamp) override
20  {
21  DDS::Span<const uint8_t> msgSpan(serialized_msg.data(), serialized_msg.size());
22  parser_->parse(msgSpan, flat_message_);
23 
24  for (const auto& [key, var] : flat_message_.numerical_values)
25  {
26  getSeries(key).pushBack({ timestamp, DDS::castToDouble(var) });
27  }
28  for (const auto& [key, value] : flat_message_.string_values)
29  {
30  getStringSeries(key).pushBack({ timestamp, value });
31  }
32 
33  return true;
34  }
35 
36 private:
37  std::string topic_name_;
38  std::unique_ptr<DDS::Parser> parser_;
39  DDS::FlatMessage flat_message_;
40 };
41 
42 MessageParserPtr ParserFactoryIDL::createParser(const std::string& topic_name,
43  const std::string& type_name,
44  const std::string& schema,
46 {
47  return std::make_shared<MsgParserImpl>(topic_name, type_name, schema, data);
48 }
PJ::MessageParserPtr
std::shared_ptr< MessageParser > MessageParserPtr
Definition: messageparser_base.h:136
PJ::MessageRef::data
const uint8_t * data() const
Definition: messageparser_base.h:51
ParserFactoryIDL::createParser
MessageParserPtr createParser(const std::string &topic_name, const std::string &type_name, const std::string &schema, PlotDataMapRef &data) override
Definition: idl_parser.cpp:42
start_test_publisher.timestamp
timestamp
Definition: start_test_publisher.py:32
MsgParserImpl::MsgParserImpl
MsgParserImpl(const std::string &topic_name, const std::string &type_name, const std::string &schema, PJ::PlotDataMapRef &data)
Definition: idl_parser.cpp:10
PJ::MessageParser
The MessageParser is the base class used to parse a message with a specific encoding+schema.
Definition: messageparser_base.h:75
MsgParserImpl::parseMessage
bool parseMessage(const MessageRef serialized_msg, double &timestamp) override
Definition: idl_parser.cpp:19
MsgParserImpl
Definition: datatamer_parser.cpp:8
PJ::MessageRef
Definition: messageparser_base.h:28
MsgParserImpl::flat_message_
DDS::FlatMessage flat_message_
Definition: idl_parser.cpp:39
PJ
Definition: dataloader_base.h:16
mqtt_test.data
dictionary data
Definition: mqtt_test.py:22
PJ::MessageRef::size
size_t size() const
Definition: messageparser_base.h:61
MsgParserImpl::parser_
std::unique_ptr< DDS::Parser > parser_
Definition: idl_parser.cpp:38
PJ::PlotDataMapRef
Definition: plotdata.h:34
idl_parser.hpp


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon May 26 2025 02:22:37