# DDS.Net C++ Connector - v1.3.2
*DDS.Net C++ Connector* intends to be a lightweight and performant connector for connecting distributed C++ applications through *DDS.Net Server*. 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
## Providers and Consumers
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.
### String
> 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***)
### Boolean
> 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***)
### Byte
> 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***)
### Word
> 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***)
### DWord
> 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***)
### QWord
> 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***)
### Unsigned Byte
> 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***)
### Unsigned Word
> 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***)
### Unsigned DWord
> 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***)
### Unsigned QWord
> 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***)
### Single
> 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***)
### Double
> 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***)
### Raw Bytes
> 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 application
Sample use of the library is done in following simple application:
```cpp
#include
#include
#include
#include
#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;
}
}
```