Skip to content

Commit 165a136

Browse files
authored
Merge pull request #1309 from danieltigse/master
socket reliability improvement
2 parents 2fa0960 + 4ef6d7f commit 165a136

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

electron_app/src/reachabilityTask.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const { SERVER_URL } = require('./utils/const');
22
const globalManager = require('./globalManager');
33
const mailboxWindow = require('./windows/mailbox');
44
const { processEventsQueue } = require('./eventQueueManager');
5+
const { restartSocketSameJWT } = require('./socketClient');
56
const reconnectDelay = 2000;
67
const NETWORK_STATUS = {
78
ONLINE: 'online',
@@ -12,6 +13,7 @@ const normalPingDelayMs = 15000;
1213
const failedPingDelayMs = 5000;
1314
let pingFailedCounter = 0;
1415
let reachabilityTask = null;
16+
let hasFailed = false;
1517
let checkingConnectionToServer = false;
1618

1719
const setConnectionStatus = networkStatus => {
@@ -57,7 +59,12 @@ const checkAlive = async force => {
5759
if (prevNetworkStatus !== NETWORK_STATUS.ONLINE) {
5860
setConnectionStatus(NETWORK_STATUS.ONLINE);
5961
}
62+
if (hasFailed) {
63+
hasFailed = false;
64+
restartSocketSameJWT();
65+
}
6066
} catch (ex) {
67+
hasFailed = true;
6168
pingFailedCounter++;
6269
delayTime = failedPingDelayMs;
6370
if (pingFailedCounter > 3 && prevNetworkStatus !== NETWORK_STATUS.OFFLINE) {

electron_app/src/socketClient.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { client: WebSocketClient } = require('websocket');
22
const { SOCKET_URL } = require('./utils/const');
3-
let client, reconnect, messageListener, socketConnection;
3+
let client, reconnect, messageListener, socketConnection, lastJWT;
44
let shouldReconnect = true;
55
const reconnectDelay = 2000;
66

@@ -21,11 +21,9 @@ const disconnect = () => {
2121
const start = ({ jwt }) => {
2222
client = new WebSocketClient();
2323
client.connect(`${SOCKET_URL}?token=${jwt}`, 'criptext-protocol');
24-
24+
lastJWT = jwt;
2525
client.on('connectFailed', error => {
26-
if (shouldReconnect) {
27-
reconnect();
28-
}
26+
reconnect();
2927
log(error);
3028
});
3129

@@ -34,7 +32,7 @@ const start = ({ jwt }) => {
3432
log('Socket connection opened');
3533

3634
connection.on('error', error => {
37-
reconnect();
35+
restartSocketSameJWT();
3836
log(error);
3937
});
4038
connection.on('close', () => {
@@ -44,6 +42,11 @@ const start = ({ jwt }) => {
4442
const message = JSON.parse(data.utf8Data);
4543
messageListener(message);
4644
});
45+
connection.socket.setTimeout(30 * 1000);
46+
connection.socket.on('timeout', function() {
47+
log('Socket timeout');
48+
restartSocketSameJWT();
49+
});
4750
});
4851

4952
reconnect = () => {
@@ -67,6 +70,7 @@ process.on('exit', () => {
6770
});
6871

6972
const restartSocket = ({ jwt }) => {
73+
lastJWT = jwt;
7074
shouldReconnect = false;
7175
disconnect();
7276
client = null;
@@ -76,9 +80,15 @@ const restartSocket = ({ jwt }) => {
7680
}, reconnectDelay * 2);
7781
};
7882

83+
const restartSocketSameJWT = () => {
84+
if (!shouldReconnect) return;
85+
restartSocket({ jwt: lastJWT });
86+
};
87+
7988
module.exports = {
8089
start,
8190
setMessageListener,
8291
disconnect,
83-
restartSocket
92+
restartSocket,
93+
restartSocketSameJWT
8494
};

0 commit comments

Comments
 (0)