@@ -34,6 +34,7 @@ export class AppComponent implements OnInit {
34
34
versionWorker : CDSWebWorker ;
35
35
36
36
sseWorker : CDSWorker ;
37
+ heartbeatToken : number ;
37
38
38
39
zone : NgZone ;
39
40
@@ -42,13 +43,14 @@ export class AppComponent implements OnInit {
42
43
43
44
languageSubscriber : Subscription ;
44
45
versionWorkerSubscription : Subscription ;
45
- sseWorkerSubscription : Subscription ;
46
46
_routerSubscription : Subscription ;
47
47
_routerNavEndSubscription : Subscription ;
48
48
49
49
displayResolver = false ;
50
50
toasterConfig : any ;
51
51
52
+ lastPing : number ;
53
+
52
54
constructor ( _translate : TranslateService , private _language : LanguageStore ,
53
55
private _activatedRoute : ActivatedRoute , private _titleService : Title ,
54
56
private _authStore : AuthentificationStore , private _router : Router ,
@@ -77,7 +79,7 @@ export class AppComponent implements OnInit {
77
79
this . _authStore . getUserlst ( ) . subscribe ( user => {
78
80
if ( ! user ) {
79
81
this . isConnected = false ;
80
- this . stopWorker ( this . sseWorker , this . sseWorkerSubscription ) ;
82
+ this . stopWorker ( this . sseWorker , null ) ;
81
83
} else {
82
84
this . isConnected = true ;
83
85
this . startSSE ( ) ;
@@ -133,6 +135,9 @@ export class AppComponent implements OnInit {
133
135
}
134
136
135
137
startSSE ( ) : void {
138
+ if ( this . sseWorker ) {
139
+ this . stopWorker ( this . sseWorker , null ) ;
140
+ }
136
141
let authKey : string ;
137
142
let authValue : string ;
138
143
// ADD user AUTH
@@ -147,6 +152,17 @@ export class AppComponent implements OnInit {
147
152
148
153
if ( window [ 'SharedWorker' ] ) {
149
154
this . sseWorker = new CDSSharedWorker ( './assets/worker/sharedWorker.js' ) ;
155
+ if ( this . heartbeatToken !== 0 ) {
156
+ clearInterval ( this . heartbeatToken ) ;
157
+ }
158
+
159
+ this . heartbeatToken = setInterval ( ( ) => {
160
+ let d = ( new Date ( ) ) . getTime ( ) ;
161
+ if ( this . lastPing !== 0 && ( d - this . lastPing ) > 11000 ) {
162
+ // If no ping in the last 11s restart SSE
163
+ this . startSSE ( ) ;
164
+ }
165
+ } ) ;
150
166
} else {
151
167
this . sseWorker = new CDSWebWorker ( './assets/worker/webWorker.js' ) ;
152
168
}
@@ -164,7 +180,16 @@ export class AppComponent implements OnInit {
164
180
return ;
165
181
}
166
182
this . zone . run ( ( ) => {
167
- this . _appService . manageEvent ( < Event > e ) ;
183
+ if ( e . healthCheck != null ) {
184
+ this . lastPing = ( new Date ( ) ) . getTime ( ) ;
185
+ // 0 = CONNECTING, 1 = OPEN, 2 = CLOSED
186
+ if ( e . healthCheck > 1 ) {
187
+ // Reopen SSE
188
+ this . startSSE ( ) ;
189
+ }
190
+ } else {
191
+ this . _appService . manageEvent ( < Event > e ) ;
192
+ }
168
193
} ) ;
169
194
} ) ;
170
195
}
0 commit comments