mirror of https://github.com/SeanOMik/libki.git
examples: Example for loading DML message modules
This commit is contained in:
parent
3e34c0b3bc
commit
6a84d50cee
|
@ -0,0 +1,64 @@
|
||||||
|
#include <ki/protocol/dml/MessageManager.h>
|
||||||
|
#include <ki/protocol/exception.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace ki::protocol;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
// Get command-line arguments
|
||||||
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
std::cout << "usage: example-dml-module.exe <module_file> <message_name>" << std::endl;
|
||||||
|
std::cout << "Prints out information for specified message." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a manager to load modules into
|
||||||
|
auto *message_manager = new dml::MessageManager();
|
||||||
|
const dml::MessageModule *message_module;
|
||||||
|
|
||||||
|
// Load the message module file
|
||||||
|
const std::string filepath = argv[1];
|
||||||
|
try
|
||||||
|
{
|
||||||
|
message_module = message_manager->load_module(filepath);
|
||||||
|
}
|
||||||
|
catch (value_error &e)
|
||||||
|
{
|
||||||
|
std::cout << "Failed to load message module.";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print some information about the module itself
|
||||||
|
std::cout << "Service ID: " << (uint16_t)message_module->get_service_id() << std::endl;
|
||||||
|
std::cout << "Protocol Type: " << message_module->get_protocol_type() << std::endl;
|
||||||
|
|
||||||
|
// Get the message template from the module we just loaded
|
||||||
|
const std::string message_name = argv[2];
|
||||||
|
auto *message_template = message_module->get_message_template(message_name);
|
||||||
|
if (message_template)
|
||||||
|
{
|
||||||
|
std::cout << "Message Name: " << message_template->get_name() << std::endl;
|
||||||
|
std::cout << "Mesasge Type: " << (uint16_t)message_template->get_type() << std::endl;
|
||||||
|
|
||||||
|
// Print out the fields in the template record
|
||||||
|
std::cout << std::endl;
|
||||||
|
auto &record = message_template->get_record();
|
||||||
|
for (auto it = record.fields_begin();
|
||||||
|
it != record.fields_end(); ++it)
|
||||||
|
{
|
||||||
|
auto *field = *it;
|
||||||
|
if (field->is_transferable())
|
||||||
|
std::cout << field->get_type_name() << " " << field->get_name() << ";" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Could not find message with name: " << message_name << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit successfully
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue