DDS Connector Sept, 2016

Gianpiero Napoli, Senior Software Engineer Agenda

● Goals ● Concept ● Architecture ● Status ● Demo ● Next Steps

2015 © Real-Time Innovations Inc. Connector Goals

● Faster (“Rapid”) ○ Development ○ Integration ○ Troubleshooting ● Integrate ○ Connectivity technologies ○ Scripting ● Simplify ○ API, Configuration, Options ● Preserve Data-Oriented Design|Architecture

2015 © Real-Time Innovations Inc. The Connector Model What? Connector Concept

Component Component “Connection”

(a.k.a. App) Connectivity (a.k.a. App) Middleware

Connector “connects” components (apps) via some connectivity middleware

2015 © Real-Time Innovations Inc. Connector Facilitates Integration

“Connection” Connectivity Middleware Y

Component “Connection” “Connection” Connectivity Connectivity Middleware Middleware (a.k.a. App) X X

“Connection” X = DDS Connectivity Y = Web Middleware etc.. Y

2015 © Real-Time Innovations Inc. Connectors Speed Up Integration

Connection X

Connection Y

2015 © Real-Time Innovations Inc. Connector

● connects your app to a data space (DDS)

● exposes a data-centric API

● lets your app read/write structured data

2015 © Real-Time Innovations Inc. A Connector has Input & Output ports

Connector

Input Data Port Output Data Port

Input Output

2015 © Real-Time Innovations Inc. Connectors have a data-centric API

Connector config

Input Data Port Output Data Port input()

wait() / on() output() read() / take() write() / dispose() / unregister() samples[] clear_members() infos[]

instance

2015 © Real-Time Innovations Inc. Connectors have a data-centric API

Connector config

Input Data Port Output Data Port input()

wait() / on() output() read() / take() write() / dispose() / unregister() samples[] clear_members() User instance Defined Structure

2015 © Real-Time Innovations Inc. DDS Connector Input & Output ports

Connector (DomainParticipant+) config.xml

Input Data Port Output (DataReader+) Data Port input() (DataWriter+) wait() / on() output() read() / take() write() / dispose() / unregister() samples[] clear_members() User instance Defined Structure

XML Config 2015 © Real-Time Innovations Inc.

DDS Connector

Service Other Config Connectivity Technology Connector API lua Service DOI python (Stateful) java? Service C++? Adapter : App DDS RTI Connext Connector Types DDS DDS Topics Publisher | Subscriber QoS Endpoints

API = Application Programming Interface DOI = Data-Oriented Interface 2015 © Real-Time Innovations Inc. DDS Connector

Service Other Config Connectivity Technology Connector API Service DOI writer() write()/dispose() (Stateful)

reader() Service read()/take() Adapter App DDS RTI

Connext Connector Types DDS DDS Topics Publisher | Subscriber QoS wait() / on() Endpoints

Custom Service API

API = Application Programming Interface DOI = Data-Oriented Interface 2015 © Real-Time Innovations Inc. DDS Connector Software Stack

javascript python lua node.js connector.js connector.py Prototyper + lua DDS C libffi Connector connector.c (rti_dds_connector.so)

RTI Connext DDS

2015 © Real-Time Innovations Inc. Current Status

Embedded within rtiddsprototyper binary included in the Experimental RTI Connext DDS product (research, early adopters)

javascript python lua node.js connector.js connector.py connector.lua DDS C libffi Connector connector.c (rti_dds_connector.so)

RTI Connext DDS

2015 © Real-Time Innovations Inc. DDS Connector Configuration

● XML Based App Creation ● Participant ○ Types ○ QoS ○ Endpoints Output Data Input Port Port

QoS Type Type Data Type Objects Output

Data Data Writer Topic Name Input Reader

Name Name QoS QoS

2015 © Real-Time Innovations Inc. Using a Connector: Pseudo Code

Creating a Connector connector = new Connector(“participant_name”, “config.xml”)

Reading Data Writing Data

input = connector.getInput(“in_name”) output = connector.getOutput(“out_name”)

input.take() output.instance.setNumber(“x”, 10.0) length = input.samples.getLength(input) output.write() for (i = 1; i <= length; ++i) { if connector.infos(i).isValid then { print(connector.samples(i)) } }

2015 © Real-Time Innovations Inc. Integrating DDS & Web Technologies

“Connection” Connectivity Middleware RESTful: HTTP, Websockets,HTML5 nodejs

JavaScript “Connection” “Connection” Component Connectivity Connectivity Middleware Middleware DDS DDS (node.js App)

nodejs

“Connection” Connectivity Middleware RESTful: HTTP, WebSockets, HTML5

2015 © Real-Time Innovations Inc. Demo Common Use Cases ● Integration ○ Middleware technologies ○ DDS Domain Bridging ● I/O ○ Device / Hardware ○ Web and Services ● UIs ○ GUI Toolkits ○ Web Based ● Information Processing ○ Use various processors, eg Rx? ○ Integrate with CEP engines? ● ... 2015 © Real-Time Innovations Inc. Use Case: Integrating DDS and Web

● Standard Thin Client (without DDS) ○ Real-Time Web ■ push using websockets (using socket.io) ○ Browser, Mobile, Handheld ■ no special software installation ● Custom Thin Client (with DDS) ○ HTML5 GUI using nw.js ○ +Plus the capabilities of Real-Time Web ○ +Plus the capabilities of DDS (state management)

2015 © Real-Time Innovations Inc. Connector is Experimental Product

● Download connector here: https://github.com/rticommunity/rticonnextdd s-connector

● More info on connector here: https://community.rti.com/downloads/experi

mental/rticonnextdds-connector

2015 © Real-Time Innovations Inc. Thank You! Examples and code digging!

Getting Started ● simple ○ DDS ←→ DDS ■ poll ■ event ● web_http ○ DDS ←→ HTTP ■ poll ● web_socket ○ DDS ←→ WebSockets ○ HTML5: table, chart, plugin (Google Earth)

2015 © Real-Time Innovations Inc. Data Indexing

● Prototyper with Lua Getting Started Guide ○ Section 6.4 ● NOTE ○ Prototyper = Singleton Connector + Execution Loop

2015 © Real-Time Innovations Inc. DDS Connector API

Connector

Input Output Data Data Port Port

2015 © Real-Time Innovations Inc. DDS Connector API

2015 © Real-Time Innovations Inc. DDS Connector for Lua - connector.lua lua connector DDS Connector for C - connector.c C connector DDS Connector for Python - connector.py python connector