|
|
|
@ -2,6 +2,14 @@ import WebSocketClient from '@gamestdio/websocket';
|
|
|
|
|
|
|
|
|
|
const randomIntUpTo = max => Math.floor(Math.random() * Math.floor(max));
|
|
|
|
|
|
|
|
|
|
const knownEventTypes = [
|
|
|
|
|
'update',
|
|
|
|
|
'delete',
|
|
|
|
|
'notification',
|
|
|
|
|
'conversation',
|
|
|
|
|
'filters_changed',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export function connectStream(path, pollingRefresh = null, callbacks = () => ({ onConnect() {}, onDisconnect() {}, onReceive() {} })) {
|
|
|
|
|
return (dispatch, getState) => {
|
|
|
|
|
const streamingAPIBaseURL = getState().getIn(['meta', 'streaming_api_base_url']);
|
|
|
|
@ -69,14 +77,42 @@ export function connectStream(path, pollingRefresh = null, callbacks = () => ({
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export default function getStream(streamingAPIBaseURL, accessToken, stream, { connected, received, disconnected, reconnected }) {
|
|
|
|
|
const params = [ `stream=${stream}` ];
|
|
|
|
|
|
|
|
|
|
const ws = new WebSocketClient(`${streamingAPIBaseURL}/api/v1/streaming/?${params.join('&')}`, accessToken);
|
|
|
|
|
|
|
|
|
|
ws.onopen = connected;
|
|
|
|
|
ws.onmessage = e => received(JSON.parse(e.data));
|
|
|
|
|
ws.onclose = disconnected;
|
|
|
|
|
ws.onreconnect = reconnected;
|
|
|
|
|
const params = stream.split('&');
|
|
|
|
|
stream = params.shift();
|
|
|
|
|
|
|
|
|
|
if (streamingAPIBaseURL.startsWith('ws')) {
|
|
|
|
|
params.unshift(`stream=${stream}`);
|
|
|
|
|
const ws = new WebSocketClient(`${streamingAPIBaseURL}/api/v1/streaming/?${params.join('&')}`, accessToken);
|
|
|
|
|
|
|
|
|
|
ws.onopen = connected;
|
|
|
|
|
ws.onmessage = e => received(JSON.parse(e.data));
|
|
|
|
|
ws.onclose = disconnected;
|
|
|
|
|
ws.onreconnect = reconnected;
|
|
|
|
|
|
|
|
|
|
return ws;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
params.push(`access_token=${accessToken}`);
|
|
|
|
|
const es = new EventSource(`${streamingAPIBaseURL}/api/v1/streaming/${stream}?${params.join('&')}`);
|
|
|
|
|
|
|
|
|
|
let firstConnect = true;
|
|
|
|
|
es.onopen = () => {
|
|
|
|
|
if (firstConnect) {
|
|
|
|
|
firstConnect = false;
|
|
|
|
|
connected();
|
|
|
|
|
} else {
|
|
|
|
|
reconnected();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
for (let type of knownEventTypes) {
|
|
|
|
|
es.addEventListener(type, (e) => {
|
|
|
|
|
received({
|
|
|
|
|
event: e.type,
|
|
|
|
|
payload: e.data,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
es.onerror = disconnected;
|
|
|
|
|
|
|
|
|
|
return ws;
|
|
|
|
|
return es;
|
|
|
|
|
};
|
|
|
|
|