Skip to content

Latest commit

 

History

History
292 lines (173 loc) · 11.4 KB

README.md

File metadata and controls

292 lines (173 loc) · 11.4 KB

           

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, 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

 

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