fix websockets not reconnecting

When it gets closed, even for errors, it doesn't always go into Socket.onerror. Add the reconnection logic back to just onclose (like it was before)
This commit is contained in:
Sean Yesmunt 2021-04-02 16:11:23 -04:00
parent 84af2dcef0
commit 64928213bf

View file

@ -2,12 +2,13 @@ import * as ACTIONS from 'constants/action_types';
import { getAuthToken } from 'util/saved-passwords'; import { getAuthToken } from 'util/saved-passwords';
import { doNotificationList } from 'redux/actions/notifications'; import { doNotificationList } from 'redux/actions/notifications';
const NOTIFICATION_WS_URL = 'wss://api.lbry.com/subscribe?auth_token=';
const COMMENT_WS_URL = `wss://comments.lbry.com/api/v2/live-chat/subscribe?subscription_id=`; const COMMENT_WS_URL = `wss://comments.lbry.com/api/v2/live-chat/subscribe?subscription_id=`;
let sockets = {}; let sockets = {};
let retryCount = 0; let retryCount = 0;
export const doSocketConnect = (url, cb) => { export const doSocketConnect = (url, retryOnDisconnect, cb) => {
function connectToSocket() { function connectToSocket() {
if (sockets[url] !== undefined && sockets[url] !== null) { if (sockets[url] !== undefined && sockets[url] !== null) {
sockets[url].close(); sockets[url].close();
@ -21,6 +22,7 @@ export const doSocketConnect = (url, cb) => {
retryCount = 0; retryCount = 0;
console.log('\nConnected to WS \n\n'); // eslint-disable-line console.log('\nConnected to WS \n\n'); // eslint-disable-line
}; };
sockets[url].onmessage = (e) => { sockets[url].onmessage = (e) => {
const data = JSON.parse(e.data); const data = JSON.parse(e.data);
cb(data); cb(data);
@ -28,13 +30,17 @@ export const doSocketConnect = (url, cb) => {
sockets[url].onerror = (e) => { sockets[url].onerror = (e) => {
console.error('websocket onerror', e); // eslint-disable-line console.error('websocket onerror', e); // eslint-disable-line
retryCount += 1; // onerror and onclose will both fire, so nothing is needed here
connectToSocket();
}; };
sockets[url].onclose = () => { sockets[url].onclose = () => {
console.log('\n Disconnected from WS\n\n'); // eslint-disable-line console.log('\n Disconnected from WS\n\n'); // eslint-disable-line
sockets[url] = null; if (retryOnDisconnect) {
retryCount += 1;
connectToSocket();
} else {
sockets[url] = null;
}
}; };
}, timeToWait); }, timeToWait);
} }
@ -60,8 +66,9 @@ export const doNotificationSocketConnect = () => (dispatch) => {
return; return;
} }
const url = `wss://api.lbry.com/subscribe?auth_token=${authToken}`; const url = `${NOTIFICATION_WS_URL}${authToken}`;
doSocketConnect(url, (data) => {
doSocketConnect(url, true, (data) => {
if (data.type === 'pending_notification') { if (data.type === 'pending_notification') {
dispatch(doNotificationList()); dispatch(doNotificationList());
} }
@ -71,7 +78,7 @@ export const doNotificationSocketConnect = () => (dispatch) => {
export const doCommentSocketConnect = (uri, claimId) => (dispatch) => { export const doCommentSocketConnect = (uri, claimId) => (dispatch) => {
const url = `${COMMENT_WS_URL}${claimId}`; const url = `${COMMENT_WS_URL}${claimId}`;
doSocketConnect(url, (response) => { doSocketConnect(url, false, (response) => {
if (response.type === 'delta') { if (response.type === 'delta') {
const newComment = response.data.comment; const newComment = response.data.comment;
dispatch({ dispatch({