rticonnextdds-connector 1.1.0 → 1.2.0-rc5
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +22 -2
- 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.js +296 -236
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "rticonnextdds-connector",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.2.0-rc5",
|
4
4
|
"description": "RTI Connector for JavaScript",
|
5
5
|
"main": "rticonnextdds-connector.js",
|
6
6
|
"files": [
|
@@ -19,6 +19,14 @@
|
|
19
19
|
"ffi-napi": "^3.1.0",
|
20
20
|
"sleep": "^6.3.0"
|
21
21
|
},
|
22
|
+
"scripts": {
|
23
|
+
"test": "mocha ./test/nodejs/",
|
24
|
+
"test-ci": "mocha ./test/nodejs/ --reporter mocha-junit-reporter",
|
25
|
+
"coverage": "nyc --reporter=clover --reporter=lcov --reporter=text-summary --check-coverage npm run test",
|
26
|
+
"coverage-ci": "nyc --reporter=clover --reporter=lcov --reporter=text-summary --check-coverage npm run test-ci",
|
27
|
+
"lint": "eslint rticonnextdds-connector.js test/nodejs/ --ext .js",
|
28
|
+
"lint-fix": "eslint --fix rticonnextdds-connector.js test/nodejs/ --ext .js"
|
29
|
+
},
|
22
30
|
"keywords": [
|
23
31
|
"rti",
|
24
32
|
"dds",
|
@@ -33,5 +41,17 @@
|
|
33
41
|
"bugs": {
|
34
42
|
"url": "https://github.com/rticommunity/rticonnextdds-connector-js/issues"
|
35
43
|
},
|
36
|
-
"homepage": "https://github.com/rticommunity/rticonnextdds-connector-js"
|
44
|
+
"homepage": "https://github.com/rticommunity/rticonnextdds-connector-js",
|
45
|
+
"devDependencies": {
|
46
|
+
"babel-eslint": "^10.1.0",
|
47
|
+
"chai": "^4.3.4",
|
48
|
+
"chai-as-promised": "^7.1.1",
|
49
|
+
"eslint": "^7.29.0",
|
50
|
+
"eslint-config-standard": "^16.0.3",
|
51
|
+
"eslint-plugin-import": "^2.23.4",
|
52
|
+
"eslint-plugin-node": "^11.1.0",
|
53
|
+
"eslint-plugin-promise": "^5.1.0",
|
54
|
+
"nyc": "^15.1.0",
|
55
|
+
"sinon": "^10.0.0"
|
56
|
+
}
|
37
57
|
}
|
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
|
@@ -17,16 +17,19 @@ const EventEmitter = require('events').EventEmitter
|
|
17
17
|
* The Node.js representation of the RTI_Connector_Options structure within
|
18
18
|
* the core.
|
19
19
|
*
|
20
|
-
* We define it here using the module ref-struct (require above). This allows
|
20
|
+
* We define it here using the module ref-struct (require above). This allows
|
21
21
|
* us to pass it by value into the Core when creating a :class:`Connector` object.
|
22
22
|
*
|
23
23
|
* @private
|
24
24
|
*/
|
25
|
-
|
25
|
+
const _ConnectorOptions = StructType({
|
26
26
|
enable_on_data_event: ref.types.int,
|
27
27
|
one_based_sequence_indexing: ref.types.int
|
28
28
|
})
|
29
29
|
|
30
|
+
// We ignore the loading of the libraries in code coverage since it is
|
31
|
+
// not easily testable
|
32
|
+
/* istanbul ignore next */
|
30
33
|
class _ConnectorBinding {
|
31
34
|
constructor () {
|
32
35
|
let libDir = ''
|
@@ -36,50 +39,50 @@ class _ConnectorBinding {
|
|
36
39
|
|
37
40
|
// Obtain the name of the library that contains the Connector native libraries
|
38
41
|
if (os.arch() === 'arm64') {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
42
|
+
if (os.platform() === 'linux') {
|
43
|
+
libDir = 'linux-arm64'
|
44
|
+
libName = 'librtiddsconnector.so'
|
45
|
+
} else {
|
46
|
+
throw new Error('This platform (' + os.platform() + ' ' + os.arch() + ') is not supported')
|
47
|
+
}
|
48
|
+
} else if (os.arch() === 'arm') {
|
49
|
+
if (os.platform() === 'linux') {
|
50
|
+
libDir = 'linux-arm'
|
51
|
+
libName = 'librtiddsconnector.so'
|
52
|
+
} else {
|
53
|
+
throw new Error('This platform (' + os.platform() + ' ' + os.arch() + ') is not supported')
|
54
|
+
}
|
52
55
|
} else {
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
// Note that we are intentionally not checking if os.arch() is x64.
|
57
|
+
// This allows somebody with access to 32-bit libraries to replace them
|
58
|
+
// in the corresponding x64 directory and we will try to load them.
|
59
|
+
// This behaviour is not officially supported.
|
60
|
+
switch (os.platform()) {
|
58
61
|
case 'darwin':
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
+
libDir = 'osx-x64'
|
63
|
+
libName = 'librtiddsconnector.dylib'
|
64
|
+
break
|
62
65
|
case 'linux':
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
libDir = 'linux-x64'
|
67
|
+
libName = 'librtiddsconnector.so'
|
68
|
+
break
|
66
69
|
// Windows returns win32 even on 64-bit platforms
|
67
70
|
case 'win32':
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
71
|
+
libDir = 'win-x64'
|
72
|
+
libName = 'rtiddsconnector.dll'
|
73
|
+
additionalLib = 'msvcr120.dll'
|
74
|
+
isWindows = true
|
75
|
+
break
|
73
76
|
default:
|
74
|
-
|
75
|
-
|
77
|
+
throw new Error(os.platform() + ' not yet supported')
|
78
|
+
}
|
76
79
|
}
|
77
80
|
|
78
81
|
// Connector is not supported on a (non ARM) 32-bit platform
|
79
82
|
// We continue, incase the user has manually replaced the libraries within
|
80
83
|
// the directory which we are going to load.
|
81
84
|
if (os.arch() === 'ia32') {
|
82
|
-
|
85
|
+
console.log('Warning: 32-bit ' + os.platform() + ' is not supported')
|
83
86
|
}
|
84
87
|
|
85
88
|
if (additionalLib !== null) {
|
@@ -92,8 +95,8 @@ class _ConnectorBinding {
|
|
92
95
|
|
93
96
|
// On Windows we need to explicitly load the dependent libraries
|
94
97
|
if (isWindows) {
|
95
|
-
|
96
|
-
|
98
|
+
ffi.Library(path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', 'nddscore.dll'))
|
99
|
+
ffi.Library(path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', 'nddsc.dll'))
|
97
100
|
}
|
98
101
|
|
99
102
|
this.library = path.join(__dirname, '/rticonnextdds-connector/lib/', libDir, '/', libName)
|
@@ -138,13 +141,14 @@ class _ConnectorBinding {
|
|
138
141
|
RTI_Connector_set_max_objects_per_thread: ['int', ['int']],
|
139
142
|
RTIDDSConnector_getJSONInstance:['char *', ['pointer', 'string']],
|
140
143
|
// This API is only used in the unit tests
|
141
|
-
RTI_Connector_create_test_scenario: ['int', ['pointer', 'int', 'pointer']]
|
144
|
+
RTI_Connector_create_test_scenario: ['int', ['pointer', 'int', 'pointer']],
|
145
|
+
RTI_Connector_get_build_versions: ['int', [ref.refType('char *'), ref.refType('char *')]]
|
142
146
|
})
|
143
147
|
}
|
144
148
|
}
|
145
149
|
|
146
150
|
// Create an instance of the connectorBinding class, allowing us to call the FFI'd methods
|
147
|
-
|
151
|
+
const connectorBinding = new _ConnectorBinding()
|
148
152
|
|
149
153
|
/**
|
150
154
|
* Copies a natively allocated string into a Node.js string and frees the
|
@@ -222,7 +226,7 @@ class TimeoutError extends Error {
|
|
222
226
|
*/
|
223
227
|
class DDSError extends Error {
|
224
228
|
/**
|
225
|
-
* This error is thrown when an error is encountered from within one of the
|
229
|
+
* This error is thrown when an error is encountered from within one of the
|
226
230
|
* APIs within the *RTI Connext DDS* Core.
|
227
231
|
* @private
|
228
232
|
*/
|
@@ -236,7 +240,7 @@ class DDSError extends Error {
|
|
236
240
|
}
|
237
241
|
|
238
242
|
/**
|
239
|
-
* Checks the value returned by the functions in the core for success and
|
243
|
+
* Checks the value returned by the functions in the core for success and
|
240
244
|
* throws the appropriate error on failure.
|
241
245
|
*
|
242
246
|
* We do not handle DDS_RETCODE_NO_DATA here, since in some operations (those
|
@@ -318,13 +322,17 @@ function _getAnyValue (getter, connector, inputName, index, fieldName) {
|
|
318
322
|
return !!boolVal.deref()
|
319
323
|
} else if (selection === _AnyValueKind.connector_string) {
|
320
324
|
const nodeStr = _moveCString(stringVal.deref())
|
321
|
-
//
|
322
|
-
// one of two things:
|
325
|
+
// If this is NOT a numeric string, try to convert the returned string to a
|
326
|
+
// JSON object. We can now return one of two things:
|
323
327
|
// - An actual string (if the JSON.parse call fails)
|
324
328
|
// - A JSON object (if the JSON.parse call succeeds)
|
325
|
-
|
326
|
-
|
327
|
-
|
329
|
+
if (isNaN(nodeStr)) {
|
330
|
+
try {
|
331
|
+
return JSON.parse(nodeStr)
|
332
|
+
} catch (err) {
|
333
|
+
return nodeStr
|
334
|
+
}
|
335
|
+
} else {
|
328
336
|
return nodeStr
|
329
337
|
}
|
330
338
|
} else {
|
@@ -336,7 +344,7 @@ function _getAnyValue (getter, connector, inputName, index, fieldName) {
|
|
336
344
|
/**
|
337
345
|
* Provides access to the meta-data contained in samples read by an input.
|
338
346
|
*
|
339
|
-
* Note: The Infos class is deprecated and should not be used directly.
|
347
|
+
* Note: The Infos class is deprecated and should not be used directly.
|
340
348
|
* Instead, use :meth:`SampleIterator.info`.
|
341
349
|
*
|
342
350
|
* @private
|
@@ -363,7 +371,7 @@ class Infos {
|
|
363
371
|
/**
|
364
372
|
* Checks if the sample at the given index contains valid data.
|
365
373
|
*
|
366
|
-
* @param {number} index - The index of the sample in the :class:`Input`'s
|
374
|
+
* @param {number} index - The index of the sample in the :class:`Input`'s
|
367
375
|
* queue to check for valid data
|
368
376
|
* @returns{boolean} True if the sample contains valid data
|
369
377
|
* @private
|
@@ -399,14 +407,14 @@ class SampleIterator {
|
|
399
407
|
/**
|
400
408
|
* A SampleIterator provides access to the data receieved by an :class:`Input`.
|
401
409
|
*
|
402
|
-
* The :attr:`Input.samples` attribute implements a :class:`SampleIterator`,
|
403
|
-
* meaning it can be iterated over. An individual sample can be accessed
|
410
|
+
* The :attr:`Input.samples` attribute implements a :class:`SampleIterator`,
|
411
|
+
* meaning it can be iterated over. An individual sample can be accessed
|
404
412
|
* using :meth:`Input.samples.get`.
|
405
413
|
*
|
406
414
|
* See :class:`ValidSampleIterator`.
|
407
415
|
*
|
408
416
|
* This class provides both an iterator and iterable, and is used internally
|
409
|
-
* by the :class:`Samples` class. The following options to iterate over the
|
417
|
+
* by the :class:`Samples` class. The following options to iterate over the
|
410
418
|
* samples exist::
|
411
419
|
*
|
412
420
|
* // option 1 - The iterable can be used in for...of loops
|
@@ -416,11 +424,11 @@ class SampleIterator {
|
|
416
424
|
* // option 3 - Returns a generator which must be incremented by the application
|
417
425
|
* const iterator = input.samples.iterator()
|
418
426
|
*
|
419
|
-
* @property {boolean} validData - Whether or not the current sample
|
427
|
+
* @property {boolean} validData - Whether or not the current sample
|
420
428
|
* contains valid data.
|
421
|
-
* @property {SampleInfo} infos - The meta-data associated with the
|
429
|
+
* @property {SampleInfo} infos - The meta-data associated with the
|
422
430
|
* current sample.
|
423
|
-
* @property {pointer} native - A native handle that allows accessing
|
431
|
+
* @property {pointer} native - A native handle that allows accessing
|
424
432
|
* additional *Connext DDS* APIs in C.
|
425
433
|
*/
|
426
434
|
constructor (input, index) {
|
@@ -435,10 +443,10 @@ class SampleIterator {
|
|
435
443
|
/**
|
436
444
|
* Whether or not this sample contains valid data.
|
437
445
|
*
|
438
|
-
* If ``false``, the methods to obtain values of the samples
|
439
|
-
* (e.g., :meth:`SampleIterator.getNumber`,
|
440
|
-
* :meth:`SampleIterator.getBoolean`, :meth:`SampleIterator.getJson`,
|
441
|
-
* :meth:`SampleIterator.getString`) should not be called. To avoid
|
446
|
+
* If ``false``, the methods to obtain values of the samples
|
447
|
+
* (e.g., :meth:`SampleIterator.getNumber`,
|
448
|
+
* :meth:`SampleIterator.getBoolean`, :meth:`SampleIterator.getJson`,
|
449
|
+
* :meth:`SampleIterator.getString`) should not be called. To avoid
|
442
450
|
* this restraint, use a :class:`ValidSampleIterator`.
|
443
451
|
* @type {boolean}
|
444
452
|
*/
|
@@ -457,17 +465,17 @@ class SampleIterator {
|
|
457
465
|
*
|
458
466
|
* * ``'source_timestamp'`` returns an integer representing nanoseconds
|
459
467
|
* * ``'reception_timestamp'`` returns an integer representing nanoseconds
|
460
|
-
* * ``'sample_identity'`` or ``'identity'`` returns a JSON object
|
468
|
+
* * ``'sample_identity'`` or ``'identity'`` returns a JSON object
|
461
469
|
* (see :meth:`Output.write`)
|
462
|
-
* * ``'related_sample_identity'`` returns a JSON object
|
470
|
+
* * ``'related_sample_identity'`` returns a JSON object
|
463
471
|
* (see :meth:`Output.write`)
|
464
|
-
* * ``'valid_data'`` returns a boolean (equivalent to
|
472
|
+
* * ``'valid_data'`` returns a boolean (equivalent to
|
465
473
|
* :attr:`SampleIterator.validData`)
|
466
474
|
* * ``'view_state'``, returns a string (either "NEW" or "NOT_NEW")
|
467
475
|
* * ``'instance_state'``, returns a string (one of "ALIVE", "NOT_ALIVE_DISPOSED" or "NOT_ALIVE_NO_WRITERS")
|
468
476
|
* * ``'sample_state'``, returns a string (either "READ" or "NOT_READ")
|
469
477
|
*
|
470
|
-
* These fields are documented in `The SampleInfo Structure
|
478
|
+
* These fields are documented in `The SampleInfo Structure
|
471
479
|
* <https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/The_SampleInfo_Structure.htm>`__
|
472
480
|
* section in the *RTI Connext DDS Core Libraries User's Manual*.
|
473
481
|
*
|
@@ -482,7 +490,7 @@ class SampleIterator {
|
|
482
490
|
*
|
483
491
|
* See :ref:`Accessing the data samples`.
|
484
492
|
*
|
485
|
-
* @param {string} [memberName] - The name of the complex member or field
|
493
|
+
* @param {string} [memberName] - The name of the complex member or field
|
486
494
|
* to obtain.
|
487
495
|
* @returns {JSON} The obtained JSON object.
|
488
496
|
*/
|
@@ -493,6 +501,11 @@ class SampleIterator {
|
|
493
501
|
/**
|
494
502
|
* Gets the value of a numeric field in this sample.
|
495
503
|
*
|
504
|
+
* .. note::
|
505
|
+
* This operation should not be used with values with an aboslute value
|
506
|
+
* larger than `Number.MAX_SAFE_INTEGER`. See :ref:`Accessing 64-bit integers`
|
507
|
+
* for more information.
|
508
|
+
*
|
496
509
|
* @param {string} fieldName - The name of the field.
|
497
510
|
* @returns {number} The numeric value of the field.
|
498
511
|
*/
|
@@ -579,7 +592,7 @@ class SampleIterator {
|
|
579
592
|
/**
|
580
593
|
* Iterates and provides access to data samples with valid data.
|
581
594
|
*
|
582
|
-
* This iterator provides the same methods as :class:`SampleIterator`.
|
595
|
+
* This iterator provides the same methods as :class:`SampleIterator`.
|
583
596
|
* It can be obtained using :attr:`Input.samples.validDataIter`.
|
584
597
|
* @extends SampleIterator
|
585
598
|
*
|
@@ -619,12 +632,12 @@ class ValidSampleIterator extends SampleIterator {
|
|
619
632
|
*/
|
620
633
|
class Samples {
|
621
634
|
/**
|
622
|
-
* This class provides access to data samples read by an
|
623
|
-
* :class:`Input` (using either the :meth:`Input.read`
|
635
|
+
* This class provides access to data samples read by an
|
636
|
+
* :class:`Input` (using either the :meth:`Input.read`
|
624
637
|
* or :meth:`Input.take` methods).
|
625
638
|
*
|
626
|
-
* This class implements a ``[Symbol.iterator]()`` method, making it an
|
627
|
-
* iterable. This allows it to be used in ``for... of`` loops, to iterate
|
639
|
+
* This class implements a ``[Symbol.iterator]()`` method, making it an
|
640
|
+
* iterable. This allows it to be used in ``for... of`` loops, to iterate
|
628
641
|
* through available samples::
|
629
642
|
*
|
630
643
|
* for (const sample of input.samples) {
|
@@ -639,12 +652,12 @@ class Samples {
|
|
639
652
|
*
|
640
653
|
* The samples returned by these methods may only contain meta-data
|
641
654
|
* (see :attr:`SampleIterator.info`). The :attr:`Samples.validDataIter`
|
642
|
-
* iterable only iterates over samples that contain valid data
|
655
|
+
* iterable only iterates over samples that contain valid data
|
643
656
|
* (a :class:`ValidSampleIterator`).
|
644
657
|
*
|
645
|
-
* :class:`Samples` and :class:`ValidSampleIterator` both also provide
|
646
|
-
* generators to the samples, allowing applications to define their own
|
647
|
-
* iterables (see :meth:`Samples.iterator()` and
|
658
|
+
* :class:`Samples` and :class:`ValidSampleIterator` both also provide
|
659
|
+
* generators to the samples, allowing applications to define their own
|
660
|
+
* iterables (see :meth:`Samples.iterator()` and
|
648
661
|
* :meth:`ValidSampleIterator.iterator()`).
|
649
662
|
*
|
650
663
|
* ``Samples`` is the type of the property :meth:`Input.samples`.
|
@@ -652,9 +665,9 @@ class Samples {
|
|
652
665
|
* For more information and examples, see :ref:`Accessing the data samples`.
|
653
666
|
*
|
654
667
|
* Attributes:
|
655
|
-
* * length (number) - The number of samples available since the last time
|
668
|
+
* * length (number) - The number of samples available since the last time
|
656
669
|
* :meth:`Input.read` or :meth:`Input.take` was called.
|
657
|
-
* * validDataIter (:class:`ValidSampleIterator`) - The class used to
|
670
|
+
* * validDataIter (:class:`ValidSampleIterator`) - The class used to
|
658
671
|
* iterate through the available samples that have valid data.
|
659
672
|
*/
|
660
673
|
constructor (input) {
|
@@ -664,18 +677,18 @@ class Samples {
|
|
664
677
|
/**
|
665
678
|
* Returns an iterator to the data samples, starting at the index specified.
|
666
679
|
*
|
667
|
-
* The iterator provides access to all the data samples retrieved by the
|
680
|
+
* The iterator provides access to all the data samples retrieved by the
|
668
681
|
* most recent call to :meth:`Input.read` or :meth:`Input.take`.
|
669
682
|
*
|
670
|
-
* This iterator may return samples with invalid data (samples that only
|
683
|
+
* This iterator may return samples with invalid data (samples that only
|
671
684
|
* contain meta-data).
|
672
|
-
* Use :attr:`Samples.validDataIter` to avoid having to check
|
685
|
+
* Use :attr:`Samples.validDataIter` to avoid having to check
|
673
686
|
* :attr:`SampleIterator.validData`.
|
674
687
|
*
|
675
|
-
* @param {number} [index] The index of the sample from which the iteration
|
688
|
+
* @param {number} [index] The index of the sample from which the iteration
|
676
689
|
* should begin. By default, the iterator begins with the first sample.
|
677
690
|
*
|
678
|
-
* @returns :class:`SampleIterator` - An iterator to the samples (which
|
691
|
+
* @returns :class:`SampleIterator` - An iterator to the samples (which
|
679
692
|
* implements both iterable and iterator logic).
|
680
693
|
*/
|
681
694
|
get (index) {
|
@@ -690,7 +703,7 @@ class Samples {
|
|
690
703
|
*
|
691
704
|
* This iterable may return samples with invalid data (samples that only contain
|
692
705
|
* meta-data).
|
693
|
-
* Use :attr:`Samples.validDataIter` to avoid having to check
|
706
|
+
* Use :attr:`Samples.validDataIter` to avoid having to check
|
694
707
|
* :attr:`SampleIterator.validData`.
|
695
708
|
*
|
696
709
|
* Allows for the following syntax::
|
@@ -735,13 +748,13 @@ class Samples {
|
|
735
748
|
* Returns an iterator to the data samples that contain valid data.
|
736
749
|
*
|
737
750
|
* The iterator provides access to all the data samples retrieved by the most
|
738
|
-
* recent call to :meth:`Input.read` or :meth:`Input.take`, and skips samples
|
751
|
+
* recent call to :meth:`Input.read` or :meth:`Input.take`, and skips samples
|
739
752
|
* with invalid data (meta-data only).
|
740
753
|
*
|
741
754
|
* By using this iterator, it is not necessary to check if each sample contains
|
742
755
|
* valid data.
|
743
756
|
*
|
744
|
-
* @returns {ValidSampleIterator} An iterator to the samples containing valid
|
757
|
+
* @returns {ValidSampleIterator} An iterator to the samples containing valid
|
745
758
|
* data (which implements both iterable and iterator logic).
|
746
759
|
*/
|
747
760
|
get validDataIter () {
|
@@ -905,8 +918,8 @@ class Samples {
|
|
905
918
|
* Gets a JSON object with the values of all the fields of this sample.
|
906
919
|
*
|
907
920
|
* @param {number} index The index of the sample.
|
908
|
-
* @param {string} [memberName] The name of the complex member. The type
|
909
|
-
* of the member with name memberName must be an array, sequence, struct,
|
921
|
+
* @param {string} [memberName] The name of the complex member. The type
|
922
|
+
* of the member with name memberName must be an array, sequence, struct,
|
910
923
|
* value or union.
|
911
924
|
* @returns {JSON} The obtained JSON object.
|
912
925
|
*
|
@@ -949,10 +962,10 @@ class Samples {
|
|
949
962
|
}
|
950
963
|
|
951
964
|
/**
|
952
|
-
* Obtains a native handle to the sample, which can be used to access
|
965
|
+
* Obtains a native handle to the sample, which can be used to access
|
953
966
|
* additional *Connext DDS* APIs in C.
|
954
967
|
*
|
955
|
-
* @param {number} index The index of the sample for which to obtain
|
968
|
+
* @param {number} index The index of the sample for which to obtain
|
956
969
|
* the native pointer.
|
957
970
|
* @returns {pointer} A native pointer to the sample.
|
958
971
|
*/
|
@@ -972,9 +985,9 @@ class Samples {
|
|
972
985
|
/**
|
973
986
|
* This method is deprecated, use :meth:`Samples.getJson`.
|
974
987
|
*
|
975
|
-
* @param {number} index - The index of the sample for which to obtain
|
988
|
+
* @param {number} index - The index of the sample for which to obtain
|
976
989
|
* the JSON object.
|
977
|
-
* @param {string} [memberName] - The name of the complex member for
|
990
|
+
* @param {string} [memberName] - The name of the complex member for
|
978
991
|
* which to obtain the JSON object.
|
979
992
|
* @returns {JSON} A JSON object representing the current sample.
|
980
993
|
* @private
|
@@ -1003,14 +1016,14 @@ class SampleInfo {
|
|
1003
1016
|
*
|
1004
1017
|
* * ``'source_timestamp'`` returns an integer representing nanoseconds
|
1005
1018
|
* * ``'reception_timestamp'`` returns an integer representing nanoseconds
|
1006
|
-
* * ``'sample_identity'`` or ``'identity'`` returns a JSON object
|
1019
|
+
* * ``'sample_identity'`` or ``'identity'`` returns a JSON object
|
1007
1020
|
* (see :meth:`Output.write`)
|
1008
|
-
* * ``'related_sample_identity'`` returns a JSON object
|
1021
|
+
* * ``'related_sample_identity'`` returns a JSON object
|
1009
1022
|
* (see :meth:`Output.write`)
|
1010
|
-
* * ``'valid_data'`` returns a boolean (equivalent to
|
1023
|
+
* * ``'valid_data'`` returns a boolean (equivalent to
|
1011
1024
|
* :attr:`SampleIterator.validData`)
|
1012
1025
|
*
|
1013
|
-
* These fields are documented in `The SampleInfo Structure
|
1026
|
+
* These fields are documented in `The SampleInfo Structure
|
1014
1027
|
* <https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/The_SampleInfo_Structure.htm>`__
|
1015
1028
|
* section in the *RTI Connext DDS Core Libraries User's Manual*.
|
1016
1029
|
*
|
@@ -1043,11 +1056,11 @@ class Input {
|
|
1043
1056
|
*
|
1044
1057
|
* Attributes:
|
1045
1058
|
* * connector (:class:`Connector`) - The Connector creates this Input.
|
1046
|
-
* * name (string) - The name of the Input (the name used in
|
1059
|
+
* * name (string) - The name of the Input (the name used in
|
1047
1060
|
* :meth:`Connector.getInput`).
|
1048
|
-
* * native (pointer) - A native handle that allows accessing additional
|
1061
|
+
* * native (pointer) - A native handle that allows accessing additional
|
1049
1062
|
* *Connext DDS* APIs in C.
|
1050
|
-
* * matchedPublications (JSON) - A JSON object containing information
|
1063
|
+
* * matchedPublications (JSON) - A JSON object containing information
|
1051
1064
|
* about all the publications currently matched with this Input.
|
1052
1065
|
*/
|
1053
1066
|
constructor (connector, name) {
|
@@ -1075,8 +1088,8 @@ class Input {
|
|
1075
1088
|
/**
|
1076
1089
|
* Accesses the samples received by this Input.
|
1077
1090
|
*
|
1078
|
-
* This operation performs the same operation as :meth:`Input.take` but
|
1079
|
-
* the samples remain accessible (in the internal queue) after the
|
1091
|
+
* This operation performs the same operation as :meth:`Input.take` but
|
1092
|
+
* the samples remain accessible (in the internal queue) after the
|
1080
1093
|
* operation has been called.
|
1081
1094
|
*/
|
1082
1095
|
read () {
|
@@ -1088,7 +1101,7 @@ class Input {
|
|
1088
1101
|
/**
|
1089
1102
|
* Accesses the samples receieved by this Input.
|
1090
1103
|
*
|
1091
|
-
* After calling this method, the samples are accessible using
|
1104
|
+
* After calling this method, the samples are accessible using
|
1092
1105
|
* :meth:`Input.samples`.
|
1093
1106
|
*/
|
1094
1107
|
take () {
|
@@ -1115,18 +1128,18 @@ class Input {
|
|
1115
1128
|
* .. note::
|
1116
1129
|
* This operation is asynchronous.
|
1117
1130
|
*
|
1118
|
-
* This method waits for the specified timeout (or if no timeout is
|
1131
|
+
* This method waits for the specified timeout (or if no timeout is
|
1119
1132
|
* specified, it waits forever), for a match (or unmatch) to occur.
|
1120
|
-
* @param {number} [timeout] The maximum time to wait, in milliseconds.
|
1133
|
+
* @param {number} [timeout] The maximum time to wait, in milliseconds.
|
1121
1134
|
* By default, infinite.
|
1122
|
-
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1135
|
+
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1123
1136
|
* timeout expires before any publications are matched.
|
1124
|
-
* @returns {Promise} Promise object resolving with the change in the
|
1125
|
-
* current number of matched outputs. If this is a positive number,
|
1126
|
-
* the input has matched with new publishers. If it is negative, the
|
1127
|
-
* input has unmatched from an output. It is possible for multiple
|
1128
|
-
* matches and/or unmatches to be returned (e.g., 0 could be returned,
|
1129
|
-
* indicating that the input matched the same number of outputs as it
|
1137
|
+
* @returns {Promise} Promise object resolving with the change in the
|
1138
|
+
* current number of matched outputs. If this is a positive number,
|
1139
|
+
* the input has matched with new publishers. If it is negative, the
|
1140
|
+
* input has unmatched from an output. It is possible for multiple
|
1141
|
+
* matches and/or unmatches to be returned (e.g., 0 could be returned,
|
1142
|
+
* indicating that the input matched the same number of outputs as it
|
1130
1143
|
* unmatched).
|
1131
1144
|
*/
|
1132
1145
|
waitForPublications (timeout) {
|
@@ -1165,15 +1178,15 @@ class Input {
|
|
1165
1178
|
/**
|
1166
1179
|
* Returns information about matched publications.
|
1167
1180
|
*
|
1168
|
-
* This property returns a JSON array, with each element of the
|
1181
|
+
* This property returns a JSON array, with each element of the
|
1169
1182
|
* array containing information about a matched publication.
|
1170
1183
|
*
|
1171
|
-
* Currently the only information contained in this JSON object is
|
1172
|
-
* the publication name of the matched publication. If the matched
|
1173
|
-
* publication doesn't have a name, the name for that specific
|
1184
|
+
* Currently the only information contained in this JSON object is
|
1185
|
+
* the publication name of the matched publication. If the matched
|
1186
|
+
* publication doesn't have a name, the name for that specific
|
1174
1187
|
* publication will be null.
|
1175
1188
|
*
|
1176
|
-
* Note that :class:`Connector` Outputs are automatically assigned
|
1189
|
+
* Note that :class:`Connector` Outputs are automatically assigned
|
1177
1190
|
* a name from the ``data_writer name`` element in the XML configuration.
|
1178
1191
|
*
|
1179
1192
|
* @type {JSON}
|
@@ -1193,11 +1206,11 @@ class Input {
|
|
1193
1206
|
* .. note::
|
1194
1207
|
* This operation is asynchronous.
|
1195
1208
|
*
|
1196
|
-
* @param {number} [timeout] The maximum time to wait, in milliseconds.
|
1209
|
+
* @param {number} [timeout] The maximum time to wait, in milliseconds.
|
1197
1210
|
* By default, infinite.
|
1198
|
-
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1211
|
+
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1199
1212
|
* timeout expires before data is received.
|
1200
|
-
* @returns {Promise} A ``Promise`` which will be resolved once data is
|
1213
|
+
* @returns {Promise} A ``Promise`` which will be resolved once data is
|
1201
1214
|
* available, or rejected if the timeout expires.
|
1202
1215
|
*/
|
1203
1216
|
wait (timeout) {
|
@@ -1236,17 +1249,17 @@ class Instance {
|
|
1236
1249
|
/**
|
1237
1250
|
* A data sample.
|
1238
1251
|
*
|
1239
|
-
* :class:`Instance` is the type obtained through ``Output.instance``
|
1252
|
+
* :class:`Instance` is the type obtained through ``Output.instance``
|
1240
1253
|
* and is the object that is published by :meth:`Output.write`.
|
1241
1254
|
*
|
1242
|
-
* An Instance has an associated DDS Type, specified in the XML
|
1243
|
-
* configuration, and it allows setting the values for the fields of
|
1255
|
+
* An Instance has an associated DDS Type, specified in the XML
|
1256
|
+
* configuration, and it allows setting the values for the fields of
|
1244
1257
|
* the DDS Type.
|
1245
1258
|
*
|
1246
1259
|
* Attributes:
|
1247
|
-
* * ``output`` (:class:`Output`) - The :class:`Output` that owns
|
1260
|
+
* * ``output`` (:class:`Output`) - The :class:`Output` that owns
|
1248
1261
|
* this Instance.
|
1249
|
-
* * ``native`` (pointer) - Native handle to this Instance that allows
|
1262
|
+
* * ``native`` (pointer) - Native handle to this Instance that allows
|
1250
1263
|
* for additional *Connext DDS Pro* C APIs to be called.
|
1251
1264
|
*/
|
1252
1265
|
constructor (output) {
|
@@ -1256,9 +1269,9 @@ class Instance {
|
|
1256
1269
|
/**
|
1257
1270
|
* Resets a member to its default value.
|
1258
1271
|
*
|
1259
|
-
* The effect is the same as that of :meth:`Output.clearMembers`, except
|
1272
|
+
* The effect is the same as that of :meth:`Output.clearMembers`, except
|
1260
1273
|
* that only one member is cleared.
|
1261
|
-
* @param {string} fieldName The name of the field. It can be a complex
|
1274
|
+
* @param {string} fieldName The name of the field. It can be a complex
|
1262
1275
|
* member or a primitive member.
|
1263
1276
|
*/
|
1264
1277
|
clearMember (fieldName) {
|
@@ -1276,8 +1289,13 @@ class Instance {
|
|
1276
1289
|
/**
|
1277
1290
|
* Sets a numeric field.
|
1278
1291
|
*
|
1292
|
+
* .. note::
|
1293
|
+
* This operation should not be used with values with an aboslute value
|
1294
|
+
* larger than `Number.MAX_SAFE_INTEGER`. See :ref:`Accessing 64-bit integers`
|
1295
|
+
* for more information.
|
1296
|
+
*
|
1279
1297
|
* @param {string} fieldName - The name of the field.
|
1280
|
-
* @param {number} value - A numeric value, or null, to unset an
|
1298
|
+
* @param {number} value - A numeric value, or null, to unset an
|
1281
1299
|
* optional member.
|
1282
1300
|
*/
|
1283
1301
|
setNumber (fieldName, value) {
|
@@ -1302,7 +1320,7 @@ class Instance {
|
|
1302
1320
|
* Sets a boolean field.
|
1303
1321
|
*
|
1304
1322
|
* @param {string} fieldName - The name of the field.
|
1305
|
-
* @param {boolean} value - A boolean value, or null, to unset an
|
1323
|
+
* @param {boolean} value - A boolean value, or null, to unset an
|
1306
1324
|
* optional member.
|
1307
1325
|
*/
|
1308
1326
|
setBoolean (fieldName, value) {
|
@@ -1328,7 +1346,7 @@ class Instance {
|
|
1328
1346
|
* Sets a string field.
|
1329
1347
|
*
|
1330
1348
|
* @param {string} fieldName - The name of the field.
|
1331
|
-
* @param {
|
1349
|
+
* @param {string|null} value - A string value, or null, to unset an
|
1332
1350
|
* optional member.
|
1333
1351
|
*/
|
1334
1352
|
setString (fieldName, value) {
|
@@ -1353,20 +1371,20 @@ class Instance {
|
|
1353
1371
|
/**
|
1354
1372
|
* Sets the member values specified in a JSON object.
|
1355
1373
|
*
|
1356
|
-
* The keys in the JSON object are the member names of the DDS Type
|
1357
|
-
* associated with the Output, and the values are the values to set
|
1374
|
+
* The keys in the JSON object are the member names of the DDS Type
|
1375
|
+
* associated with the Output, and the values are the values to set
|
1358
1376
|
* for those members.
|
1359
1377
|
*
|
1360
|
-
* This method sets the values of those members that are explicitly
|
1361
|
-
* specified in the JSON object. Any member that is not specified in
|
1378
|
+
* This method sets the values of those members that are explicitly
|
1379
|
+
* specified in the JSON object. Any member that is not specified in
|
1362
1380
|
* the JSON object will retain its previous value.
|
1363
1381
|
*
|
1364
|
-
* To clear members that are not in the JSON object, call
|
1365
|
-
* :meth:`Output.clearMembers` before this method. You can also
|
1366
|
-
* explicitly set any value in the JSON object to *null* to reset that
|
1382
|
+
* To clear members that are not in the JSON object, call
|
1383
|
+
* :meth:`Output.clearMembers` before this method. You can also
|
1384
|
+
* explicitly set any value in the JSON object to *null* to reset that
|
1367
1385
|
* field to its default value.
|
1368
1386
|
*
|
1369
|
-
* @param {JSON} jsonObj - The JSON object containing the keys
|
1387
|
+
* @param {JSON} jsonObj - The JSON object containing the keys
|
1370
1388
|
* (field names) and values (values for the fields).
|
1371
1389
|
*/
|
1372
1390
|
setFromJson (jsonObj) {
|
@@ -1379,16 +1397,16 @@ class Instance {
|
|
1379
1397
|
/**
|
1380
1398
|
* Sets the value of fieldName.
|
1381
1399
|
*
|
1382
|
-
* The type of the argument ``value`` must correspond with the type of the
|
1400
|
+
* The type of the argument ``value`` must correspond with the type of the
|
1383
1401
|
* field with name ``fieldName`` (as defined in the configuration XML file).
|
1384
1402
|
*
|
1385
|
-
* This method is an alternative to
|
1386
|
-
* :meth:`Instance.setNumber`, :meth:`Instance.setString` and
|
1387
|
-
* :meth:`Instance.setBoolean`. The main difference is that it is
|
1403
|
+
* This method is an alternative to
|
1404
|
+
* :meth:`Instance.setNumber`, :meth:`Instance.setString` and
|
1405
|
+
* :meth:`Instance.setBoolean`. The main difference is that it is
|
1388
1406
|
* type-independent (in that the same method can be used for all fields).
|
1389
1407
|
*
|
1390
1408
|
* @param {string} fieldName The name of the field.
|
1391
|
-
* @param {number|boolean|string|null} value The value to set. Note that
|
1409
|
+
* @param {number|boolean|string|null} value The value to set. Note that
|
1392
1410
|
* ``null`` is used to unset an optional member.
|
1393
1411
|
*/
|
1394
1412
|
set (fieldName, value) {
|
@@ -1417,17 +1435,22 @@ class Instance {
|
|
1417
1435
|
/**
|
1418
1436
|
* Retrives the value of this instance as a JSON object.
|
1419
1437
|
*
|
1438
|
+
* .. note::
|
1439
|
+
* This operation should not be used with values with an aboslute value
|
1440
|
+
* larger than `Number.MAX_SAFE_INTEGER`. See :ref:`Accessing 64-bit integers`
|
1441
|
+
* for more information.
|
1442
|
+
*
|
1420
1443
|
* @returns {JSON} The value of this instance as a JSON object.
|
1421
1444
|
*/
|
1422
1445
|
getJson () {
|
1423
1446
|
const nativeStr = connectorBinding.api.RTIDDSConnector_getJSONInstance(
|
1424
|
-
|
1425
|
-
|
1447
|
+
this.output.connector.native,
|
1448
|
+
this.output.name)
|
1426
1449
|
// Now move the native string
|
1427
1450
|
if (nativeStr === null) {
|
1428
|
-
|
1451
|
+
throw new Error('Failed to create JSON object of instance')
|
1429
1452
|
} else {
|
1430
|
-
|
1453
|
+
return JSON.parse(_moveCString(nativeStr))
|
1431
1454
|
}
|
1432
1455
|
}
|
1433
1456
|
|
@@ -1467,15 +1490,15 @@ class Output {
|
|
1467
1490
|
* To get an Output object, use :meth:`Connector.getOutput`.
|
1468
1491
|
*
|
1469
1492
|
* Attributes:
|
1470
|
-
* * ``instance`` (:class:`Instance`) - The data that is written when
|
1493
|
+
* * ``instance`` (:class:`Instance`) - The data that is written when
|
1471
1494
|
* :meth:`Output.write` is called.
|
1472
|
-
* * ``connector`` (:class:`Connector`) - The :class:`Connector` object
|
1495
|
+
* * ``connector`` (:class:`Connector`) - The :class:`Connector` object
|
1473
1496
|
* that created this object.
|
1474
|
-
* * ``name`` (str) - The name of this Output (the name used in
|
1497
|
+
* * ``name`` (str) - The name of this Output (the name used in
|
1475
1498
|
* :meth:`Connector.getOutput`).
|
1476
|
-
* * ``native`` (pointer) - The native handle that allows accessing
|
1499
|
+
* * ``native`` (pointer) - The native handle that allows accessing
|
1477
1500
|
* additional *Connext DDS* APIs in C.
|
1478
|
-
* * ``matchedSubscriptions`` (JSON) - Information about matched
|
1501
|
+
* * ``matchedSubscriptions`` (JSON) - Information about matched
|
1479
1502
|
* subscriptions (see below).
|
1480
1503
|
*
|
1481
1504
|
*/
|
@@ -1495,40 +1518,40 @@ class Output {
|
|
1495
1518
|
/**
|
1496
1519
|
* Publishes the values of the current Instance.
|
1497
1520
|
*
|
1498
|
-
* Note that after writing it, the Instance's values remain unchanged.
|
1499
|
-
* If, for the next write, you need to start from scratch, you must
|
1521
|
+
* Note that after writing it, the Instance's values remain unchanged.
|
1522
|
+
* If, for the next write, you need to start from scratch, you must
|
1500
1523
|
* first call :meth:`Output.clearMembers`.
|
1501
1524
|
*
|
1502
|
-
* This method accepts an optional JSON object as a parameter, which may
|
1525
|
+
* This method accepts an optional JSON object as a parameter, which may
|
1503
1526
|
* specify the parameters to use in the `write` call.
|
1504
|
-
* The supported parameters are a subset of those documented in the
|
1527
|
+
* The supported parameters are a subset of those documented in the
|
1505
1528
|
* `Writing Data section <https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/Writing_Data.htm?Highlight=DDS_WriteParams_t>`__
|
1506
1529
|
* of the *RTI Connext DDS Core Libraries User's Manual*. These are:
|
1507
1530
|
*
|
1508
1531
|
* * ``action`` – One of ``write`` (default), ``dispose`` or ``unregister``
|
1509
|
-
* * ``source_timestamp`` – An integer representing the total number of
|
1532
|
+
* * ``source_timestamp`` – An integer representing the total number of
|
1510
1533
|
* nanoseconds
|
1511
|
-
* * ``identity`` – A JSON object containing the fields ``writer_guid`` and
|
1534
|
+
* * ``identity`` – A JSON object containing the fields ``writer_guid`` and
|
1512
1535
|
* ``sequence_number``
|
1513
|
-
* * ``related_sample_identity`` – Used for request-reply communications.
|
1536
|
+
* * ``related_sample_identity`` – Used for request-reply communications.
|
1514
1537
|
* It has the same format as identity
|
1515
1538
|
*
|
1516
1539
|
* @example output.write()
|
1517
|
-
* @example output.write({
|
1518
|
-
* action: 'dispose',
|
1519
|
-
* identity: { writer_guid: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], sequence_number: 1 }
|
1540
|
+
* @example output.write({
|
1541
|
+
* action: 'dispose',
|
1542
|
+
* identity: { writer_guid: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], sequence_number: 1 }
|
1520
1543
|
* })
|
1521
1544
|
*
|
1522
1545
|
* @param {JSON} [params] [Optional] The optional parameters described above
|
1523
|
-
* @throws {TimeoutError} The write method can block under multiple
|
1524
|
-
* circumstances (see 'Blocking During a write()' in the `Writing Data section
|
1546
|
+
* @throws {TimeoutError} The write method can block under multiple
|
1547
|
+
* circumstances (see 'Blocking During a write()' in the `Writing Data section
|
1525
1548
|
* <https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/Writing_Data.htm>`__
|
1526
1549
|
* of the *RTI Connext DDS Core Libraries User's Manual*.)
|
1527
|
-
* If the blocking time exceeds the ``max_blocking_time``, this method
|
1550
|
+
* If the blocking time exceeds the ``max_blocking_time``, this method
|
1528
1551
|
* throws :class:`TimeoutError`.
|
1529
1552
|
*/
|
1530
1553
|
write (params) {
|
1531
|
-
|
1554
|
+
let cStr
|
1532
1555
|
if (params === undefined) {
|
1533
1556
|
cStr = null
|
1534
1557
|
} else {
|
@@ -1543,10 +1566,10 @@ class Output {
|
|
1543
1566
|
/**
|
1544
1567
|
* Resets the values of the members of this :class:`Instance`.
|
1545
1568
|
*
|
1546
|
-
* If the member is defined with a *default* attribute in the configuration
|
1547
|
-
* file, it gets that value. Otherwise, numbers are set to 0 and strings are
|
1569
|
+
* If the member is defined with a *default* attribute in the configuration
|
1570
|
+
* file, it gets that value. Otherwise, numbers are set to 0 and strings are
|
1548
1571
|
* set to empty. Sequences are cleared and optional members are set to 'null'.
|
1549
|
-
* For example, if this Output's type is *ShapeType*, then ``clearMembers()``
|
1572
|
+
* For example, if this Output's type is *ShapeType*, then ``clearMembers()``
|
1550
1573
|
* sets::
|
1551
1574
|
* color = 'RED'
|
1552
1575
|
* shapesize = 30
|
@@ -1560,7 +1583,7 @@ class Output {
|
|
1560
1583
|
}
|
1561
1584
|
|
1562
1585
|
/**
|
1563
|
-
* Waits until all matching reliable subscriptions have acknowledged all the
|
1586
|
+
* Waits until all matching reliable subscriptions have acknowledged all the
|
1564
1587
|
* samples that have currently been written.
|
1565
1588
|
*
|
1566
1589
|
* This method only waits if this Output is configured with a reliable QoS.
|
@@ -1568,13 +1591,13 @@ class Output {
|
|
1568
1591
|
* .. note::
|
1569
1592
|
* This operation is asynchronous
|
1570
1593
|
*
|
1571
|
-
* @param {timeout} [timeout] The maximum time to wait, in milliseconds.
|
1594
|
+
* @param {timeout} [timeout] The maximum time to wait, in milliseconds.
|
1572
1595
|
* By default, infinite.
|
1573
1596
|
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the timeout
|
1574
|
-
* expires before all matching reliable subscriptions acknowledge all the
|
1597
|
+
* expires before all matching reliable subscriptions acknowledge all the
|
1575
1598
|
* samples.
|
1576
|
-
* @returns {Promise} Promise object which will be rejected if not all matching
|
1577
|
-
* reliable subscriptions acknowledge all of the samples within the specified
|
1599
|
+
* @returns {Promise} Promise object which will be rejected if not all matching
|
1600
|
+
* reliable subscriptions acknowledge all of the samples within the specified
|
1578
1601
|
* timeout.
|
1579
1602
|
*/
|
1580
1603
|
wait (timeout) {
|
@@ -1589,10 +1612,14 @@ class Output {
|
|
1589
1612
|
timeout,
|
1590
1613
|
(err, res) => {
|
1591
1614
|
if (err) {
|
1592
|
-
reject(err)
|
1615
|
+
return reject(err)
|
1616
|
+
} else if (res === _ReturnCodes.ok) {
|
1617
|
+
return resolve()
|
1618
|
+
} else if (res === _ReturnCodes.timeout) {
|
1619
|
+
return reject(new TimeoutError('Timeout error'))
|
1620
|
+
} else {
|
1621
|
+
return reject(new DDSError('res: ' + res))
|
1593
1622
|
}
|
1594
|
-
_checkRetcode(res)
|
1595
|
-
resolve()
|
1596
1623
|
}
|
1597
1624
|
)
|
1598
1625
|
})
|
@@ -1601,21 +1628,21 @@ class Output {
|
|
1601
1628
|
/**
|
1602
1629
|
* Waits for this Output to match or unmatch a compatible DDS Publication.
|
1603
1630
|
*
|
1604
|
-
* This method waits for the specified timeout (or if no timeout is
|
1631
|
+
* This method waits for the specified timeout (or if no timeout is
|
1605
1632
|
* specified, it waits forever), for a match (or unmatch) to occur.
|
1606
1633
|
*
|
1607
1634
|
* .. note::
|
1608
1635
|
* This operation is asynchronous
|
1609
1636
|
*
|
1610
|
-
* @param {number} [timeout] - The maximum time to wait, in milliseconds.
|
1637
|
+
* @param {number} [timeout] - The maximum time to wait, in milliseconds.
|
1611
1638
|
* By default, infinite.
|
1612
|
-
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1639
|
+
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1613
1640
|
* timeout expires before a subscription is matched.
|
1614
|
-
* @returns {Promise} Promise object resolving with the change in the
|
1615
|
-
* current number of matched inputs. If this is a positive number, the
|
1616
|
-
* output has matched with new subscribers. If it is negative, the output
|
1617
|
-
* has unmatched from a subscription. It is possible for multiple matches
|
1618
|
-
* and/or unmatches to be returned (e.g., 0 could be returned, indicating
|
1641
|
+
* @returns {Promise} Promise object resolving with the change in the
|
1642
|
+
* current number of matched inputs. If this is a positive number, the
|
1643
|
+
* output has matched with new subscribers. If it is negative, the output
|
1644
|
+
* has unmatched from a subscription. It is possible for multiple matches
|
1645
|
+
* and/or unmatches to be returned (e.g., 0 could be returned, indicating
|
1619
1646
|
* that the output matched the same number of inputs as it unmatched).
|
1620
1647
|
*/
|
1621
1648
|
waitForSubscriptions (timeout) {
|
@@ -1643,7 +1670,7 @@ class Output {
|
|
1643
1670
|
} else if (res === _ReturnCodes.timeout) {
|
1644
1671
|
return reject(new TimeoutError('Timeout error'))
|
1645
1672
|
} else {
|
1646
|
-
return reject(new DDSError('
|
1673
|
+
return reject(new DDSError('res: ' + res))
|
1647
1674
|
}
|
1648
1675
|
}
|
1649
1676
|
)
|
@@ -1654,14 +1681,14 @@ class Output {
|
|
1654
1681
|
/**
|
1655
1682
|
* Provides information about matched subscriptions.
|
1656
1683
|
*
|
1657
|
-
* This property returns a JSON array, with each element of the array
|
1684
|
+
* This property returns a JSON array, with each element of the array
|
1658
1685
|
* containing information about a matched subscription.
|
1659
1686
|
*
|
1660
|
-
* Currently the only information contained in this JSON object is the
|
1687
|
+
* Currently the only information contained in this JSON object is the
|
1661
1688
|
* subscription name of the matched subscription. If the matched subscription
|
1662
1689
|
* doesn't have a name, the name for that specific subscription will be null.
|
1663
1690
|
*
|
1664
|
-
* Note that :class:`Connector` Inputs are automatically assigned a name from
|
1691
|
+
* Note that :class:`Connector` Inputs are automatically assigned a name from
|
1665
1692
|
* the ``data_reader name`` element in the XML configuration.
|
1666
1693
|
*
|
1667
1694
|
* @type {JSON}
|
@@ -1675,6 +1702,7 @@ class Output {
|
|
1675
1702
|
return JSON.parse(_moveCString(cStr.deref()))
|
1676
1703
|
}
|
1677
1704
|
|
1705
|
+
/* istanbul ignore next */
|
1678
1706
|
// Deprecated, use clearMembers
|
1679
1707
|
clear_members () { // eslint-disable-line camelcase
|
1680
1708
|
return this.clearMembers()
|
@@ -1685,9 +1713,9 @@ class Output {
|
|
1685
1713
|
* Loads a configuration and creates its Inputs and Outputs.
|
1686
1714
|
*
|
1687
1715
|
* .. note::
|
1688
|
-
* The :class:`Connector` class inherits from
|
1716
|
+
* The :class:`Connector` class inherits from
|
1689
1717
|
* `EventEmitter <https://nodejs.org/api/events.html#events_class_eventemitter>`__.
|
1690
|
-
* This allows us to support event-based notification for data, using the
|
1718
|
+
* This allows us to support event-based notification for data, using the
|
1691
1719
|
* following syntax:
|
1692
1720
|
*
|
1693
1721
|
* .. code-block:: javascript
|
@@ -1696,32 +1724,32 @@ class Output {
|
|
1696
1724
|
*
|
1697
1725
|
* Please refer to :ref:`Reading data (Input)` for more information.
|
1698
1726
|
*
|
1699
|
-
* A :class:`Connector` instance loads a configuration file from an XML
|
1727
|
+
* A :class:`Connector` instance loads a configuration file from an XML
|
1700
1728
|
* document. For example::
|
1701
1729
|
* const connector = new rti.Connector('MyParticipantLibrary::MyParticipant', 'MyExample.xml')
|
1702
1730
|
*
|
1703
|
-
* After creating it, the :class:`Connector` object's Inputs can be used to
|
1704
|
-
* read data, and the Outputs to write data. The methods
|
1705
|
-
* :meth:`Connector.getOutput` and :meth:`Connector.getInput` return an
|
1731
|
+
* After creating it, the :class:`Connector` object's Inputs can be used to
|
1732
|
+
* read data, and the Outputs to write data. The methods
|
1733
|
+
* :meth:`Connector.getOutput` and :meth:`Connector.getInput` return an
|
1706
1734
|
* :class:`Input` and :class:`Output`, respectively.
|
1707
1735
|
*
|
1708
|
-
* An application can create multiple :class:`Connector` instances for the
|
1736
|
+
* An application can create multiple :class:`Connector` instances for the
|
1709
1737
|
* same or different configurations.
|
1710
1738
|
*/
|
1711
1739
|
class Connector extends EventEmitter {
|
1712
1740
|
/**
|
1713
|
-
* @arg {string} configName The configuration to load. The configName format
|
1714
|
-
* is `LibraryName::ParticipantName`, where LibraryName is the name
|
1715
|
-
* attribute of a ``<domain_participant_library>`` tag, and
|
1716
|
-
* ParticipantName is the name attribute of a ``<domain_participant>`` tag
|
1741
|
+
* @arg {string} configName The configuration to load. The configName format
|
1742
|
+
* is `LibraryName::ParticipantName`, where LibraryName is the name
|
1743
|
+
* attribute of a ``<domain_participant_library>`` tag, and
|
1744
|
+
* ParticipantName is the name attribute of a ``<domain_participant>`` tag
|
1717
1745
|
* within that library.
|
1718
|
-
* @arg {string} url A URL locating the XML document. It can be a file path
|
1719
|
-
* (e.g., ``/tmp/my_dds_config.xml``), a string containing the full XML
|
1746
|
+
* @arg {string} url A URL locating the XML document. It can be a file path
|
1747
|
+
* (e.g., ``/tmp/my_dds_config.xml``), a string containing the full XML
|
1720
1748
|
* document with the following format: ``str://"<dds>...</dds>"``, or a
|
1721
|
-
* combination of multiple files or strings, as explained in the
|
1749
|
+
* combination of multiple files or strings, as explained in the
|
1722
1750
|
* `URL Groups <https://community.rti.com/static/documentation/connext-dds/current/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/URL_Groups.htm>`__
|
1723
1751
|
* section of the *Connext DDS Core Libraries User's Manual*.
|
1724
|
-
*
|
1752
|
+
*
|
1725
1753
|
*/
|
1726
1754
|
constructor (configName, url) {
|
1727
1755
|
super()
|
@@ -1742,18 +1770,18 @@ class Connector extends EventEmitter {
|
|
1742
1770
|
}
|
1743
1771
|
|
1744
1772
|
/**
|
1745
|
-
* This method is used internally by the public APIs
|
1746
|
-
* :meth:`Connector.close` and
|
1773
|
+
* This method is used internally by the public APIs
|
1774
|
+
* :meth:`Connector.close` and
|
1747
1775
|
* :meth:`Connector.waitForCallbackFinalization`. It should not be used
|
1748
1776
|
* directly by applications.
|
1749
1777
|
*
|
1750
|
-
* @param {function} resolve The resolve() callback to call once waitSetBusy
|
1778
|
+
* @param {function} resolve The resolve() callback to call once waitSetBusy
|
1751
1779
|
* is false.
|
1752
|
-
* @param {function} reject The reject() callback to call if we timeout,
|
1780
|
+
* @param {function} reject The reject() callback to call if we timeout,
|
1753
1781
|
* or if another error occurs.
|
1754
|
-
* @param {number} iterations Maximum number of iterations to perform
|
1782
|
+
* @param {number} iterations Maximum number of iterations to perform
|
1755
1783
|
* before timing out.
|
1756
|
-
* @param {boolean} cleanup Whether or not the :class:`Connector` object
|
1784
|
+
* @param {boolean} cleanup Whether or not the :class:`Connector` object
|
1757
1785
|
* should be deleted once the waitset is no longer busy.
|
1758
1786
|
* @private
|
1759
1787
|
*/
|
@@ -1783,27 +1811,27 @@ class Connector extends EventEmitter {
|
|
1783
1811
|
* by the :class:`Connector` are no longer in use.
|
1784
1812
|
*
|
1785
1813
|
* .. note::
|
1786
|
-
* This returned promise will be rejected if there are any listeners
|
1787
|
-
* registered for the ``on_data_available`` event. Ensure that they have
|
1788
|
-
* all been removed before calling this method using
|
1814
|
+
* This returned promise will be rejected if there are any listeners
|
1815
|
+
* registered for the ``on_data_available`` event. Ensure that they have
|
1816
|
+
* all been removed before calling this method using
|
1789
1817
|
* ``connector.removeAllListeners(on_data_available)``.
|
1790
1818
|
*
|
1791
|
-
* It is currently only necessary to call this method if you remove all of
|
1819
|
+
* It is currently only necessary to call this method if you remove all of
|
1792
1820
|
* the listeners for the ``on_data_available`` event and at some point in the
|
1793
|
-
* future wish to use the same :class:`Connector` object to get notifications
|
1794
|
-
* of new data (via the :meth:`Connector.wait` method, or by re-adding a
|
1821
|
+
* future wish to use the same :class:`Connector` object to get notifications
|
1822
|
+
* of new data (via the :meth:`Connector.wait` method, or by re-adding a
|
1795
1823
|
* listener for the ``on_data_available`` event).
|
1796
1824
|
*
|
1797
|
-
* This operation does **not** free any resources. It is still necessary to
|
1798
|
-
* call :meth:`Connector.close` when the :class:`Connector` is no longer
|
1825
|
+
* This operation does **not** free any resources. It is still necessary to
|
1826
|
+
* call :meth:`Connector.close` when the :class:`Connector` is no longer
|
1799
1827
|
* required.
|
1800
1828
|
*
|
1801
|
-
* @argument {number} [timeout] Optional parameter to indicate the timeout
|
1802
|
-
* of the operation, in seconds. By default, 10s. If this operation does
|
1803
|
-
* not complete within the specified timeout, the returned Promise will
|
1829
|
+
* @argument {number} [timeout] Optional parameter to indicate the timeout
|
1830
|
+
* of the operation, in seconds. By default, 10s. If this operation does
|
1831
|
+
* not complete within the specified timeout, the returned Promise will
|
1804
1832
|
* be rejected.
|
1805
|
-
* @returns {Promise} A Promise that will be resolved once the resources
|
1806
|
-
* being used internally by the :class:`Connector` object are no longer
|
1833
|
+
* @returns {Promise} A Promise that will be resolved once the resources
|
1834
|
+
* being used internally by the :class:`Connector` object are no longer
|
1807
1835
|
* in use.
|
1808
1836
|
*/
|
1809
1837
|
waitForCallbackFinalization (timeout) {
|
@@ -1819,12 +1847,12 @@ class Connector extends EventEmitter {
|
|
1819
1847
|
/**
|
1820
1848
|
* Frees all the resources created by this :class:`Connector` instance.
|
1821
1849
|
*
|
1822
|
-
* @argument {number} [timeout] Optional parameter to indicate the timeout
|
1823
|
-
* of the operation, in seconds. By default, 10s. If this operation does
|
1824
|
-
* not complete within the specified timeout, the returned Promise will
|
1850
|
+
* @argument {number} [timeout] Optional parameter to indicate the timeout
|
1851
|
+
* of the operation, in seconds. By default, 10s. If this operation does
|
1852
|
+
* not complete within the specified timeout, the returned Promise will
|
1825
1853
|
* be rejected.
|
1826
|
-
* @returns {Promise} Which resolves once the :class:`Connector` object has
|
1827
|
-
* been freed. It is only necessary to wait for this promise to resolve
|
1854
|
+
* @returns {Promise} Which resolves once the :class:`Connector` object has
|
1855
|
+
* been freed. It is only necessary to wait for this promise to resolve
|
1828
1856
|
* if you have attached a listener for the ``on_data_available`` event.
|
1829
1857
|
*/
|
1830
1858
|
close (timeout) {
|
@@ -1851,7 +1879,7 @@ class Connector extends EventEmitter {
|
|
1851
1879
|
/**
|
1852
1880
|
* Returns the :class:`Input` named inputName.
|
1853
1881
|
*
|
1854
|
-
* ``inputName`` identifies a ``<data_reader>`` tag in the configuration
|
1882
|
+
* ``inputName`` identifies a ``<data_reader>`` tag in the configuration
|
1855
1883
|
* loaded by the :class:`Connector`. For example::
|
1856
1884
|
*
|
1857
1885
|
* const connector = new rti.Connector('MyParticipantLibrary::MyParticipant', 'MyExample.xml')
|
@@ -1872,7 +1900,7 @@ class Connector extends EventEmitter {
|
|
1872
1900
|
* ...
|
1873
1901
|
* <domain_participant_library>
|
1874
1902
|
*
|
1875
|
-
* @param {string} inputName The name of the ``data_reader`` to load, with the
|
1903
|
+
* @param {string} inputName The name of the ``data_reader`` to load, with the
|
1876
1904
|
* format `SubscriberName::DataReaderName`.
|
1877
1905
|
* @returns {Input} The Input, if it exists.
|
1878
1906
|
*/
|
@@ -1883,7 +1911,7 @@ class Connector extends EventEmitter {
|
|
1883
1911
|
/**
|
1884
1912
|
* Returns the :class:`Output` named outputName.
|
1885
1913
|
*
|
1886
|
-
* ``outputName`` identifies a ``<data_writer>`` tag in the configuration
|
1914
|
+
* ``outputName`` identifies a ``<data_writer>`` tag in the configuration
|
1887
1915
|
* loaded by the :class:`Connector`. For example::
|
1888
1916
|
*
|
1889
1917
|
* const connector = new rti.Connector('MyParticipantLibrary::MyParticipant', 'MyExample.xml')
|
@@ -1904,7 +1932,7 @@ class Connector extends EventEmitter {
|
|
1904
1932
|
* ...
|
1905
1933
|
* <domain_participant_library>
|
1906
1934
|
*
|
1907
|
-
* @param {string} outputName The name of the ``data_writer`` to load, with
|
1935
|
+
* @param {string} outputName The name of the ``data_writer`` to load, with
|
1908
1936
|
* the format ``PublisherName::DataWriterName``.
|
1909
1937
|
* @returns {Output} The Output, if it exists.
|
1910
1938
|
*/
|
@@ -1918,11 +1946,11 @@ class Connector extends EventEmitter {
|
|
1918
1946
|
* .. note::
|
1919
1947
|
* This operation is asynchronous.
|
1920
1948
|
*
|
1921
|
-
* @param {number} timeout The maximum time to wait, in milliseconds.
|
1949
|
+
* @param {number} timeout The maximum time to wait, in milliseconds.
|
1922
1950
|
* By default, infinite.
|
1923
|
-
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1951
|
+
* @throws {TimeoutError} :class:`TimeoutError` will be thrown if the
|
1924
1952
|
* timeout expires before data is received.
|
1925
|
-
* @returns {Promise} A ``Promise`` which will be resolved once data
|
1953
|
+
* @returns {Promise} A ``Promise`` which will be resolved once data
|
1926
1954
|
* is available, or rejected once the timeout expires.
|
1927
1955
|
*/
|
1928
1956
|
wait (timeout) {
|
@@ -1957,17 +1985,17 @@ class Connector extends EventEmitter {
|
|
1957
1985
|
}
|
1958
1986
|
|
1959
1987
|
/**
|
1960
|
-
* Emits the ``on_data_available`` event when any Inputs within this
|
1988
|
+
* Emits the ``on_data_available`` event when any Inputs within this
|
1961
1989
|
* :class:`Connector` object receive data.
|
1962
1990
|
*
|
1963
1991
|
* .. note::
|
1964
1992
|
* This operation is asynchronous
|
1965
1993
|
*
|
1966
|
-
* This API is used internally to emit the ``on_data_available`` event when
|
1967
|
-
* data is received on any of the Inputs contained within this
|
1994
|
+
* This API is used internally to emit the ``on_data_available`` event when
|
1995
|
+
* data is received on any of the Inputs contained within this
|
1968
1996
|
* :class:`Connector` object.
|
1969
1997
|
*
|
1970
|
-
* The :class:`Connector` class extends EventEmitter, meaning that callbacks
|
1998
|
+
* The :class:`Connector` class extends EventEmitter, meaning that callbacks
|
1971
1999
|
* can be registered for specific events using the following syntax:
|
1972
2000
|
*
|
1973
2001
|
* .. code-block:: javascript
|
@@ -1979,9 +2007,9 @@ class Connector extends EventEmitter {
|
|
1979
2007
|
* // ...
|
1980
2008
|
* connector.off('on_data_available', myCallback)
|
1981
2009
|
*
|
1982
|
-
* Once the ``on_data_available`` event has fired, either :meth:`Input.read`
|
1983
|
-
* or :meth:`Input.take` should be called on the :class:`Input` that has
|
1984
|
-
* new data. This will prevent ``on_data_available`` from being fired more
|
2010
|
+
* Once the ``on_data_available`` event has fired, either :meth:`Input.read`
|
2011
|
+
* or :meth:`Input.take` should be called on the :class:`Input` that has
|
2012
|
+
* new data. This will prevent ``on_data_available`` from being fired more
|
1985
2013
|
* than once for the same data.
|
1986
2014
|
*
|
1987
2015
|
* @private
|
@@ -2067,6 +2095,38 @@ class Connector extends EventEmitter {
|
|
2067
2095
|
static setMaxObjectsPerThread (value) {
|
2068
2096
|
_checkRetcode(connectorBinding.api.RTI_Connector_set_max_objects_per_thread(value))
|
2069
2097
|
}
|
2098
|
+
|
2099
|
+
/**
|
2100
|
+
* Returns the version of Connector.
|
2101
|
+
*
|
2102
|
+
* This static method provides the build IDs of the native libraries being used
|
2103
|
+
* by Connector, as well as the version of the Connector API.
|
2104
|
+
*
|
2105
|
+
* .. note::
|
2106
|
+
* This is a static method. It can be called before creating a
|
2107
|
+
* :class:`Connector` instance.
|
2108
|
+
*
|
2109
|
+
* @returns {string} A string containing information about the version of Connector.
|
2110
|
+
*/
|
2111
|
+
static getVersion () {
|
2112
|
+
// Obtain version of Connector from package.json
|
2113
|
+
const versionString = require('./package.json').version
|
2114
|
+
// Parse numbers out of string
|
2115
|
+
const versionNumbers = versionString.split('.')
|
2116
|
+
// Now get the build IDs of the native libraries
|
2117
|
+
const nativeConnectorVersion = ref.alloc('char *')
|
2118
|
+
const nativeCoreCVersion = ref.alloc('char *')
|
2119
|
+
_checkRetcode(connectorBinding.api.RTI_Connector_get_build_versions(
|
2120
|
+
nativeCoreCVersion,
|
2121
|
+
nativeConnectorVersion))
|
2122
|
+
|
2123
|
+
// Now create the string containing all of the above information
|
2124
|
+
let versionStr = 'RTI Connector for JavaScript, version ' +
|
2125
|
+
versionNumbers[0] + '.' + versionNumbers[1] + '.' + versionNumbers[2] + '\n'
|
2126
|
+
versionStr += ref.readCString(nativeCoreCVersion.deref()) + '\n'
|
2127
|
+
versionStr += ref.readCString(nativeConnectorVersion.deref())
|
2128
|
+
return versionStr
|
2129
|
+
}
|
2070
2130
|
}
|
2071
2131
|
|
2072
2132
|
// Export the API
|