@@ -24,6 +24,7 @@ export const SOCKET_STATUS = keyMirror(
24
24
let socket ;
25
25
let interval ;
26
26
let reconnectInterval = 1000 ;
27
+ let reconnectAttempts = 0 ;
27
28
28
29
const notifyRefresh = _ . debounce ( dispatch => {
29
30
NotificationManager . info (
@@ -33,7 +34,7 @@ const notifyRefresh = _.debounce(dispatch => {
33
34
( ) => dispatch ( refreshApp ( true ) ) ,
34
35
true ,
35
36
) ;
36
- } , 100 ) ;
37
+ } , 1000 ) ;
37
38
38
39
const initListenersForEachMessageType = dispatch => {
39
40
Object . keys ( messageTypes ) . forEach ( key => {
@@ -84,20 +85,35 @@ export const emitAction = actionCreator => {
84
85
} ;
85
86
86
87
const reconnectSocket = _ . debounce ( dispatch => {
87
- if ( ! socket || ( socket && ! socket . connected ) ) {
88
+ if ( reconnectAttempts <= 10 && ( ! socket || ! socket . connected ) ) {
89
+ console . log (
90
+ 'Attempting to reconnect to socket server...' ,
91
+ reconnectAttempts ,
92
+ ) ;
88
93
dispatch ( initiateSocket ( ) ) ;
89
94
setTimeout ( ( ) => {
90
- if ( ! socket || ( socket && ! socket . connected ) ) {
95
+ if ( ! socket || ! socket . connected ) {
91
96
reconnectSocket ( dispatch ) ;
92
97
}
93
- reconnectInterval = reconnectInterval * 2 ;
98
+ reconnectInterval *= 2 ;
94
99
} , reconnectInterval ) ;
100
+ } else if ( reconnectAttempts > 10 ) {
101
+ console . log ( "Couldn't connect to socket server. Max attempts reached." ) ;
102
+ dispatch ( setSocketStatus ( SOCKET_STATUS . OFFLINE ) ) ;
103
+
104
+ clearInterval ( interval ) ;
95
105
}
96
- } , 100 ) ;
106
+ } , 1000 ) ;
97
107
98
108
export const initiateSocket = remoteHost => {
99
109
disconnectSocket ( ) ;
100
110
111
+ if ( reconnectAttempts > 10 ) {
112
+ return ;
113
+ }
114
+
115
+ reconnectAttempts ++ ;
116
+
101
117
const WS_HOST = `${ remoteHost || constants . API_HOST } /ws` ;
102
118
const transports = [ 'websocket' ] ;
103
119
@@ -158,16 +174,22 @@ export const initiateSocket = remoteHost => {
158
174
console . log ( 'Attempting to connect to socket_id: ' , socket . id ) ;
159
175
console . log ( '### Socket Connected ###' ) ;
160
176
dispatch ( setSocketStatus ( SOCKET_STATUS . CONNECTED ) ) ;
177
+ reconnectAttempts = 0 ;
161
178
socket . emit ( 'authentication' ) ;
162
179
} ) ;
163
180
164
181
initListenersForEachMessageType ( dispatch ) ;
165
182
166
183
interval = setInterval ( ( ) => {
167
- if ( ! socket || ( socket && ! socket . connected ) ) {
184
+ if ( reconnectAttempts <= 10 && ( ! socket || ! socket . connected ) ) {
168
185
dispatch ( setSocketStatus ( SOCKET_STATUS . OFFLINE ) ) ;
169
186
clearInterval ( interval ) ;
170
187
reconnectSocket ( dispatch ) ;
188
+ } else if ( reconnectAttempts > 10 ) {
189
+ console . log ( "Couldn't connect to socket server. Max attempts reached." ) ;
190
+ dispatch ( setSocketStatus ( SOCKET_STATUS . OFFLINE ) ) ;
191
+ clearInterval ( interval ) ;
192
+ disconnectSocket ( ) ;
171
193
}
172
194
} , 5000 ) ;
173
195
} ;
0 commit comments