From 3b382b7352dfde79e295b94956f1f76a765dd5e8 Mon Sep 17 00:00:00 2001 From: olzzon Date: Wed, 26 Feb 2020 08:56:13 +0100 Subject: [PATCH 1/3] feat: hack setValue to immediately resolve - added setValueWithHacksaw() function from NRKNO fork --- EmberClient/EmberClient.js | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/EmberClient/EmberClient.js b/EmberClient/EmberClient.js index 4fa9502..ed8ce53 100755 --- a/EmberClient/EmberClient.js +++ b/EmberClient/EmberClient.js @@ -619,6 +619,51 @@ class EmberClient extends EventEmitter { }); } + /** + * + * @param {TreeNode} node + * @param {string|number} value + * @returns {Promise} + */ + setValueWithHacksaw(node, value) { + return new Promise((resolve, reject) => { + if (!node.isParameter()) { + reject(new Errors.EmberAccessError('not a Parameter')); + } + else { + this.addRequest({node: node, func: error => { + if (error) { + this._finishRequest(); + reject(error); + return; + } + + this._callback = (error, node) => { + // this._finishRequest(); + // this._callback = null; + if (error) { + reject(error); + } + else { + + // resolve(node); + } + }; + winston.debug('setValue sending ...', node.getPath(), value); + this._client.sendBERNode(node.setValue(value)); + + // We now immediately finish & resolve so we can't get any timeouts ever + // This is a pretty ugly hack, but as far as I can tell it doesn't bring + // any negative consequences regarding the execution and resolving of other + // functions. We need this because if the node already has the value we are + // setting it too, it will cause a timeout. + this._finishRequest(); + this._callback = null; + }}); + } + }); + } + /** * * @param {TreeNode} qnode From 82618c3ccc13b6355c893a47bafd1d226c7e86ae Mon Sep 17 00:00:00 2001 From: olzzon Date: Wed, 26 Feb 2020 13:03:57 +0100 Subject: [PATCH 2/3] feat: setValueNoAck - rename of function and cleanup --- EmberClient/EmberClient.js | 46 ++++++++++++-------------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/EmberClient/EmberClient.js b/EmberClient/EmberClient.js index ed8ce53..8a93d1f 100755 --- a/EmberClient/EmberClient.js +++ b/EmberClient/EmberClient.js @@ -625,43 +625,25 @@ class EmberClient extends EventEmitter { * @param {string|number} value * @returns {Promise} */ - setValueWithHacksaw(node, value) { + setValueNoAck(node, value) { return new Promise((resolve, reject) => { if (!node.isParameter()) { reject(new Errors.EmberAccessError('not a Parameter')); + return; } - else { - this.addRequest({node: node, func: error => { - if (error) { - this._finishRequest(); - reject(error); - return; - } - - this._callback = (error, node) => { - // this._finishRequest(); - // this._callback = null; - if (error) { - reject(error); - } - else { - - // resolve(node); - } - }; - winston.debug('setValue sending ...', node.getPath(), value); - this._client.sendBERNode(node.setValue(value)); - - // We now immediately finish & resolve so we can't get any timeouts ever - // This is a pretty ugly hack, but as far as I can tell it doesn't bring - // any negative consequences regarding the execution and resolving of other - // functions. We need this because if the node already has the value we are - // setting it too, it will cause a timeout. + this.addRequest({node: node, func: error => { + if (error) { this._finishRequest(); - this._callback = null; - }}); - } - }); + reject(error); + return; + } + winston.debug('setValue sending ...', node.getPath(), value); + this._client.sendBERNode(node.setValue(value)); + + this._finishRequest(); + this._callback = null; + }}); + }) } /** From 91100007882c08b814b84424726ea21543e4345d Mon Sep 17 00:00:00 2001 From: olzzon Date: Wed, 26 Feb 2020 13:21:36 +0100 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20promise=20didn=C2=B4t=20resolve=20do?= =?UTF-8?q?c:=20Added=20comments=20to=20explain=20reason=20for=20hack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EmberClient/EmberClient.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/EmberClient/EmberClient.js b/EmberClient/EmberClient.js index 8a93d1f..541e91b 100755 --- a/EmberClient/EmberClient.js +++ b/EmberClient/EmberClient.js @@ -626,6 +626,11 @@ class EmberClient extends EventEmitter { * @returns {Promise} */ setValueNoAck(node, value) { + // This function immediately finish & resolve so we can't get any timeouts ever + // This is a pretty ugly hack, but it doesn't look to bring + // any negative consequences regarding the execution and resolving of other + // functions. It´s needed this because if the node already has the value we are + // setting it too, it will cause a timeout. return new Promise((resolve, reject) => { if (!node.isParameter()) { reject(new Errors.EmberAccessError('not a Parameter')); @@ -642,6 +647,7 @@ class EmberClient extends EventEmitter { this._finishRequest(); this._callback = null; + return resolve(node) }}); }) }