Skip to content

Commit 3aefc6b

Browse files
author
Minggang Wang
authored
Merge pull request #187 from minggangw/fix-issue-183
Use aysnc method to grab the version of generator
2 parents b453d19 + d9f2f63 commit 3aefc6b

3 files changed

Lines changed: 39 additions & 21 deletions

File tree

index.js

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,29 @@ function inherits(target, source) {
3535

3636
inherits(rclnodejs.ShadowNode, Node);
3737

38-
/* eslint-disable */
3938
function getCurrentGeneratorVersion() {
4039
let jsonFilePath = path.join(generator.generatedRoot, 'generator.json');
41-
if (fs.existsSync(jsonFilePath)) {
42-
return JSON.parse(fs.readFileSync(jsonFilePath, 'utf8')).version;
43-
}
44-
return null;
40+
41+
return new Promise((resolve, reject) => {
42+
fs.open(jsonFilePath, 'r', (err, fd) => {
43+
if (err) {
44+
if (err.code === 'ENOENT') {
45+
resolve(null);
46+
return;
47+
}
48+
reject(err);
49+
} else {
50+
fs.readFile(jsonFilePath, 'utf8', (err, data) => {
51+
if (err) {
52+
reject(err);
53+
} else {
54+
resolve(JSON.parse(data).version);
55+
}
56+
});
57+
}
58+
});
59+
});
4560
}
46-
/* eslint-enable */
4761

4862
/**
4963
* A module that exposes the rclnodejs interfaces.
@@ -87,19 +101,23 @@ let rcl = {
87101
init(...args) {
88102
return new Promise((resolve, reject) => {
89103
if (!this._initialized) {
90-
let version = getCurrentGeneratorVersion();
91-
let forced = version === null || compareVersions(version, generator.version()) === -1
92-
? true
93-
: false;
94-
if (forced) {
95-
debug('The generator will begin to create JavaScript code from ROS IDL files...');
96-
}
97-
generator.generateAll(forced).then(() => {
98-
rclnodejs.init(args);
99-
debug('Finish initializing rcl with args = %o.', args);
100-
this._initialized = true;
101-
resolve();
102-
}).catch((e) => {
104+
getCurrentGeneratorVersion().then(version => {
105+
let forced = version === null || compareVersions(version, generator.version()) === -1
106+
? true
107+
: false;
108+
if (forced) {
109+
debug('The generator will begin to create JavaScript code from ROS IDL files...');
110+
}
111+
112+
generator.generateAll(forced).then(() => {
113+
rclnodejs.init(args);
114+
debug('Finish initializing rcl with args = %o.', args);
115+
this._initialized = true;
116+
resolve();
117+
}).catch(e => {
118+
reject(e);
119+
});
120+
}).catch(e => {
103121
reject(e);
104122
});
105123
} else {

lib/client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Client extends Entity {
5050
*/
5151
sendRequest(request, callback) {
5252
let rclRequest = request;
53-
if (!request instanceof this._typeClass) {
53+
if (!(request instanceof this._typeClass.Request)) {
5454
rclRequest = new this._typeClass();
5555
rclRequest.data = request;
5656
}

lib/publisher.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class Publisher extends Entity {
4545
// TODO(minggang): Support to convert a plain JavaScript value/object to a ROS message,
4646
// thus we can invoke this function like: publisher.publish('hello world').
4747
let rclMessage = message;
48-
if (!message instanceof this._typeClass) {
48+
if (!(message instanceof this._typeClass)) {
4949
rclMessage = new this._typeClass();
5050
rclMessage.data = message;
5151
}

0 commit comments

Comments
 (0)