@@ -18,6 +18,7 @@ export interface SocketDelegate {
1818 socketDidClose ( socket : Socket , code ?: number , reason ?: string ) : void
1919 socketDidFinish ( socket : Socket ) : void
2020 socketDidReceiveMessage ( socket : Socket , message : string ) : void
21+ socketShouldRetry ?( socket : Socket , code : number ) : boolean
2122}
2223
2324export class StableSocket implements Socket {
@@ -48,7 +49,10 @@ export class StableSocket implements Socket {
4849 this . socket . onclose = ( event : CloseEvent ) => {
4950 this . socket = null
5051 this . delegate . socketDidClose ( this , event . code , event . reason )
51- if ( isFatal ( event . code ) ) {
52+ const fatal = this . delegate . socketShouldRetry
53+ ? ! this . delegate . socketShouldRetry ( this , event . code )
54+ : isFatal ( event . code )
55+ if ( fatal ) {
5256 this . delegate . socketDidFinish ( this )
5357 } else {
5458 setTimeout ( ( ) => this . open ( ) , rand ( 100 , 150 ) )
@@ -88,7 +92,7 @@ function rand(min: number, max: number): number {
8892 return Math . random ( ) * ( max - min ) + min
8993}
9094
91- function isFatal ( code : number ) : boolean {
95+ export function isFatal ( code : number ) : boolean {
9296 return code === POLICY_VIOLATION || code === INTERNAL_ERROR
9397}
9498
0 commit comments