summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/stream.js
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-03-18 20:05:11 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-03-18 20:05:11 +0900
commit45e8331e261244628b134a18e3d0fbe0ebb3a7dc (patch)
tree44ac1719fcea0a61c33698b23fb89400141e00d9 /src/web/app/common/scripts/stream.js
parentBetter notification (diff)
downloadmisskey-45e8331e261244628b134a18e3d0fbe0ebb3a7dc.tar.gz
misskey-45e8331e261244628b134a18e3d0fbe0ebb3a7dc.tar.bz2
misskey-45e8331e261244628b134a18e3d0fbe0ebb3a7dc.zip
:sushi:
Closes #12, #227 and #58
Diffstat (limited to 'src/web/app/common/scripts/stream.js')
-rw-r--r--src/web/app/common/scripts/stream.js71
1 files changed, 42 insertions, 29 deletions
diff --git a/src/web/app/common/scripts/stream.js b/src/web/app/common/scripts/stream.js
index fd7bac7faa..d6e6bf8aa5 100644
--- a/src/web/app/common/scripts/stream.js
+++ b/src/web/app/common/scripts/stream.js
@@ -1,40 +1,53 @@
const ReconnectingWebSocket = require('reconnecting-websocket');
-const riot = require('riot');
-const CONFIG = require('./config');
+import * as riot from 'riot';
+import CONFIG from './config';
-module.exports = me => {
- let state = 'initializing';
- const stateEv = riot.observable();
- const event = riot.observable();
- const host = CONFIG.apiUrl.replace('http', 'ws');
- const socket = new ReconnectingWebSocket(`${host}?i=${me.token}`);
+class Connection {
+ constructor(me) {
+ // BIND -----------------------------------
+ this.onOpen = this.onOpen.bind(this);
+ this.onClose = this.onClose.bind(this);
+ this.onMessage = this.onMessage.bind(this);
+ this.close = this.close.bind(this);
+ // ----------------------------------------
- socket.onopen = () => {
- state = 'connected';
- stateEv.trigger('connected');
- };
+ this.state = 'initializing';
+ this.stateEv = riot.observable();
+ this.event = riot.observable();
+ this.me = me;
- socket.onclose = () => {
- state = 'reconnecting';
- stateEv.trigger('closed');
- };
+ const host = CONFIG.apiUrl.replace('http', 'ws');
+ this.socket = new ReconnectingWebSocket(`${host}?i=${me.token}`);
+ this.socket.addEventListener('open', this.onOpen);
+ this.socket.addEventListener('close', this.onClose);
+ this.socket.addEventListener('message', this.onMessage);
- socket.onmessage = message => {
+ this.event.on('i_updated', me.update);
+ }
+
+ onOpen() {
+ this.state = 'connected';
+ this.stateEv.trigger('connected');
+ }
+
+ onClose() {
+ this.state = 'reconnecting';
+ this.stateEv.trigger('closed');
+ }
+
+ onMessage(message) {
try {
const msg = JSON.parse(message.data);
- if (msg.type) {
- event.trigger(msg.type, msg.body);
- }
- } catch (e) {
+ if (msg.type) this.event.trigger(msg.type, msg.body);
+ } catch(e) {
// noop
}
- };
+ }
- event.on('i_updated', me.update);
+ close() {
+ this.socket.removeEventListener('open', this.onOpen);
+ this.socket.removeEventListener('message', this.onMessage);
+ }
+}
- return {
- stateEv: stateEv,
- getState: () => state,
- event: event
- };
-};
+export default Connection;