From 48386a8f68e478ee2561cfb28aea638ab7a20216 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 21 Mar 2017 18:14:59 +0900 Subject: [PATCH] [Client] Implement streaming buffering --- src/web/app/common/scripts/stream.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/web/app/common/scripts/stream.js b/src/web/app/common/scripts/stream.js index 8004f11bc..f6eaef372 100644 --- a/src/web/app/common/scripts/stream.js +++ b/src/web/app/common/scripts/stream.js @@ -16,6 +16,7 @@ class Connection { this.state = 'initializing'; this.me = me; + this.buffer = []; const host = CONFIG.apiUrl.replace('http', 'ws'); this.socket = new ReconnectingWebSocket(`${host}?i=${me.token}`); @@ -29,6 +30,13 @@ class Connection { onOpen() { this.state = 'connected'; this.trigger('_connected_'); + + // バッファーを処理 + const _buffer = [].concat(this.buffer); // Shallow copy + this.buffer = []; // Clear buffer + _buffer.forEach(message => { + this.send(message); // Resend each buffered messages + }); } onClose() { @@ -46,8 +54,12 @@ class Connection { } send(message) { - // TODO: バッファリングしてつぎ接続した時に送信する - if (this.state != 'connected') return; + // まだ接続が確立されていなかったらバッファリングして次に接続した時に送信する + if (this.state != 'connected') { + this.buffer.push(message); + return; + }; + this.socket.send(JSON.stringify(message)); }