From 6af0861dfe2216ca8736f5056d4a6e55b9e2310f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 7 Dec 2015 19:12:31 -0700 Subject: [PATCH] * ClientTerminal now has disconnect() method called by a client when a connection ends thus preventing data to be written after --- core/client.js | 8 +++++++- core/client_term.js | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/client.js b/core/client.js index eb003cd5..baf706ab 100644 --- a/core/client.js +++ b/core/client.js @@ -415,7 +415,13 @@ Client.prototype.startIdleMonitor = function() { }; Client.prototype.end = function () { - this.menuStack.getCurrentModule().leave(); + this.term.disconnect(); + + var currentModule = this.menuStack.getCurrentModule(); + + if(currentModule) { + currentModule.leave(); + } clearInterval(this.idleCheck); diff --git a/core/client_term.js b/core/client_term.js index 582f90e5..50feb4d1 100644 --- a/core/client_term.js +++ b/core/client_term.js @@ -132,6 +132,10 @@ function ClientTerminal(output) { }); } +ClientTerminal.prototype.disconnect = function() { + this.output = null; +}; + ClientTerminal.prototype.isANSI = function() { // :TODO: Others?? return [ 'ansi', 'pc-ansi', 'qansi', 'scoansi', 'syncterm' ].indexOf(this.termType) > -1; @@ -140,11 +144,17 @@ ClientTerminal.prototype.isANSI = function() { // :TODO: probably need to update these to convert IAC (0xff) -> IACIAC (escape it) ClientTerminal.prototype.write = function(s, convertLineFeeds) { - this.output.write(this.encode(s, convertLineFeeds)); + this.rawWrite(this.encode(s, convertLineFeeds)); }; ClientTerminal.prototype.rawWrite = function(s) { - this.output.write(s); + if(this.output) { + this.output.write(s, function written(err) { + if(err) { + Log.warn('Failed writing to socket: ' + err.toString()); + } + }); + } }; ClientTerminal.prototype.pipeWrite = function(s, spec) {