✌️
This commit is contained in:
		
							
								
								
									
										39
									
								
								src/web/app/common/scripts/stream.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/web/app/common/scripts/stream.js
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
@@ -1,39 +0,0 @@
 | 
			
		||||
# Stream
 | 
			
		||||
#================================
 | 
			
		||||
 | 
			
		||||
ReconnectingWebSocket = require \reconnecting-websocket
 | 
			
		||||
riot = require \riot
 | 
			
		||||
 | 
			
		||||
module.exports = (me) ~>
 | 
			
		||||
	state = \initializing
 | 
			
		||||
	state-ev = riot.observable!
 | 
			
		||||
	event = riot.observable!
 | 
			
		||||
 | 
			
		||||
	host = CONFIG.api.url.replace \http \ws
 | 
			
		||||
	socket = new ReconnectingWebSocket "#{host}?i=#{me.token}"
 | 
			
		||||
 | 
			
		||||
	socket.onopen = ~>
 | 
			
		||||
		state := \connected
 | 
			
		||||
		state-ev.trigger \connected
 | 
			
		||||
 | 
			
		||||
	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 me.update
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		state-ev
 | 
			
		||||
		get-state
 | 
			
		||||
		event
 | 
			
		||||
	}
 | 
			
		||||
		Reference in New Issue
	
	Block a user