From 2861664f4ad539930c1ddc32e7da5ec7a56a6289 Mon Sep 17 00:00:00 2001 From: NI Date: Sun, 29 Dec 2019 13:57:27 +0800 Subject: [PATCH] Stream data sender now reacts to connection delay. It will buffer requests when the delay is high. --- ui/socket.js | 15 ++++++++++++++- ui/stream/sender.js | 10 ++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ui/socket.js b/ui/socket.js index cad8b6a..4210e01 100644 --- a/ui/socket.js +++ b/ui/socket.js @@ -22,6 +22,9 @@ import * as crypt from "./crypto.js"; export const ECHO_FAILED = streams.ECHO_FAILED; +const maxSenderDelay = 200; +const minSenderDelay = 30; + class Dial { /** * constructor @@ -190,7 +193,7 @@ class Dial { } }, 4096 - 64, // Server has a 4096 bytes receive buffer, can be no greater, - 30, // 30ms input delay + minSenderDelay, // 30ms input delay 10 // max 10 buffered requests ); @@ -331,6 +334,16 @@ export class Socket { let streamHandler = new streams.Streams(conn.reader, conn.sender, { echoInterval: self.echoInterval, echoUpdater(delay) { + const sendDelay = delay / 2; + + if (sendDelay > maxSenderDelay) { + conn.sender.setDelay(maxSenderDelay); + } else if (sendDelay < minSenderDelay) { + conn.sender.setDelay(minSenderDelay); + } else { + conn.sender.setDelay(sendDelay); + } + return callbacks.echo(delay); }, cleared(e) { diff --git a/ui/stream/sender.js b/ui/stream/sender.js index 8298f8b..caab43e 100644 --- a/ui/stream/sender.js +++ b/ui/stream/sender.js @@ -41,6 +41,16 @@ export class Sender { this.bufferReq = 0; } + /** + * Set the send delay of current sender + * + * @param {integer} newDelay the new delay + * + */ + setDelay(newDelay) { + this.bufferFlushDelay = newDelay; + } + /** * Sends data to the this.sender *