From fa63835eb6772b8bd8d345def8aca106892362c8 Mon Sep 17 00:00:00 2001 From: Tom Chiverton Date: Mon, 20 Sep 2021 12:16:29 +0100 Subject: [PATCH 1/2] Fix failing to spot message end --- lib/client/tcp-client.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/client/tcp-client.js b/lib/client/tcp-client.js index da1c86b..fabb8d1 100644 --- a/lib/client/tcp-client.js +++ b/lib/client/tcp-client.js @@ -28,6 +28,21 @@ TcpClient.prototype.connect = function(callback) { self.client = net.connect({host: self.host, port: self.port}, function() { self.client.on('data', function(data) { self.responseBuffer += data.toString(); + + /* + 'Sometimes' the responseBuffer contains things like FS or CR, and so + self.responseBuffer.substring() stops copying early, and the compare to FS+CR fails + So try a real parse, see if it's a response. + */ + var _parsed = false; + var _ackish = false; + try{ + const ackish = self.parser.parse(self.responseBuffer.substring(1, self.responseBuffer.length - 1)); + _parsed = true; + }catch(e){ + console.log('ackish',e) + } + if (self.responseBuffer.substring(self.responseBuffer.length - 2, self.responseBuffer.length) == FS + CR) { var ack = self.parser.parse(self.responseBuffer.substring(1, self.responseBuffer.length - 2)); self.callback(null, ack); From e2c062716c9ccee5899678f9705b42fda1ece5aa Mon Sep 17 00:00:00 2001 From: Tom Chiverton Date: Mon, 20 Sep 2021 12:20:19 +0100 Subject: [PATCH 2/2] Update tcp-client.js --- lib/client/tcp-client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/client/tcp-client.js b/lib/client/tcp-client.js index fabb8d1..f0f1c1f 100644 --- a/lib/client/tcp-client.js +++ b/lib/client/tcp-client.js @@ -43,7 +43,7 @@ TcpClient.prototype.connect = function(callback) { console.log('ackish',e) } - if (self.responseBuffer.substring(self.responseBuffer.length - 2, self.responseBuffer.length) == FS + CR) { + if (self.responseBuffer.substring(self.responseBuffer.length - 2, self.responseBuffer.length) == FS + CR || _parsed) { var ack = self.parser.parse(self.responseBuffer.substring(1, self.responseBuffer.length - 2)); self.callback(null, ack); self.responseBuffer = "";