12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict';
- var SockJS = require('sockjs-client/dist/sockjs');
- var retries = 0;
- var sock = null;
- var socket = function initSocket(url, handlers) {
- sock = new SockJS(url);
- sock.onopen = function onopen() {
- retries = 0;
- };
- sock.onclose = function onclose() {
- if (retries === 0) {
- handlers.close();
- }
- // Try to reconnect.
- sock = null;
- // After 10 retries stop trying, to prevent logspam.
- if (retries <= 10) {
- // Exponentially increase timeout to reconnect.
- // Respectfully copied from the package `got`.
- // eslint-disable-next-line no-mixed-operators, no-restricted-properties
- var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;
- retries += 1;
- setTimeout(function () {
- socket(url, handlers);
- }, retryInMs);
- }
- };
- sock.onmessage = function onmessage(e) {
- // This assumes that all data sent via the websocket is JSON.
- var msg = JSON.parse(e.data);
- if (handlers[msg.type]) {
- handlers[msg.type](msg.data);
- }
- };
- };
- module.exports = socket;
|