Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 37 additions & 19 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,29 @@ function inherits(target, source) {

inherits(rclnodejs.ShadowNode, Node);

/* eslint-disable */
function getCurrentGeneratorVersion() {
let jsonFilePath = path.join(generator.generatedRoot, 'generator.json');
if (fs.existsSync(jsonFilePath)) {
return JSON.parse(fs.readFileSync(jsonFilePath, 'utf8')).version;
}
return null;

return new Promise((resolve, reject) => {
fs.open(jsonFilePath, 'r', (err, fd) => {
if (err) {
if (err.code === 'ENOENT') {
resolve(null);
return;
}
reject(err);
} else {
fs.readFile(jsonFilePath, 'utf8', (err, data) => {
if (err) {
reject(err);
} else {
resolve(JSON.parse(data).version);
}
});
}
});
});
}
/* eslint-enable */

/**
* A module that exposes the rclnodejs interfaces.
Expand Down Expand Up @@ -87,19 +101,23 @@ let rcl = {
init(...args) {
return new Promise((resolve, reject) => {
if (!this._initialized) {
let version = getCurrentGeneratorVersion();
let forced = version === null || compareVersions(version, generator.version()) === -1
? true
: false;
if (forced) {
debug('The generator will begin to create JavaScript code from ROS IDL files...');
}
generator.generateAll(forced).then(() => {
rclnodejs.init(args);
debug('Finish initializing rcl with args = %o.', args);
this._initialized = true;
resolve();
}).catch((e) => {
getCurrentGeneratorVersion().then(version => {
let forced = version === null || compareVersions(version, generator.version()) === -1
? true
: false;
if (forced) {
debug('The generator will begin to create JavaScript code from ROS IDL files...');
}

generator.generateAll(forced).then(() => {
rclnodejs.init(args);
debug('Finish initializing rcl with args = %o.', args);
this._initialized = true;
resolve();
}).catch(e => {
reject(e);
});
}).catch(e => {
reject(e);
});
} else {
Expand Down
2 changes: 1 addition & 1 deletion lib/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class Client extends Entity {
*/
sendRequest(request, callback) {
let rclRequest = request;
if (!request instanceof this._typeClass) {
if (!(request instanceof this._typeClass.Request)) {
rclRequest = new this._typeClass();
rclRequest.data = request;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/publisher.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class Publisher extends Entity {
// TODO(minggang): Support to convert a plain JavaScript value/object to a ROS message,
// thus we can invoke this function like: publisher.publish('hello world').
let rclMessage = message;
if (!message instanceof this._typeClass) {
if (!(message instanceof this._typeClass)) {
rclMessage = new this._typeClass();
rclMessage.data = message;
}
Expand Down