11const { client : WebSocketClient } = require ( 'websocket' ) ;
22const { SOCKET_URL } = require ( './utils/const' ) ;
3- let client , reconnect , messageListener , socketConnection ;
3+ let client , reconnect , messageListener , socketConnection , lastJWT ;
44let shouldReconnect = true ;
55const reconnectDelay = 2000 ;
66
@@ -21,11 +21,9 @@ const disconnect = () => {
2121const 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
6972const 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+
7988module . exports = {
8089 start,
8190 setMessageListener,
8291 disconnect,
83- restartSocket
92+ restartSocket,
93+ restartSocketSameJWT
8494} ;
0 commit comments