From 404c7cff072d44f8cb2f758ed771bae2789719bc Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 7 Dec 2021 17:05:30 -0300 Subject: [PATCH] [IMPROVE] Connection stability (#3531) --- .../omnichannel/lib/subscriptions/inquiry.js | 6 --- app/lib/methods/subscriptions/rooms.js | 17 -------- app/lib/rocketchat.js | 41 +++++++++---------- yarn.lock | 2 +- 4 files changed, 20 insertions(+), 46 deletions(-) diff --git a/app/ee/omnichannel/lib/subscriptions/inquiry.js b/app/ee/omnichannel/lib/subscriptions/inquiry.js index 00d320828..d10d5c892 100644 --- a/app/ee/omnichannel/lib/subscriptions/inquiry.js +++ b/app/ee/omnichannel/lib/subscriptions/inquiry.js @@ -6,7 +6,6 @@ import { inquiryQueueAdd, inquiryQueueRemove, inquiryQueueUpdate, inquiryRequest const removeListener = listener => listener.stop(); let connectedListener; -let disconnectedListener; let queueListener; const streamTopic = 'stream-livechat-inquiry-queue-observer'; @@ -48,10 +47,6 @@ export default function subscribeInquiry() { connectedListener.then(removeListener); connectedListener = false; } - if (disconnectedListener) { - disconnectedListener.then(removeListener); - disconnectedListener = false; - } if (queueListener) { queueListener.then(removeListener); queueListener = false; @@ -59,7 +54,6 @@ export default function subscribeInquiry() { }; connectedListener = RocketChat.onStreamData('connected', handleConnection); - disconnectedListener = RocketChat.onStreamData('close', handleConnection); queueListener = RocketChat.onStreamData(streamTopic, handleQueueMessageReceived); try { diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index 4dd84adfc..c2fc9fcdf 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -8,7 +8,6 @@ import messagesStatus from '../../../constants/messagesStatus'; import log from '../../../utils/log'; import random from '../../../utils/random'; import store from '../../createStore'; -import { roomsRequest } from '../../../actions/rooms'; import { handlePayloadUserInteraction } from '../actions'; import buildMessage from '../helpers/buildMessage'; import RocketChat from '../../rocketchat'; @@ -21,8 +20,6 @@ import { E2E_MESSAGE_TYPE } from '../../encryption/constants'; const removeListener = listener => listener.stop(); -let connectedListener; -let disconnectedListener; let streamListener; let subServer; let queue = {}; @@ -255,10 +252,6 @@ const debouncedUpdate = subscription => { }; export default function subscribeRooms() { - const handleConnection = () => { - store.dispatch(roomsRequest()); - }; - const handleStreamMessageReceived = protectedFunction(async ddpMessage => { const db = database.active; @@ -388,14 +381,6 @@ export default function subscribeRooms() { }); const stop = () => { - if (connectedListener) { - connectedListener.then(removeListener); - connectedListener = false; - } - if (disconnectedListener) { - disconnectedListener.then(removeListener); - disconnectedListener = false; - } if (streamListener) { streamListener.then(removeListener); streamListener = false; @@ -407,8 +392,6 @@ export default function subscribeRooms() { } }; - connectedListener = this.sdk.onStreamData('connected', handleConnection); - // disconnectedListener = this.sdk.onStreamData('close', handleConnection); streamListener = this.sdk.onStreamData('stream-notify-user', handleStreamMessageReceived); try { diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 5bf94d085..174eaf9a7 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -239,37 +239,34 @@ const RocketChat = { this.code = null; } - this.sdk = new RocketchatClient({ host: server, protocol: 'ddp', useSsl: useSsl(server) }); + // The app can't reconnect if reopen interval is 5s while in development + this.sdk = new RocketchatClient({ host: server, protocol: 'ddp', useSsl: useSsl(server), reopen: __DEV__ ? 20000 : 5000 }); this.getSettings(); - const sdkConnect = () => - this.sdk - .connect() - .then(() => { - const { server: currentServer } = reduxStore.getState().server; - if (user && user.token && server === currentServer) { - reduxStore.dispatch(loginRequest({ resume: user.token }, logoutOnError)); - } - }) - .catch(err => { - console.log('connect error', err); - - // when `connect` raises an error, we try again in 10 seconds - this.connectTimeout = setTimeout(() => { - if (this.sdk?.client?.host === server) { - sdkConnect(); - } - }, 10000); - }); - - sdkConnect(); + this.sdk + .connect() + .then(() => { + console.log('connected'); + }) + .catch(err => { + console.log('connect error', err); + }); this.connectingListener = this.sdk.onStreamData('connecting', () => { reduxStore.dispatch(connectRequest()); }); this.connectedListener = this.sdk.onStreamData('connected', () => { + const { connected } = reduxStore.getState().meteor; + if (connected) { + return; + } reduxStore.dispatch(connectSuccess()); + const { server: currentServer } = reduxStore.getState().server; + const { user } = reduxStore.getState().login; + if (user?.token && server === currentServer) { + reduxStore.dispatch(loginRequest({ resume: user.token }, logoutOnError)); + } }); this.closeListener = this.sdk.onStreamData('close', () => { diff --git a/yarn.lock b/yarn.lock index 4325aa75a..b4ca2beb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3760,7 +3760,7 @@ "@rocket.chat/sdk@RocketChat/Rocket.Chat.js.SDK#mobile": version "1.1.0-mobile" - resolved "https://codeload.github.com/RocketChat/Rocket.Chat.js.SDK/tar.gz/0ee2ded22b08b34ce7ab62b26e42a713dca0d1ac" + resolved "https://codeload.github.com/RocketChat/Rocket.Chat.js.SDK/tar.gz/c64e69ea22514ae3bbe24e36ca77868fdae76157" dependencies: js-sha256 "^0.9.0" lru-cache "^4.1.1"