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 javascript python (Stateful) C 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 APIs 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