rticonnextdds-connector 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -10
- package/README.rst +1 -16
- package/package.json +2 -4
- package/rticonnextdds-connector/lib/linux-arm/libnddsc.so +0 -0
- package/rticonnextdds-connector/lib/linux-arm/libnddscore.so +0 -0
- package/rticonnextdds-connector/lib/linux-arm/librtiddsconnector.so +0 -0
- package/rticonnextdds-connector/lib/linux-arm64/libnddsc.so +0 -0
- package/rticonnextdds-connector/lib/linux-arm64/libnddscore.so +0 -0
- package/rticonnextdds-connector/lib/linux-arm64/librtiddsconnector.so +0 -0
- package/rticonnextdds-connector/lib/linux-x64/libnddsc.so +0 -0
- package/rticonnextdds-connector/lib/linux-x64/libnddscore.so +0 -0
- package/rticonnextdds-connector/lib/linux-x64/librtiddsconnector.so +0 -0
- package/rticonnextdds-connector/lib/osx-x64/libnddsc.dylib +0 -0
- package/rticonnextdds-connector/lib/osx-x64/libnddscore.dylib +0 -0
- package/rticonnextdds-connector/lib/osx-x64/librtiddsconnector.dylib +0 -0
- package/rticonnextdds-connector/lib/win-x64/nddsc.dll +0 -0
- package/rticonnextdds-connector/lib/win-x64/nddscore.dll +0 -0
- package/rticonnextdds-connector/lib/win-x64/rtiddsconnector.dll +0 -0
- package/rticonnextdds-connector/lib/win-x64/vcruntime140.dll +0 -0
- package/rticonnextdds-connector.js +147 -186
package/README.md
CHANGED
@@ -26,22 +26,13 @@ The `examples/nodejs` directory provides several examples:
|
|
26
26
|
## Dependencies
|
27
27
|
|
28
28
|
RTI Connector for JavaScript has the following dependencies, which are also listed in `package.json`:
|
29
|
-
* [
|
30
|
-
* [ref-struct-napi](https://www.npmjs.com/package/ref-struct-napi): create ABI-compilant "Struct" instances on top of Buffers
|
31
|
-
* [ffi-napi](https://www.npmjs.com/package/ffi-napi): used for loading and calling dynamic libraries using pure JavaScript
|
29
|
+
* [koffi](https://koffi.dev/): used for loading and calling dynamic libraries using pure JavaScript
|
32
30
|
* [events](https://www.npmjs.com/package/events): used for the 'EventEmitter' (legacy implementation of RTI Connector)
|
33
31
|
|
34
32
|
Additionally to run the `web_socket` example, [socket.io](https://github.com/Automattic/socket.io) and [OpenLayers](https://openlayers.org) are required.
|
35
33
|
|
36
34
|
Additional dependencies are required to run the unit tests and some of the examples. Please see the README files in the appropriate directory.
|
37
35
|
|
38
|
-
### Python dependency
|
39
|
-
|
40
|
-
Some of the dependencies are shipped as source code and use [node-gyp](https://github.com/nodejs/node-gyp) to be compiled locally. `node-gyp` requires Python 2.7 and does not work with Python 3. The requirements for `node-gyp` can be found at:
|
41
|
-
* [unix](https://github.com/nodejs/node-gyp#on-unix)
|
42
|
-
* [darwin](https://github.com/nodejs/node-gyp#on-macos)
|
43
|
-
* [windows](https://github.com/nodejs/node-gyp#on-windows)
|
44
|
-
|
45
36
|
### C/C++ compiler dependency
|
46
37
|
|
47
38
|
The dependency [ref](https://www.npmjs.com/package/ref) is shipped as source code and requires a C++11 compiler.
|
package/README.rst
CHANGED
@@ -34,11 +34,7 @@ Dependencies
|
|
34
34
|
|
35
35
|
RTI Connector for JavaScript has the following dependencies, which are
|
36
36
|
also listed in ``package.json``: \*
|
37
|
-
`
|
38
|
-
instances into "pointers" \*
|
39
|
-
`ref-struct-napi <https://www.npmjs.com/package/ref-struct-napi>`__:
|
40
|
-
create ABI-compilant "Struct" instances on top of Buffers \*
|
41
|
-
`ffi-napi <https://www.npmjs.com/package/ffi-napi>`__: used for loading
|
37
|
+
`koffi <https://koffi.dev/>`__: used for loading
|
42
38
|
and calling dynamic libraries using pure JavaScript \*
|
43
39
|
`events <https://www.npmjs.com/package/events>`__: used for the
|
44
40
|
'EventEmitter' (legacy implementation of RTI Connector)
|
@@ -50,17 +46,6 @@ Additionally to run the ``web_socket`` example,
|
|
50
46
|
Additional dependencies are required to run the unit tests and some of
|
51
47
|
the examples. Please see the README files in the appropriate directory.
|
52
48
|
|
53
|
-
Python dependency
|
54
|
-
~~~~~~~~~~~~~~~~~
|
55
|
-
|
56
|
-
Some of the dependencies are shipped as source code and use
|
57
|
-
`node-gyp <https://github.com/nodejs/node-gyp>`__ to be compiled
|
58
|
-
locally. ``node-gyp`` requires Python 2.7 and does not work with Python
|
59
|
-
3. The requirements for ``node-gyp`` can be found at: \*
|
60
|
-
`unix <https://github.com/nodejs/node-gyp#on-unix>`__ \*
|
61
|
-
`darwin <https://github.com/nodejs/node-gyp#on-macos>`__ \*
|
62
|
-
`windows <https://github.com/nodejs/node-gyp#on-windows>`__
|
63
|
-
|
64
49
|
C/C++ compiler dependency
|
65
50
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
66
51
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "rticonnextdds-connector",
|
3
|
-
"version": "1.3.
|
3
|
+
"version": "1.3.1",
|
4
4
|
"description": "RTI Connector for JavaScript",
|
5
5
|
"main": "rticonnextdds-connector.js",
|
6
6
|
"files": [
|
@@ -14,9 +14,7 @@
|
|
14
14
|
},
|
15
15
|
"dependencies": {
|
16
16
|
"events": "^3.2.0",
|
17
|
-
"
|
18
|
-
"ref-napi": "^3.0.1",
|
19
|
-
"ref-struct-di": "^1.1.1"
|
17
|
+
"koffi": "^2.8.9"
|
20
18
|
},
|
21
19
|
"scripts": {
|
22
20
|
"test": "mocha ./test/nodejs/",
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -7,25 +7,16 @@
|
|
7
7
|
******************************************************************************/
|
8
8
|
|
9
9
|
const os = require('os')
|
10
|
-
const ref = require('ref-napi')
|
11
|
-
const ffi = require('ffi-napi')
|
12
10
|
const path = require('path')
|
13
|
-
const
|
11
|
+
const koffi = require('koffi');
|
14
12
|
const EventEmitter = require('events').EventEmitter
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
*
|
23
|
-
* @private
|
24
|
-
*/
|
25
|
-
const _ConnectorOptions = StructType({
|
26
|
-
enable_on_data_event: ref.types.int,
|
27
|
-
one_based_sequence_indexing: ref.types.int
|
28
|
-
})
|
14
|
+
const _ConnectorOptions = koffi.struct('RTI_Connector_Options', {
|
15
|
+
enable_on_data_event: 'int',
|
16
|
+
one_based_sequence_indexing: 'int'
|
17
|
+
});
|
18
|
+
|
19
|
+
const RTI_HANDLE = koffi.pointer('RTI_HANDLE', koffi.opaque());
|
29
20
|
|
30
21
|
// We ignore the loading of the libraries in code coverage since it is
|
31
22
|
// not easily testable
|
@@ -70,7 +61,6 @@ class _ConnectorBinding {
|
|
70
61
|
case 'win32':
|
71
62
|
libDir = 'win-x64'
|
72
63
|
libName = 'rtiddsconnector.dll'
|
73
|
-
additionalLib = 'vcruntime140.dll'
|
74
64
|
isWindows = true
|
75
65
|
break
|
76
66
|
default:
|
@@ -85,95 +75,66 @@ class _ConnectorBinding {
|
|
85
75
|
console.log('Warning: 32-bit ' + os.platform() + ' is not supported')
|
86
76
|
}
|
87
77
|
|
88
|
-
|
89
|
-
try {
|
90
|
-
ffi.Library(path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', additionalLib))
|
91
|
-
} catch (_) {
|
92
|
-
// ignore this error and try to run without explicitly loading the VC++ runtime
|
93
|
-
}
|
94
|
-
}
|
78
|
+
this.library = path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', libName)
|
95
79
|
|
96
|
-
|
97
|
-
if (isWindows) {
|
98
|
-
ffi.Library(path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', 'nddscore.dll'))
|
99
|
-
ffi.Library(path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', 'nddsc.dll'))
|
100
|
-
}
|
80
|
+
this.api = koffi.load(this.library);
|
101
81
|
|
102
|
-
this.library = path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', libName)
|
103
82
|
// Obtain FFI'd methods for all of the APIs which we require from the binding,
|
104
83
|
// specifying the argument types and return types. If any of the types are
|
105
84
|
// not builtin Node types then we have to use the ref module to represent them.
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
85
|
+
|
86
|
+
const RTI_Connector_free_string = this.api.func('RTI_Connector_free_string', 'void', ['char *']);
|
87
|
+
const AllocatedString = koffi.disposable('AllocatedString', 'string', RTI_Connector_free_string);
|
88
|
+
|
89
|
+
this.RTI_Connector_new = this.api.func('RTI_Connector_new', RTI_HANDLE, ['string', 'string', koffi.pointer(_ConnectorOptions)]);
|
90
|
+
this.RTI_Connector_delete = this.api.func('RTI_Connector_delete', 'void', ['RTI_HANDLE']);
|
91
|
+
this.RTI_Connector_get_datawriter = this.api.func('RTI_Connector_get_datawriter', 'RTI_HANDLE', ['RTI_HANDLE', 'string']);
|
92
|
+
this.RTI_Connector_get_datareader = this.api.func('RTI_Connector_get_datareader', 'RTI_HANDLE', ['RTI_HANDLE', 'string']);
|
93
|
+
this.RTI_Connector_get_native_sample = this.api.func('RTI_Connector_get_native_sample', 'RTI_HANDLE', ['RTI_HANDLE', 'string', 'int']);
|
94
|
+
this.RTI_Connector_set_number_into_samples = this.api.func('RTI_Connector_set_number_into_samples', 'int', ['RTI_HANDLE', 'string', 'string', 'double']);
|
95
|
+
this.RTI_Connector_set_boolean_into_samples = this.api.func('RTI_Connector_set_boolean_into_samples', 'int', ['RTI_HANDLE', 'string', 'string', 'bool']);
|
96
|
+
this.RTI_Connector_set_string_into_samples = this.api.func('RTI_Connector_set_string_into_samples', 'int', ['RTI_HANDLE', 'string', 'string', 'string']);
|
97
|
+
this.RTI_Connector_clear_member = this.api.func('RTI_Connector_clear_member', 'int', ['RTI_HANDLE', 'string', 'string']);
|
98
|
+
this.RTI_Connector_write = this.api.func('RTI_Connector_write', 'int', ['RTI_HANDLE', 'string', 'string']);
|
99
|
+
this.RTI_Connector_wait_for_acknowledgments = this.api.func('RTI_Connector_wait_for_acknowledgments', 'int', ['RTI_HANDLE', 'int']);
|
100
|
+
this.RTI_Connector_read = this.api.func('RTI_Connector_read', 'int', ['RTI_HANDLE', 'string']);
|
101
|
+
this.RTI_Connector_take = this.api.func('RTI_Connector_take', 'int', ['RTI_HANDLE', 'string']);
|
102
|
+
this.RTI_Connector_wait_for_data = this.api.func('RTI_Connector_wait_for_data', 'int', ['RTI_HANDLE', 'int']);
|
103
|
+
this.RTI_Connector_wait_for_data_on_reader = this.api.func('RTI_Connector_wait_for_data_on_reader', 'int', ['RTI_HANDLE', 'int']);
|
104
|
+
this.RTI_Connector_wait_for_matched_publication = this.api.func('RTI_Connector_wait_for_matched_publication', 'int', ['RTI_HANDLE', 'int', koffi.out(koffi.pointer('int'))]);
|
105
|
+
this.RTI_Connector_wait_for_matched_subscription = this.api.func('RTI_Connector_wait_for_matched_subscription', 'int', ['RTI_HANDLE', 'int', koffi.out(koffi.pointer('int'))]);
|
106
|
+
this.RTI_Connector_get_matched_subscriptions = this.api.func('RTI_Connector_get_matched_subscriptions', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer(AllocatedString))]);
|
107
|
+
this.RTI_Connector_get_matched_publications = this.api.func('RTI_Connector_get_matched_publications', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer(AllocatedString))]);
|
108
|
+
this.RTI_Connector_clear = this.api.func('RTI_Connector_clear', 'int', ['RTI_HANDLE', 'string']);
|
109
|
+
this.RTI_Connector_get_boolean_from_infos = this.api.func('RTI_Connector_get_boolean_from_infos', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer('bool')), 'string', 'int', 'string']);
|
110
|
+
this.RTI_Connector_get_json_from_infos = this.api.func('RTI_Connector_get_json_from_infos', 'int', ['RTI_HANDLE', 'string', 'int', 'string', koffi.out(koffi.pointer(AllocatedString))]);
|
111
|
+
this.RTI_Connector_get_sample_count = this.api.func('RTI_Connector_get_sample_count', 'int', ['RTI_HANDLE', 'string', koffi.out(koffi.pointer('double'))]);
|
112
|
+
this.RTI_Connector_get_number_from_sample = this.api.func('RTI_Connector_get_number_from_sample', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer('double')), 'string', 'int', 'string']);
|
113
|
+
this.RTI_Connector_get_boolean_from_sample = this.api.func('RTI_Connector_get_boolean_from_sample', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer('int')), 'string', 'int', 'string']);
|
114
|
+
this.RTI_Connector_get_string_from_sample = this.api.func('RTI_Connector_get_string_from_sample', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer(AllocatedString)), 'string', 'int', 'string']);
|
115
|
+
this.RTI_Connector_get_any_from_sample = this.api.func('RTI_Connector_get_any_from_sample', 'int', ['RTI_HANDLE',koffi.out(koffi.pointer('double')), koffi.out(koffi.pointer('int')), koffi.out(koffi.pointer(AllocatedString)), koffi.out(koffi.pointer('int')), 'string', 'int', 'string']);
|
116
|
+
this.RTI_Connector_get_any_from_info = this.api.func('RTI_Connector_get_any_from_info', 'int', ['RTI_HANDLE', koffi.out(koffi.pointer('double')), koffi.out(koffi.pointer('int')), koffi.out(koffi.pointer(AllocatedString)), koffi.out(koffi.pointer('int')), 'string', 'int', 'string']);
|
117
|
+
this.RTI_Connector_get_json_sample = this.api.func('RTI_Connector_get_json_sample', 'int', ['RTI_HANDLE', 'string', 'int', koffi.out(koffi.pointer(AllocatedString))]);
|
118
|
+
this.RTI_Connector_get_json_member = this.api.func('RTI_Connector_get_json_member', 'int', ['RTI_HANDLE', 'string', 'int', 'string', koffi.out(koffi.pointer(AllocatedString))]);
|
119
|
+
this.RTI_Connector_set_json_instance = this.api.func('RTI_Connector_set_json_instance', 'int', ['RTI_HANDLE', 'string', 'string']);
|
120
|
+
this.RTI_Connector_get_last_error_message = this.api.func('RTI_Connector_get_last_error_message', AllocatedString, []);
|
121
|
+
this.RTI_Connector_get_native_instance = this.api.func('RTI_Connector_get_native_instance', 'int', ['RTI_HANDLE', 'string', koffi.out(koffi.pointer(RTI_HANDLE))]);
|
122
|
+
this.RTIDDSConnector_getJSONInstance = this.api.func('RTIDDSConnector_getJSONInstance', AllocatedString, ['RTI_HANDLE', 'string']);
|
142
123
|
// This API is only used in the unit tests
|
143
|
-
RTI_Connector_create_test_scenario
|
144
|
-
RTI_Connector_get_build_versions
|
145
|
-
})
|
124
|
+
this.RTI_Connector_create_test_scenario = this.api.func('RTI_Connector_create_test_scenario', 'int', ['RTI_HANDLE', 'int', 'RTI_HANDLE']);
|
125
|
+
this.RTI_Connector_get_build_versions = this.api.func('RTI_Connector_get_build_versions', 'int', [koffi.out(koffi.pointer('string')), koffi.out(koffi.pointer('string'))]);
|
146
126
|
}
|
147
127
|
}
|
148
128
|
|
149
129
|
// Create an instance of the connectorBinding class, allowing us to call the FFI'd methods
|
150
130
|
const connectorBinding = new _ConnectorBinding()
|
151
131
|
|
152
|
-
/**
|
153
|
-
* Copies a natively allocated string into a Node.js string and frees the
|
154
|
-
* native memory.
|
155
|
-
*
|
156
|
-
* @param {Buffer} cstring - The string returned by the core
|
157
|
-
*
|
158
|
-
* @private
|
159
|
-
*/
|
160
|
-
function _moveCString (cstring) {
|
161
|
-
const ret = ref.readCString(cstring)
|
162
|
-
connectorBinding.api.RTI_Connector_free_string(cstring)
|
163
|
-
return ret
|
164
|
-
}
|
165
|
-
|
166
132
|
/**
|
167
133
|
* Obtains the last error message from the *RTI Connext DDS* Core
|
168
134
|
* @private
|
169
135
|
*/
|
170
136
|
function _getLastDdsErrorMessage () {
|
171
|
-
|
172
|
-
if (cStr !== null) {
|
173
|
-
return _moveCString(cStr)
|
174
|
-
} else {
|
175
|
-
return ''
|
176
|
-
}
|
137
|
+
return connectorBinding.RTI_Connector_get_last_error_message()
|
177
138
|
}
|
178
139
|
|
179
140
|
/**
|
@@ -297,10 +258,10 @@ function _isNumber (value) {
|
|
297
258
|
* @private
|
298
259
|
*/
|
299
260
|
function _getAnyValue (getter, connector, inputName, index, fieldName) {
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
let selection =
|
261
|
+
let numberVal = [null]
|
262
|
+
let boolVal = [null]
|
263
|
+
let stringVal = [null]
|
264
|
+
let selection = [null]
|
304
265
|
const retcode = getter(
|
305
266
|
connector,
|
306
267
|
numberVal,
|
@@ -314,13 +275,13 @@ function _getAnyValue (getter, connector, inputName, index, fieldName) {
|
|
314
275
|
if (retcode === _ReturnCodes.noData) {
|
315
276
|
return null
|
316
277
|
}
|
317
|
-
selection = selection
|
278
|
+
selection = selection[0]
|
318
279
|
if (selection === _AnyValueKind.connector_number) {
|
319
|
-
return numberVal
|
280
|
+
return numberVal[0]
|
320
281
|
} else if (selection === _AnyValueKind.connector_boolean) {
|
321
|
-
return !!boolVal
|
282
|
+
return !!boolVal[0]
|
322
283
|
} else if (selection === _AnyValueKind.connector_string) {
|
323
|
-
const nodeStr =
|
284
|
+
const nodeStr = stringVal[0]
|
324
285
|
// If this is NOT a numeric string, try to convert the returned string to a
|
325
286
|
// JSON object. We can now return one of two things:
|
326
287
|
// - An actual string (if the JSON.parse call fails)
|
@@ -358,13 +319,13 @@ class Infos {
|
|
358
319
|
* @private
|
359
320
|
*/
|
360
321
|
getLength () {
|
361
|
-
|
362
|
-
const retcode = connectorBinding.
|
322
|
+
let length = [null];
|
323
|
+
const retcode = connectorBinding.RTI_Connector_get_sample_count(
|
363
324
|
this.input.connector.native,
|
364
325
|
this.input.name,
|
365
326
|
length)
|
366
327
|
_checkRetcode(retcode)
|
367
|
-
return length
|
328
|
+
return length[0]
|
368
329
|
}
|
369
330
|
|
370
331
|
/**
|
@@ -381,8 +342,8 @@ class Infos {
|
|
381
342
|
} else {
|
382
343
|
// Increment index since Lua arrays are 1-indexed
|
383
344
|
index += 1
|
384
|
-
|
385
|
-
const retcode = connectorBinding.
|
345
|
+
let value = [null]
|
346
|
+
const retcode = connectorBinding.RTI_Connector_get_boolean_from_infos(
|
386
347
|
this.input.connector.native,
|
387
348
|
value,
|
388
349
|
this.input.name,
|
@@ -392,7 +353,7 @@ class Infos {
|
|
392
353
|
if (retcode === _ReturnCodes.noData) {
|
393
354
|
return null
|
394
355
|
}
|
395
|
-
return value
|
356
|
+
return value[0]
|
396
357
|
}
|
397
358
|
}
|
398
359
|
}
|
@@ -427,7 +388,7 @@ class SampleIterator {
|
|
427
388
|
* contains valid data.
|
428
389
|
* @property {SampleInfo} infos - The meta-data associated with the
|
429
390
|
* current sample.
|
430
|
-
* @property {
|
391
|
+
* @property {RTI_HANDLE} native - A native handle that allows accessing
|
431
392
|
* additional *Connext DDS* APIs in C.
|
432
393
|
*/
|
433
394
|
constructor (input, index) {
|
@@ -553,9 +514,9 @@ class SampleIterator {
|
|
553
514
|
}
|
554
515
|
|
555
516
|
/**
|
556
|
-
* The native
|
517
|
+
* The native RTI_HANDLE to the DynamicData sample.
|
557
518
|
*
|
558
|
-
* @type {
|
519
|
+
* @type {RTI_HANDLE}
|
559
520
|
* @private
|
560
521
|
*/
|
561
522
|
get native () {
|
@@ -774,8 +735,8 @@ class Samples {
|
|
774
735
|
* @private
|
775
736
|
*/
|
776
737
|
getLength () {
|
777
|
-
|
778
|
-
const retcode = connectorBinding.
|
738
|
+
let length = [null]
|
739
|
+
const retcode = connectorBinding.RTI_Connector_get_sample_count(
|
779
740
|
this.input.connector.native,
|
780
741
|
this.input.name,
|
781
742
|
length)
|
@@ -783,7 +744,7 @@ class Samples {
|
|
783
744
|
// We use ~~ to convert from double -> int. This is required to allow:
|
784
745
|
// for (var i =0; i < input.samples.getLength(); ++i)
|
785
746
|
// It works since we are doing a bitwise complement (double not).
|
786
|
-
return ~~length
|
747
|
+
return ~~length[0]
|
787
748
|
}
|
788
749
|
|
789
750
|
/**
|
@@ -803,8 +764,8 @@ class Samples {
|
|
803
764
|
} else {
|
804
765
|
// Increment index since C API is based on Lua with 1-based indexes
|
805
766
|
index += 1
|
806
|
-
|
807
|
-
const retcode = connectorBinding.
|
767
|
+
let value = [null]
|
768
|
+
const retcode = connectorBinding.RTI_Connector_get_number_from_sample(
|
808
769
|
this.input.connector.native,
|
809
770
|
value,
|
810
771
|
this.input.name,
|
@@ -815,7 +776,7 @@ class Samples {
|
|
815
776
|
if (retcode === _ReturnCodes.noData) {
|
816
777
|
return null
|
817
778
|
} else {
|
818
|
-
return value
|
779
|
+
return value[0]
|
819
780
|
}
|
820
781
|
}
|
821
782
|
}
|
@@ -837,8 +798,8 @@ class Samples {
|
|
837
798
|
} else {
|
838
799
|
// Increment index since C API is based on Lua with 1-based indexes
|
839
800
|
index += 1
|
840
|
-
|
841
|
-
const retcode = connectorBinding.
|
801
|
+
let value = [null]
|
802
|
+
const retcode = connectorBinding.RTI_Connector_get_boolean_from_sample(
|
842
803
|
this.input.connector.native,
|
843
804
|
value,
|
844
805
|
this.input.name,
|
@@ -849,7 +810,7 @@ class Samples {
|
|
849
810
|
if (retcode === _ReturnCodes.noData) {
|
850
811
|
return null
|
851
812
|
} else {
|
852
|
-
return value
|
813
|
+
return value[0]
|
853
814
|
}
|
854
815
|
}
|
855
816
|
}
|
@@ -871,8 +832,8 @@ class Samples {
|
|
871
832
|
} else {
|
872
833
|
// Increment index since C API is based on Lua with 1-based indexes
|
873
834
|
index += 1
|
874
|
-
|
875
|
-
const retcode = connectorBinding.
|
835
|
+
let value = [null]
|
836
|
+
const retcode = connectorBinding.RTI_Connector_get_string_from_sample(
|
876
837
|
this.input.connector.native,
|
877
838
|
value,
|
878
839
|
this.input.name,
|
@@ -882,7 +843,7 @@ class Samples {
|
|
882
843
|
if (retcode === _ReturnCodes.noData) {
|
883
844
|
return null
|
884
845
|
} else {
|
885
|
-
return
|
846
|
+
return value[0]
|
886
847
|
}
|
887
848
|
}
|
888
849
|
}
|
@@ -905,7 +866,7 @@ class Samples {
|
|
905
866
|
throw new TypeError('fieldName must be a string')
|
906
867
|
} else {
|
907
868
|
return _getAnyValue(
|
908
|
-
connectorBinding.
|
869
|
+
connectorBinding.RTI_Connector_get_any_from_sample,
|
909
870
|
this.input.connector.native,
|
910
871
|
this.input.name,
|
911
872
|
index,
|
@@ -930,7 +891,7 @@ class Samples {
|
|
930
891
|
} else {
|
931
892
|
// Increment index since Lua arrays are 1-indexed
|
932
893
|
index += 1
|
933
|
-
|
894
|
+
let str = [null]
|
934
895
|
let retcode = _ReturnCodes.noData
|
935
896
|
// memberName is "optional" - if supplied we will get the JSON object for
|
936
897
|
// a specific complex member in the sample
|
@@ -938,25 +899,25 @@ class Samples {
|
|
938
899
|
if (!_isString(memberName)) {
|
939
900
|
throw new TypeError('memberName must be a string')
|
940
901
|
} else {
|
941
|
-
retcode = connectorBinding.
|
902
|
+
retcode = connectorBinding.RTI_Connector_get_json_member(
|
942
903
|
this.input.connector.native,
|
943
904
|
this.input.name,
|
944
905
|
index,
|
945
906
|
memberName,
|
946
|
-
|
907
|
+
str)
|
947
908
|
}
|
948
909
|
} else {
|
949
|
-
retcode = connectorBinding.
|
910
|
+
retcode = connectorBinding.RTI_Connector_get_json_sample(
|
950
911
|
this.input.connector.native,
|
951
912
|
this.input.name,
|
952
913
|
index,
|
953
|
-
|
914
|
+
str)
|
954
915
|
}
|
955
916
|
_checkRetcode(retcode)
|
956
917
|
if (retcode === _ReturnCodes.noData) {
|
957
918
|
return null
|
958
919
|
}
|
959
|
-
return JSON.parse(
|
920
|
+
return JSON.parse(str[0])
|
960
921
|
}
|
961
922
|
}
|
962
923
|
|
@@ -965,8 +926,8 @@ class Samples {
|
|
965
926
|
* additional *Connext DDS* APIs in C.
|
966
927
|
*
|
967
928
|
* @param {number} index The index of the sample for which to obtain
|
968
|
-
* the native
|
969
|
-
* @returns {
|
929
|
+
* the native RTI_HANDLE.
|
930
|
+
* @returns {RTI_HANDLE} A native RTI_HANDLE to the sample.
|
970
931
|
*/
|
971
932
|
getNative (index) {
|
972
933
|
if (!_isValidIndex(index)) {
|
@@ -974,7 +935,7 @@ class Samples {
|
|
974
935
|
} else {
|
975
936
|
// Increment index since Lua arrays are 1-indexed
|
976
937
|
index += 1
|
977
|
-
return connectorBinding.
|
938
|
+
return connectorBinding.RTI_Connector_get_native_sample(
|
978
939
|
this.input.connector.native,
|
979
940
|
this.input.name,
|
980
941
|
index)
|
@@ -1035,7 +996,7 @@ class SampleInfo {
|
|
1035
996
|
throw new TypeError('fieldName must be a string')
|
1036
997
|
} else {
|
1037
998
|
return _getAnyValue(
|
1038
|
-
connectorBinding.
|
999
|
+
connectorBinding.RTI_Connector_get_any_from_info,
|
1039
1000
|
this.input.connector.native,
|
1040
1001
|
this.input.name,
|
1041
1002
|
this.index,
|
@@ -1057,7 +1018,7 @@ class Input {
|
|
1057
1018
|
* * connector (:class:`Connector`) - The Connector creates this Input.
|
1058
1019
|
* * name (string) - The name of the Input (the name used in
|
1059
1020
|
* :meth:`Connector.getInput`).
|
1060
|
-
* * native (
|
1021
|
+
* * native (RTI_HANDLE) - A native handle that allows accessing additional
|
1061
1022
|
* *Connext DDS* APIs in C.
|
1062
1023
|
* * matchedPublications (JSON) - A JSON object containing information
|
1063
1024
|
* about all the publications currently matched with this Input.
|
@@ -1065,10 +1026,10 @@ class Input {
|
|
1065
1026
|
constructor (connector, name) {
|
1066
1027
|
this.connector = connector
|
1067
1028
|
this.name = name
|
1068
|
-
this.native = connectorBinding.
|
1029
|
+
this.native = connectorBinding.RTI_Connector_get_datareader(
|
1069
1030
|
this.connector.native,
|
1070
1031
|
this.name)
|
1071
|
-
if (this.native
|
1032
|
+
if (this.native == null) {
|
1072
1033
|
throw new Error('Invalid Subscription::DataReader name')
|
1073
1034
|
}
|
1074
1035
|
// We use the '_' since samples is the name of the property and we want
|
@@ -1092,7 +1053,7 @@ class Input {
|
|
1092
1053
|
* operation has been called.
|
1093
1054
|
*/
|
1094
1055
|
read () {
|
1095
|
-
_checkRetcode(connectorBinding.
|
1056
|
+
_checkRetcode(connectorBinding.RTI_Connector_read(
|
1096
1057
|
this.connector.native,
|
1097
1058
|
this.name))
|
1098
1059
|
}
|
@@ -1104,7 +1065,7 @@ class Input {
|
|
1104
1065
|
* :meth:`Input.samples`.
|
1105
1066
|
*/
|
1106
1067
|
take () {
|
1107
|
-
_checkRetcode(connectorBinding.
|
1068
|
+
_checkRetcode(connectorBinding.RTI_Connector_take(
|
1108
1069
|
this.connector.native,
|
1109
1070
|
this.name))
|
1110
1071
|
}
|
@@ -1152,8 +1113,8 @@ class Input {
|
|
1152
1113
|
throw new Error('Can not concurrently wait on the same Input')
|
1153
1114
|
} else {
|
1154
1115
|
this.waitSetBusy = true
|
1155
|
-
|
1156
|
-
connectorBinding.
|
1116
|
+
let currentChangeCount = [null]
|
1117
|
+
connectorBinding.RTI_Connector_wait_for_matched_publication.async(
|
1157
1118
|
this.native,
|
1158
1119
|
timeout,
|
1159
1120
|
currentChangeCount,
|
@@ -1162,7 +1123,7 @@ class Input {
|
|
1162
1123
|
if (err) {
|
1163
1124
|
return reject(err)
|
1164
1125
|
} else if (res === _ReturnCodes.ok) {
|
1165
|
-
return resolve(currentChangeCount
|
1126
|
+
return resolve(currentChangeCount[0])
|
1166
1127
|
} else if (res === _ReturnCodes.timeout) {
|
1167
1128
|
return reject(new TimeoutError('Timeout error'))
|
1168
1129
|
} else {
|
@@ -1191,12 +1152,12 @@ class Input {
|
|
1191
1152
|
* @type {JSON}
|
1192
1153
|
*/
|
1193
1154
|
get matchedPublications () {
|
1194
|
-
|
1195
|
-
const retcode = connectorBinding.
|
1155
|
+
let str = [null]
|
1156
|
+
const retcode = connectorBinding.RTI_Connector_get_matched_publications(
|
1196
1157
|
this.native,
|
1197
|
-
|
1158
|
+
str)
|
1198
1159
|
_checkRetcode(retcode)
|
1199
|
-
return JSON.parse(
|
1160
|
+
return JSON.parse(str[0])
|
1200
1161
|
}
|
1201
1162
|
|
1202
1163
|
/**
|
@@ -1224,7 +1185,7 @@ class Input {
|
|
1224
1185
|
throw new Error('Can not concurrently wait on the same Input')
|
1225
1186
|
} else {
|
1226
1187
|
this.waitSetBusy = true
|
1227
|
-
connectorBinding.
|
1188
|
+
connectorBinding.RTI_Connector_wait_for_data_on_reader.async(
|
1228
1189
|
this.native,
|
1229
1190
|
timeout,
|
1230
1191
|
(err, res) => {
|
@@ -1258,7 +1219,7 @@ class Instance {
|
|
1258
1219
|
* Attributes:
|
1259
1220
|
* * ``output`` (:class:`Output`) - The :class:`Output` that owns
|
1260
1221
|
* this Instance.
|
1261
|
-
* * ``native`` (
|
1222
|
+
* * ``native`` (RTI_HANDLE) - Native handle to this Instance that allows
|
1262
1223
|
* for additional *Connext DDS Pro* C APIs to be called.
|
1263
1224
|
*/
|
1264
1225
|
constructor (output) {
|
@@ -1277,7 +1238,7 @@ class Instance {
|
|
1277
1238
|
if (!_isString(fieldName)) {
|
1278
1239
|
throw new TypeError('fieldName must be a string')
|
1279
1240
|
} else {
|
1280
|
-
const retcode = connectorBinding.
|
1241
|
+
const retcode = connectorBinding.RTI_Connector_clear_member(
|
1281
1242
|
this.output.connector.native,
|
1282
1243
|
this.output.name,
|
1283
1244
|
fieldName)
|
@@ -1307,7 +1268,7 @@ class Instance {
|
|
1307
1268
|
throw new TypeError('value must be a number')
|
1308
1269
|
}
|
1309
1270
|
} else {
|
1310
|
-
_checkRetcode(connectorBinding.
|
1271
|
+
_checkRetcode(connectorBinding.RTI_Connector_set_number_into_samples(
|
1311
1272
|
this.output.connector.native,
|
1312
1273
|
this.output.name,
|
1313
1274
|
fieldName,
|
@@ -1332,7 +1293,7 @@ class Instance {
|
|
1332
1293
|
throw new TypeError('value must be a boolean')
|
1333
1294
|
}
|
1334
1295
|
} else {
|
1335
|
-
const retcode = connectorBinding.
|
1296
|
+
const retcode = connectorBinding.RTI_Connector_set_boolean_into_samples(
|
1336
1297
|
this.output.connector.native,
|
1337
1298
|
this.output.name,
|
1338
1299
|
fieldName,
|
@@ -1358,7 +1319,7 @@ class Instance {
|
|
1358
1319
|
throw new TypeError('value must be a boolean')
|
1359
1320
|
}
|
1360
1321
|
} else {
|
1361
|
-
const retcode = connectorBinding.
|
1322
|
+
const retcode = connectorBinding.RTI_Connector_set_string_into_samples(
|
1362
1323
|
this.output.connector.native,
|
1363
1324
|
this.output.name,
|
1364
1325
|
fieldName,
|
@@ -1387,7 +1348,7 @@ class Instance {
|
|
1387
1348
|
* (field names) and values (values for the fields).
|
1388
1349
|
*/
|
1389
1350
|
setFromJson (jsonObj) {
|
1390
|
-
_checkRetcode(connectorBinding.
|
1351
|
+
_checkRetcode(connectorBinding.RTI_Connector_set_json_instance(
|
1391
1352
|
this.output.connector.native,
|
1392
1353
|
this.output.name,
|
1393
1354
|
JSON.stringify(jsonObj)))
|
@@ -1442,14 +1403,13 @@ class Instance {
|
|
1442
1403
|
* @returns {JSON} The value of this instance as a JSON object.
|
1443
1404
|
*/
|
1444
1405
|
getJson () {
|
1445
|
-
const
|
1406
|
+
const result = connectorBinding.RTIDDSConnector_getJSONInstance(
|
1446
1407
|
this.output.connector.native,
|
1447
1408
|
this.output.name)
|
1448
|
-
|
1449
|
-
if (nativeStr === null) {
|
1409
|
+
if (result === null) {
|
1450
1410
|
throw new Error('Failed to create JSON object of instance')
|
1451
1411
|
} else {
|
1452
|
-
return JSON.parse(
|
1412
|
+
return JSON.parse(result)
|
1453
1413
|
}
|
1454
1414
|
}
|
1455
1415
|
|
@@ -1467,16 +1427,16 @@ class Instance {
|
|
1467
1427
|
* The native C object.
|
1468
1428
|
*
|
1469
1429
|
* This property allows accessing additional *Connext DDS* APIs in C.
|
1470
|
-
* @type {
|
1430
|
+
* @type {RTI_HANDLE}
|
1471
1431
|
*/
|
1472
1432
|
get native () {
|
1473
|
-
|
1474
|
-
const retcode = connectorBinding.
|
1433
|
+
let nativePointer = [null]
|
1434
|
+
const retcode = connectorBinding.RTI_Connector_get_native_instance(
|
1475
1435
|
this.output.connector.native,
|
1476
1436
|
this.output.name,
|
1477
1437
|
nativePointer)
|
1478
1438
|
_checkRetcode(retcode)
|
1479
|
-
return nativePointer
|
1439
|
+
return nativePointer[0]
|
1480
1440
|
}
|
1481
1441
|
}
|
1482
1442
|
|
@@ -1496,7 +1456,7 @@ class Output {
|
|
1496
1456
|
* that created this object.
|
1497
1457
|
* * ``name`` (str) - The name of this Output (the name used in
|
1498
1458
|
* :meth:`Connector.getOutput`).
|
1499
|
-
* * ``native`` (
|
1459
|
+
* * ``native`` (RTI_HANDLE) - The native handle that allows accessing
|
1500
1460
|
* additional *Connext DDS* APIs in C.
|
1501
1461
|
* * ``matchedSubscriptions`` (JSON) - Information about matched
|
1502
1462
|
* subscriptions (see below).
|
@@ -1505,10 +1465,10 @@ class Output {
|
|
1505
1465
|
constructor (connector, name) {
|
1506
1466
|
this.connector = connector
|
1507
1467
|
this.name = name
|
1508
|
-
this.native = connectorBinding.
|
1468
|
+
this.native = connectorBinding.RTI_Connector_get_datawriter(
|
1509
1469
|
this.connector.native,
|
1510
1470
|
this.name)
|
1511
|
-
if (this.native
|
1471
|
+
if (this.native == null) {
|
1512
1472
|
throw new Error('Invalid Publisher::DataWriter name')
|
1513
1473
|
}
|
1514
1474
|
this.instance = new Instance(this)
|
@@ -1551,16 +1511,16 @@ class Output {
|
|
1551
1511
|
* throws :class:`TimeoutError`.
|
1552
1512
|
*/
|
1553
1513
|
write (params) {
|
1554
|
-
let
|
1514
|
+
let str
|
1555
1515
|
if (params === undefined) {
|
1556
|
-
|
1516
|
+
str = null
|
1557
1517
|
} else {
|
1558
|
-
|
1518
|
+
str = JSON.stringify(params)
|
1559
1519
|
}
|
1560
|
-
_checkRetcode(connectorBinding.
|
1520
|
+
_checkRetcode(connectorBinding.RTI_Connector_write(
|
1561
1521
|
this.connector.native,
|
1562
1522
|
this.name,
|
1563
|
-
|
1523
|
+
str))
|
1564
1524
|
}
|
1565
1525
|
|
1566
1526
|
/**
|
@@ -1577,7 +1537,7 @@ class Output {
|
|
1577
1537
|
* y = 0
|
1578
1538
|
*/
|
1579
1539
|
clearMembers () {
|
1580
|
-
_checkRetcode(connectorBinding.
|
1540
|
+
_checkRetcode(connectorBinding.RTI_Connector_clear(
|
1581
1541
|
this.connector.native,
|
1582
1542
|
this.name))
|
1583
1543
|
}
|
@@ -1607,7 +1567,7 @@ class Output {
|
|
1607
1567
|
} else if (!_isNumber(timeout)) {
|
1608
1568
|
throw new TypeError('timeout must be a number')
|
1609
1569
|
}
|
1610
|
-
connectorBinding.
|
1570
|
+
connectorBinding.RTI_Connector_wait_for_acknowledgments.async(
|
1611
1571
|
this.native,
|
1612
1572
|
timeout,
|
1613
1573
|
(err, res) => {
|
@@ -1655,9 +1615,9 @@ class Output {
|
|
1655
1615
|
if (this.waitsetBusy) {
|
1656
1616
|
throw new Error('Can not concurrently wait on the same Output')
|
1657
1617
|
} else {
|
1658
|
-
|
1618
|
+
let currentChangeCount = [null]
|
1659
1619
|
this.waitsetBusy = true
|
1660
|
-
connectorBinding.
|
1620
|
+
connectorBinding.RTI_Connector_wait_for_matched_subscription.async(
|
1661
1621
|
this.native,
|
1662
1622
|
timeout,
|
1663
1623
|
currentChangeCount,
|
@@ -1666,7 +1626,7 @@ class Output {
|
|
1666
1626
|
if (err) {
|
1667
1627
|
return reject(err)
|
1668
1628
|
} else if (res === _ReturnCodes.ok) {
|
1669
|
-
return resolve(currentChangeCount
|
1629
|
+
return resolve(currentChangeCount[0])
|
1670
1630
|
} else if (res === _ReturnCodes.timeout) {
|
1671
1631
|
return reject(new TimeoutError('Timeout error'))
|
1672
1632
|
} else {
|
@@ -1694,12 +1654,12 @@ class Output {
|
|
1694
1654
|
* @type {JSON}
|
1695
1655
|
*/
|
1696
1656
|
get matchedSubscriptions () {
|
1697
|
-
|
1698
|
-
const retcode = connectorBinding.
|
1657
|
+
let str = [null]
|
1658
|
+
const retcode = connectorBinding.RTI_Connector_get_matched_subscriptions(
|
1699
1659
|
this.native,
|
1700
|
-
|
1660
|
+
str)
|
1701
1661
|
_checkRetcode(retcode)
|
1702
|
-
return JSON.parse(
|
1662
|
+
return JSON.parse(str[0])
|
1703
1663
|
}
|
1704
1664
|
|
1705
1665
|
/* istanbul ignore next */
|
@@ -1753,14 +1713,15 @@ class Connector extends EventEmitter {
|
|
1753
1713
|
*/
|
1754
1714
|
constructor (configName, url) {
|
1755
1715
|
super()
|
1756
|
-
const options =
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1716
|
+
const options = {
|
1717
|
+
one_based_sequence_indexing: 0,
|
1718
|
+
enable_on_data_event: 1
|
1719
|
+
};
|
1720
|
+
this.native = connectorBinding.RTI_Connector_new(
|
1760
1721
|
configName,
|
1761
1722
|
url,
|
1762
|
-
options
|
1763
|
-
if (this.native
|
1723
|
+
options)
|
1724
|
+
if (this.native == null) {
|
1764
1725
|
throw new Error('Invalid participant profile, xml path or xml profile')
|
1765
1726
|
}
|
1766
1727
|
this.on('newListener', this.newListenerCallBack)
|
@@ -1798,7 +1759,7 @@ class Connector extends EventEmitter {
|
|
1798
1759
|
// is also used by the waitForCallbackFinalization API, and in that case we
|
1799
1760
|
// should not delete anything
|
1800
1761
|
if (cleanup) {
|
1801
|
-
connectorBinding.
|
1762
|
+
connectorBinding.RTI_Connector_delete(this.native)
|
1802
1763
|
this.native = null
|
1803
1764
|
}
|
1804
1765
|
// Call the resolve() callback of the passed promise
|
@@ -1965,7 +1926,7 @@ class Connector extends EventEmitter {
|
|
1965
1926
|
throw new Error('Can not concurrently wait on the same Connector object')
|
1966
1927
|
} else {
|
1967
1928
|
this.waitSetBusy = true
|
1968
|
-
connectorBinding.
|
1929
|
+
connectorBinding.RTI_Connector_wait_for_data.async(
|
1969
1930
|
this.native,
|
1970
1931
|
timeout,
|
1971
1932
|
(err, res) => {
|
@@ -2103,17 +2064,17 @@ class Connector extends EventEmitter {
|
|
2103
2064
|
// Parse numbers out of string
|
2104
2065
|
const versionNumbers = versionString.split('.')
|
2105
2066
|
// Now get the build IDs of the native libraries
|
2106
|
-
|
2107
|
-
|
2108
|
-
_checkRetcode(connectorBinding.
|
2067
|
+
let nativeConnectorVersion = [null]
|
2068
|
+
let nativeCoreCVersion = [null]
|
2069
|
+
_checkRetcode(connectorBinding.RTI_Connector_get_build_versions(
|
2109
2070
|
nativeCoreCVersion,
|
2110
2071
|
nativeConnectorVersion))
|
2111
2072
|
|
2112
2073
|
// Now create the string containing all of the above information
|
2113
2074
|
let versionStr = 'RTI Connector for JavaScript, version ' +
|
2114
2075
|
versionNumbers[0] + '.' + versionNumbers[1] + '.' + versionNumbers[2] + '\n'
|
2115
|
-
versionStr +=
|
2116
|
-
versionStr +=
|
2076
|
+
versionStr += nativeCoreCVersion[0] + '\n'
|
2077
|
+
versionStr += nativeConnectorVersion[0]
|
2117
2078
|
return versionStr
|
2118
2079
|
}
|
2119
2080
|
}
|