From f43c3a3ee6ea1e9f7b2bea9f21615137307c98cb Mon Sep 17 00:00:00 2001 From: chughts Date: Sun, 11 Feb 2018 22:48:30 +0000 Subject: [PATCH 1/3] Check for expired toke at socket disconnect --- services/speech_to_text/v1.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/services/speech_to_text/v1.js b/services/speech_to_text/v1.js index 572d6669..015d1413 100644 --- a/services/speech_to_text/v1.js +++ b/services/speech_to_text/v1.js @@ -361,15 +361,21 @@ module.exports = function (RED) { console.log('re-establishing the connect'); websocket = null; socketCreationInProcess = false; - processSTTSocketStart(false) - .then(() => { - //return Promise.resolve(); - return; - }) - .catch((err) => { - //return Promise.resolve(); - return; - }); + + + // The token may have expired so test for it. + getToken(determineService()) + .then(() => { + return processSTTSocketStart(false); + }) + .then(() => { + //return Promise.resolve(); + return; + }) + .catch((err) => { + //return Promise.resolve(); + return; + }); } function processSTTSocketStart(initialConnect) { From a26383f117820a87d017c47c03de6976a1cab950 Mon Sep 17 00:00:00 2001 From: chughts Date: Mon, 12 Feb 2018 09:38:31 +0000 Subject: [PATCH 2/3] Remove debug console.log --- services/speech_to_text/v1.js | 86 +++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/services/speech_to_text/v1.js b/services/speech_to_text/v1.js index 015d1413..ed7bece9 100644 --- a/services/speech_to_text/v1.js +++ b/services/speech_to_text/v1.js @@ -355,29 +355,12 @@ module.exports = function (RED) { return p; } - // If we are going to connect to STT through websockets then its going to - // disconnect or timeout, so need to handle that occurrence. - function connectIfNeeded() { - console.log('re-establishing the connect'); - websocket = null; - socketCreationInProcess = false; - - - // The token may have expired so test for it. - getToken(determineService()) - .then(() => { - return processSTTSocketStart(false); - }) - .then(() => { - //return Promise.resolve(); - return; - }) - .catch((err) => { - //return Promise.resolve(); - return; - }); - } + // This function generates a load of listeners, that if resolving or + // rejecting promises causes problems, as nothing is waiting on those + // promises. I had wanted to pause and socket activity until the 'open' + // event, which was ok initially, but on subsequent socket close / Error + // reopens caused problems. function processSTTSocketStart(initialConnect) { var p = new Promise(function resolver(resolve, reject) { var model = config.lang + '_' + config.band; @@ -404,44 +387,71 @@ module.exports = function (RED) { ws.on('message', (data) => { // First message will be 'state': 'listening' - console.log('-----------------------'); - console.log('Data Received from Input'); - console.log(data); + // console.log('-----------------------'); + // console.log('Data Received from Input'); + // console.log(data); var d = JSON.parse(data); var newMsg = {payload : JSON.parse(data)}; - node.send(newMsg); - if (d && d.state && 'listening' === d.state){ - socketListening = true; - resolve(); + if (d) { + if (d.error) { + // Force Expiry of Token, as that is the only Error + // response from the service that we have seen. + token = null; + getToken(determineService()) + .then(() => { + return; + }); + } else if (d && d.state && 'listening' === d.state) { + socketListening = true; + //resolve(); + } else { + node.send(newMsg); + } } }); ws.on('close', () => { - //if (websocket) { - // websocket.close(); - //} websocket = null; socketListening = false; - console.log('STT Socket disconnected'); + // console.log('STT Socket disconnected'); setTimeout(connectIfNeeded, 1000); }); ws.on('error', (err) => { socketListening = false; - console.log('Error Detected'); + // console.log('Error Detected'); if (initialConnect) { - reject(err); + //reject(err); } }); - } else { - resolve(); } - + resolve(); }); return p; } + // If we are going to connect to STT through websockets then its going to + // disconnect or timeout, so need to handle that occurrence. + function connectIfNeeded() { + // console.log('re-establishing the connect'); + websocket = null; + socketCreationInProcess = false; + + // The token may have expired so test for it. + getToken(determineService()) + .then(() => { + return processSTTSocketStart(false); + }) + .then(() => { + //return Promise.resolve(); + return; + }) + .catch((err) => { + //return Promise.resolve(); + return; + }); + } // While we are waiting for a connection, stack the data input // so it can be processed, when the connection becomes available. From a4b89f2b1396789e62f5957cfdafe77df6691432 Mon Sep 17 00:00:00 2001 From: chughts Date: Mon, 12 Feb 2018 09:54:12 +0000 Subject: [PATCH 3/3] Remove debug console.log --- services/speech_to_text/v1.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/speech_to_text/v1.js b/services/speech_to_text/v1.js index ed7bece9..2edd12df 100644 --- a/services/speech_to_text/v1.js +++ b/services/speech_to_text/v1.js @@ -402,8 +402,8 @@ module.exports = function (RED) { return; }); } else if (d && d.state && 'listening' === d.state) { - socketListening = true; - //resolve(); + socketListening = true; + //resolve(); } else { node.send(newMsg); }