summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/stream.ls
blob: 534048248fdde965b4c9ed2a33a9a7e95db2d40e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Stream
#================================

ReconnectingWebSocket = require \reconnecting-websocket
riot = require \riot

module.exports = (me) ~>
	state = \initializing
	state-ev = riot.observable!
	event = riot.observable!

	socket = new ReconnectingWebSocket CONFIG.api.url.replace \http \ws

	socket.onopen = ~>
		state := \connected
		state-ev.trigger \connected
		socket.send JSON.stringify do
			i: me.token

	socket.onclose = ~>
		state := \reconnecting
		state-ev.trigger \closed

	socket.onmessage = (message) ~>
		try
			message = JSON.parse message.data
			if message.type?
				event.trigger message.type, message.body
		catch
			# ignore

	get-state = ~> state

	event.on \i_updated (data) ~>
		Object.assign me, data
		me.trigger \updated

	{
		state-ev
		get-state
		event
	}