@@ -262,7 +262,8 @@ const enum ProtocolMessageType {
262
262
Disconnect = 5 ,
263
263
ReplayRequest = 6 ,
264
264
Pause = 7 ,
265
- Resume = 8
265
+ Resume = 8 ,
266
+ KeepAlive = 9 ,
266
267
}
267
268
268
269
function protocolMessageTypeToString ( messageType : ProtocolMessageType ) {
@@ -275,6 +276,7 @@ function protocolMessageTypeToString(messageType: ProtocolMessageType) {
275
276
case ProtocolMessageType . ReplayRequest : return 'ReplayRequest' ;
276
277
case ProtocolMessageType . Pause : return 'PauseWriting' ;
277
278
case ProtocolMessageType . Resume : return 'ResumeWriting' ;
279
+ case ProtocolMessageType . KeepAlive : return 'KeepAlive' ;
278
280
}
279
281
}
280
282
@@ -794,6 +796,8 @@ export class PersistentProtocol implements IMessagePassingProtocol {
794
796
private _incomingMsgLastTime : number ;
795
797
private _incomingAckTimeout : any | null ;
796
798
799
+ private _keepAliveInterval : any | null ;
800
+
797
801
private _lastReplayRequestTime : number ;
798
802
private _lastSocketTimeoutTime : number ;
799
803
@@ -850,6 +854,11 @@ export class PersistentProtocol implements IMessagePassingProtocol {
850
854
if ( initialChunk ) {
851
855
this . _socketReader . acceptChunk ( initialChunk ) ;
852
856
}
857
+
858
+ // send a message every 5s
859
+ this . _keepAliveInterval = setInterval ( ( ) => {
860
+ this . _sendKeepAlive ( ) ;
861
+ } , 5000 ) ;
853
862
}
854
863
855
864
dispose ( ) : void {
@@ -861,6 +870,10 @@ export class PersistentProtocol implements IMessagePassingProtocol {
861
870
clearTimeout ( this . _incomingAckTimeout ) ;
862
871
this . _incomingAckTimeout = null ;
863
872
}
873
+ if ( this . _keepAliveInterval ) {
874
+ clearInterval ( this . _keepAliveInterval ) ;
875
+ this . _keepAliveInterval = null ;
876
+ }
864
877
this . _socketDisposables = dispose ( this . _socketDisposables ) ;
865
878
}
866
879
@@ -982,7 +995,7 @@ export class PersistentProtocol implements IMessagePassingProtocol {
982
995
break ;
983
996
}
984
997
case ProtocolMessageType . Ack : {
985
- // nothing to do
998
+ // nothing to do, .ack is handled above already
986
999
break ;
987
1000
}
988
1001
case ProtocolMessageType . Disconnect : {
@@ -1006,6 +1019,10 @@ export class PersistentProtocol implements IMessagePassingProtocol {
1006
1019
this . _socketWriter . resume ( ) ;
1007
1020
break ;
1008
1021
}
1022
+ case ProtocolMessageType . KeepAlive : {
1023
+ // nothing to do
1024
+ break ;
1025
+ }
1009
1026
}
1010
1027
}
1011
1028
@@ -1129,6 +1146,11 @@ export class PersistentProtocol implements IMessagePassingProtocol {
1129
1146
const msg = new ProtocolMessage ( ProtocolMessageType . Ack , 0 , this . _incomingAckId , getEmptyBuffer ( ) ) ;
1130
1147
this . _socketWriter . write ( msg ) ;
1131
1148
}
1149
+
1150
+ private _sendKeepAlive ( ) : void {
1151
+ const msg = new ProtocolMessage ( ProtocolMessageType . KeepAlive , 0 , 0 , getEmptyBuffer ( ) ) ;
1152
+ this . _socketWriter . write ( msg ) ;
1153
+ }
1132
1154
}
1133
1155
1134
1156
// (() => {
0 commit comments