[IMPROVE] Connection stability (#3531)
This commit is contained in:
parent
838be232ff
commit
404c7cff07
|
@ -6,7 +6,6 @@ import { inquiryQueueAdd, inquiryQueueRemove, inquiryQueueUpdate, inquiryRequest
|
||||||
const removeListener = listener => listener.stop();
|
const removeListener = listener => listener.stop();
|
||||||
|
|
||||||
let connectedListener;
|
let connectedListener;
|
||||||
let disconnectedListener;
|
|
||||||
let queueListener;
|
let queueListener;
|
||||||
|
|
||||||
const streamTopic = 'stream-livechat-inquiry-queue-observer';
|
const streamTopic = 'stream-livechat-inquiry-queue-observer';
|
||||||
|
@ -48,10 +47,6 @@ export default function subscribeInquiry() {
|
||||||
connectedListener.then(removeListener);
|
connectedListener.then(removeListener);
|
||||||
connectedListener = false;
|
connectedListener = false;
|
||||||
}
|
}
|
||||||
if (disconnectedListener) {
|
|
||||||
disconnectedListener.then(removeListener);
|
|
||||||
disconnectedListener = false;
|
|
||||||
}
|
|
||||||
if (queueListener) {
|
if (queueListener) {
|
||||||
queueListener.then(removeListener);
|
queueListener.then(removeListener);
|
||||||
queueListener = false;
|
queueListener = false;
|
||||||
|
@ -59,7 +54,6 @@ export default function subscribeInquiry() {
|
||||||
};
|
};
|
||||||
|
|
||||||
connectedListener = RocketChat.onStreamData('connected', handleConnection);
|
connectedListener = RocketChat.onStreamData('connected', handleConnection);
|
||||||
disconnectedListener = RocketChat.onStreamData('close', handleConnection);
|
|
||||||
queueListener = RocketChat.onStreamData(streamTopic, handleQueueMessageReceived);
|
queueListener = RocketChat.onStreamData(streamTopic, handleQueueMessageReceived);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import messagesStatus from '../../../constants/messagesStatus';
|
||||||
import log from '../../../utils/log';
|
import log from '../../../utils/log';
|
||||||
import random from '../../../utils/random';
|
import random from '../../../utils/random';
|
||||||
import store from '../../createStore';
|
import store from '../../createStore';
|
||||||
import { roomsRequest } from '../../../actions/rooms';
|
|
||||||
import { handlePayloadUserInteraction } from '../actions';
|
import { handlePayloadUserInteraction } from '../actions';
|
||||||
import buildMessage from '../helpers/buildMessage';
|
import buildMessage from '../helpers/buildMessage';
|
||||||
import RocketChat from '../../rocketchat';
|
import RocketChat from '../../rocketchat';
|
||||||
|
@ -21,8 +20,6 @@ import { E2E_MESSAGE_TYPE } from '../../encryption/constants';
|
||||||
|
|
||||||
const removeListener = listener => listener.stop();
|
const removeListener = listener => listener.stop();
|
||||||
|
|
||||||
let connectedListener;
|
|
||||||
let disconnectedListener;
|
|
||||||
let streamListener;
|
let streamListener;
|
||||||
let subServer;
|
let subServer;
|
||||||
let queue = {};
|
let queue = {};
|
||||||
|
@ -255,10 +252,6 @@ const debouncedUpdate = subscription => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function subscribeRooms() {
|
export default function subscribeRooms() {
|
||||||
const handleConnection = () => {
|
|
||||||
store.dispatch(roomsRequest());
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleStreamMessageReceived = protectedFunction(async ddpMessage => {
|
const handleStreamMessageReceived = protectedFunction(async ddpMessage => {
|
||||||
const db = database.active;
|
const db = database.active;
|
||||||
|
|
||||||
|
@ -388,14 +381,6 @@ export default function subscribeRooms() {
|
||||||
});
|
});
|
||||||
|
|
||||||
const stop = () => {
|
const stop = () => {
|
||||||
if (connectedListener) {
|
|
||||||
connectedListener.then(removeListener);
|
|
||||||
connectedListener = false;
|
|
||||||
}
|
|
||||||
if (disconnectedListener) {
|
|
||||||
disconnectedListener.then(removeListener);
|
|
||||||
disconnectedListener = false;
|
|
||||||
}
|
|
||||||
if (streamListener) {
|
if (streamListener) {
|
||||||
streamListener.then(removeListener);
|
streamListener.then(removeListener);
|
||||||
streamListener = false;
|
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);
|
streamListener = this.sdk.onStreamData('stream-notify-user', handleStreamMessageReceived);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -239,37 +239,34 @@ const RocketChat = {
|
||||||
this.code = null;
|
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();
|
this.getSettings();
|
||||||
|
|
||||||
const sdkConnect = () =>
|
this.sdk
|
||||||
this.sdk
|
.connect()
|
||||||
.connect()
|
.then(() => {
|
||||||
.then(() => {
|
console.log('connected');
|
||||||
const { server: currentServer } = reduxStore.getState().server;
|
})
|
||||||
if (user && user.token && server === currentServer) {
|
.catch(err => {
|
||||||
reduxStore.dispatch(loginRequest({ resume: user.token }, logoutOnError));
|
console.log('connect error', err);
|
||||||
}
|
});
|
||||||
})
|
|
||||||
.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.connectingListener = this.sdk.onStreamData('connecting', () => {
|
this.connectingListener = this.sdk.onStreamData('connecting', () => {
|
||||||
reduxStore.dispatch(connectRequest());
|
reduxStore.dispatch(connectRequest());
|
||||||
});
|
});
|
||||||
|
|
||||||
this.connectedListener = this.sdk.onStreamData('connected', () => {
|
this.connectedListener = this.sdk.onStreamData('connected', () => {
|
||||||
|
const { connected } = reduxStore.getState().meteor;
|
||||||
|
if (connected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
reduxStore.dispatch(connectSuccess());
|
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', () => {
|
this.closeListener = this.sdk.onStreamData('close', () => {
|
||||||
|
|
|
@ -3760,7 +3760,7 @@
|
||||||
|
|
||||||
"@rocket.chat/sdk@RocketChat/Rocket.Chat.js.SDK#mobile":
|
"@rocket.chat/sdk@RocketChat/Rocket.Chat.js.SDK#mobile":
|
||||||
version "1.1.0-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:
|
dependencies:
|
||||||
js-sha256 "^0.9.0"
|
js-sha256 "^0.9.0"
|
||||||
lru-cache "^4.1.1"
|
lru-cache "^4.1.1"
|
||||||
|
|
Loading…
Reference in New Issue