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;
}
}