diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2017-02-18 13:18:59 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2017-02-18 13:18:59 +0900 |
| commit | 4770e1fab89b35671f9fd1eb3080efca717e27ac (patch) | |
| tree | 1fa19779dadb27bf1804d4338409146adf62af74 /src/web/app/common/scripts/stream.js | |
| parent | :v: (diff) | |
| download | misskey-4770e1fab89b35671f9fd1eb3080efca717e27ac.tar.gz misskey-4770e1fab89b35671f9fd1eb3080efca717e27ac.tar.bz2 misskey-4770e1fab89b35671f9fd1eb3080efca717e27ac.zip | |
:v:
Diffstat (limited to 'src/web/app/common/scripts/stream.js')
| -rw-r--r-- | src/web/app/common/scripts/stream.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/web/app/common/scripts/stream.js b/src/web/app/common/scripts/stream.js new file mode 100644 index 0000000000..b31e570444 --- /dev/null +++ b/src/web/app/common/scripts/stream.js @@ -0,0 +1,39 @@ +const ReconnectingWebSocket = require('reconnecting-websocket'); +const riot = require('riot'); + +module.exports = me => { + let state = 'initializing'; + const stateEv = riot.observable(); + const event = riot.observable(); + const host = CONFIG.api.url.replace('http', 'ws'); + const socket = new ReconnectingWebSocket(`${host}?i=${me.token}`); + + socket.onopen = () => { + state = 'connected'; + stateEv.trigger('connected'); + }; + + socket.onclose = () => { + state = 'reconnecting'; + stateEv.trigger('closed'); + }; + + socket.onmessage = message => { + try { + const message = JSON.parse(message.data); + if (message.type) { + event.trigger(message.type, message.body); + } + } catch (e) { + // noop + } + }; + + event.on('i_updated', me.update); + + return { + stateEv: stateEv, + getState: () => state, + event: event + }; +}; |