fix acceleration websocket ping error
This commit is contained in:
		
							parent
							
								
									abe9aa1fdc
								
							
						
					
					
						commit
						9a81db8e6c
					
				| @ -246,11 +246,11 @@ class AccelerationApi { | ||||
|       this.startedWebsocketLoop = true; | ||||
|       if (!this.ws) { | ||||
|         this.ws = new WebSocket(this.websocketPath); | ||||
|         this.websocketConnected = true; | ||||
|         this.lastPing = 0; | ||||
| 
 | ||||
|         this.ws.on('open', () => { | ||||
|           logger.info(`Acceleration websocket opened to ${this.websocketPath}`); | ||||
|           this.websocketConnected = true; | ||||
|           this.ws?.send(JSON.stringify({ | ||||
|             'watch-accelerations': true | ||||
|           })); | ||||
| @ -286,17 +286,28 @@ class AccelerationApi { | ||||
|           logger.debug('received pong from acceleration websocket server'); | ||||
|           this.lastPong = Date.now(); | ||||
|         }); | ||||
|       } else { | ||||
|       } else if (this.websocketConnected) { | ||||
|         if (this.lastPing && this.lastPing > this.lastPong && (Date.now() - this.lastPing > 10000)) { | ||||
|           logger.warn('No pong received within 10 seconds, terminating connection'); | ||||
|           this.ws.terminate(); | ||||
|           try { | ||||
|             this.ws?.terminate(); | ||||
|           } catch (e) { | ||||
|             logger.warn('failed to terminate acceleration websocket connection: ' + (e instanceof Error ? e.message : e)); | ||||
|           } finally { | ||||
|             this.ws = null; | ||||
|             this.websocketConnected = false; | ||||
|             this.lastPing = 0; | ||||
|           } | ||||
|         } else if (!this.lastPing || (Date.now() - this.lastPing > 30000)) { | ||||
|           logger.debug('sending ping to acceleration websocket server'); | ||||
|           this.ws.ping(); | ||||
|           if (this.ws?.readyState === WebSocket.OPEN) { | ||||
|             try { | ||||
|               this.ws?.ping(); | ||||
|               this.lastPing = Date.now(); | ||||
|             } catch (e) { | ||||
|               logger.warn('failed to send ping to acceleration websocket server: ' + (e instanceof Error ? e.message : e)); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       await new Promise(resolve => setTimeout(resolve, 5000)); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user