DDS.Net C++ Connector intends to be a lightweight and performant connector for connecting distributed C++ applications through DDS.Net Server, supporting binary-level communication for efficiency and allowing primitive data types to control and only transfer the requisite data. The supported data types are:
| Main type | Sub-type | Represented data |
|---|---|---|
| Primitive      | String | Sequence of characters in Unicode |
| Boolean | A boolean (True or False) | |
| Byte | 1-byte Signed Integer | |
| Word | 2-byte Signed Integer | |
| DWord | 4-byte Signed Integer | |
| QWord | 8-byte Signed Integer | |
| Unsigned Byte | 1-byte Unsigned Integer | |
| Unsigned Word | 2-byte Unsigned Integer | |
| Unsigned DWord | 4-byte Unsigned Integer | |
| Unsigned QWord | 8-byte Unsigned Integer | |
| Single | A single precision (4-byte) Floating-point number | |
| Double | A double precision (8-byte) Floating-point number | |
| Raw Bytes | - | Sequence of bytes |
Â
Data transfer with the server is only done when there is change in value
Value subscribers are only invoked upon corresponding value changes
Â
In this context, Providers are functions that provide data to the library for transferring to the target DDS.Net Server for onward sharing with corresponding consumers; and Consumers are functions that consume delivered data from connected DDS.Net Server through the library. Function signatures and their corresponding library registration functions are enlisted here.
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerStringProvider
- Â Â Function signature: Â Â std::string (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerStringConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, const std::string& value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerBooleanProvider
- Â Â Function signature: Â Â bool (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerBooleanConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, bool value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerByteProvider
- Â Â Function signature: Â Â char (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerByteConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, char value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerWordProvider
- Â Â Function signature: Â Â short (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, short value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerDWordProvider
- Â Â Function signature: Â Â long (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerDWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, long value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerQWordProvider
- Â Â Function signature: Â Â long long (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerQWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, long long value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedByteProvider
- Â Â Function signature: Â Â unsigned char (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedByteConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, unsigned char value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedWordProvider
- Â Â Function signature: Â Â unsigned short (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, unsigned short value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedDWordProvider
- Â Â Function signature: Â Â unsigned long (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedDWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, unsigned long value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedQWordProvider
- Â Â Function signature: Â Â unsigned long long (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerUnsignedQWordConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, unsigned long long value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerSingleProvider
- Â Â Function signature: Â Â float (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerSingleConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, float value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerDoubleProvider
- Â Â Function signature: Â Â double (*provider)(const std::string& varName)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerDoubleConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, double value)
Provider:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerRawBytesProvider
- Â Â Function signature: Â Â int (*provider)(const std::string& varName, unsigned char* in_buff, int size)
Consumer:
- Â Â Registration function: Â Â dds::net::connector::DdsConnector::registerRawBytesConsumer
- Â Â Function signature: Â Â void (*consumer)(const std::string& varName, unsigned char* in_buff, int size)
Â
Sample use of the library is depicted in the following sample application code:
#include <iostream>
#include <string>
#include <exception>
#include <stdio.h>
#include "ddsconnector.h"
using namespace std;
using namespace dds::net::connector;
void wait_for_exit_key();
void my_double_consumer(std::string& variableName, double variableValue);
int main()
{
string appName = "DDS.Net C++ Connected App";
string serverIP = "127.0.0.1";
unsigned short serverPort = 44556;
cout << appName << endl;
cout << "-----" << endl;
cout << "Press Ctrl+C / input 'C' to exit." << endl << endl;
try
{
DdsConnector connector(
appName,
serverIP, serverPort,
new ConsoleLogger());
connector.registerDoubleConsumer("TESTX", my_double_consumer, ON_CHANGE);
connector.registerDoubleConsumer("TESTY", my_double_consumer, ON_CHANGE);
connector.start();
wait_for_exit_key();
connector.stop();
}
catch (exception& ex)
{
cout << "Error! " << ex.what() << endl;
}
cout << endl << endl << endl;
}
void wait_for_exit_key()
{
char ch;
while ((ch = getc(stdin)) != 'C');
}
static double x, y;
void my_double_consumer(std::string& variableName, double variableValue)
{
if (variableName == "TESTX")
{
x = variableValue;
}
else if (variableName == "TESTY")
{
y = variableValue;
cout << x << ", " << y << endl;
}
}