@@ -68,15 +68,15 @@ const timelineFileStreams = new Map<string, fs.WriteStream>();
68
68
// CTS flag; When set, the renderer thread is accepting new WebSocket events.
69
69
let clearToSend = true ;
70
70
71
- // Send queue map; holds batches of events for each event channel , to be sent upon receiving a CTS signal.
71
+ // Send queue map; holds batches of events for each event requestId , to be sent upon receiving a CTS signal.
72
72
const sendQueueMap = new Map < string , WebSocketEventLog > ( ) ;
73
73
74
74
/**
75
75
* Dispatches a websocket event to a renderer, using batching control flow logic.
76
76
* When CTS is set, the events are sent immediately.
77
77
* If CTS is cleared, the events are batched into the send queue.
78
78
*/
79
- function dispatchWebSocketEvent ( target : Electron . WebContents , eventChannel : string , wsEvent : WebSocketEvent ) : void {
79
+ function dispatchWebSocketEvent ( requestId : string , target : Electron . WebContents , eventChannel : string , wsEvent : WebSocketEvent ) : void {
80
80
// If the CTS flag is already set, just send immediately.
81
81
if ( clearToSend ) {
82
82
target . send ( eventChannel , [ wsEvent ] ) ;
@@ -85,11 +85,11 @@ function dispatchWebSocketEvent(target: Electron.WebContents, eventChannel: stri
85
85
}
86
86
87
87
// Otherwise, append to send queue for this event channel.
88
- const sendQueue = sendQueueMap . get ( eventChannel ) ;
88
+ const sendQueue = sendQueueMap . get ( requestId ) ;
89
89
if ( sendQueue ) {
90
90
sendQueue . push ( wsEvent ) ;
91
91
} else {
92
- sendQueueMap . set ( eventChannel , [ wsEvent ] ) ;
92
+ sendQueueMap . set ( requestId , [ wsEvent ] ) ;
93
93
}
94
94
}
95
95
@@ -179,7 +179,7 @@ async function createWebSocketConnection(
179
179
180
180
eventLogFileStreams . get ( options . requestId ) ?. write ( JSON . stringify ( openEvent ) + '\n' ) ;
181
181
timelineFileStreams . get ( options . requestId ) ?. write ( JSON . stringify ( { value : 'WebSocket connection established' , name : 'Text' , timestamp : Date . now ( ) } ) + '\n' ) ;
182
- dispatchWebSocketEvent ( event . sender , eventChannel , openEvent ) ;
182
+ dispatchWebSocketEvent ( options . requestId , event . sender , eventChannel , openEvent ) ;
183
183
event . sender . send ( readyStateChannel , ws . readyState ) ;
184
184
} ) ;
185
185
@@ -194,7 +194,7 @@ async function createWebSocketConnection(
194
194
} ;
195
195
196
196
eventLogFileStreams . get ( options . requestId ) ?. write ( JSON . stringify ( messageEvent ) + '\n' ) ;
197
- dispatchWebSocketEvent ( event . sender , eventChannel , messageEvent ) ;
197
+ dispatchWebSocketEvent ( options . requestId , event . sender , eventChannel , messageEvent ) ;
198
198
} ) ;
199
199
200
200
ws . addEventListener ( 'close' , ( { code, reason, wasClean } ) => {
@@ -208,11 +208,10 @@ async function createWebSocketConnection(
208
208
timestamp : Date . now ( ) ,
209
209
} ;
210
210
211
- sendQueueMap . delete ( eventChannel ) ;
212
211
const message = `Closing connection with code ${ code } ` ;
213
212
closeRequest ( request . _id , message , closeEvent ) ;
214
213
215
- dispatchWebSocketEvent ( event . sender , eventChannel , closeEvent ) ;
214
+ dispatchWebSocketEvent ( options . requestId , event . sender , eventChannel , closeEvent ) ;
216
215
event . sender . send ( readyStateChannel , ws . readyState ) ;
217
216
} ) ;
218
217
@@ -230,7 +229,7 @@ async function createWebSocketConnection(
230
229
231
230
closeRequest ( request . _id , message , errorEvent ) ;
232
231
233
- dispatchWebSocketEvent ( event . sender , eventChannel , errorEvent ) ;
232
+ dispatchWebSocketEvent ( options . requestId , event . sender , eventChannel , errorEvent ) ;
234
233
event . sender . send ( readyStateChannel , ws . readyState ) ;
235
234
236
235
const responsePatch = {
@@ -272,6 +271,7 @@ async function closeRequest(requestId: string, message: string, event?: WebSocke
272
271
timelineFileStreams . get ( requestId ) ?. write ( JSON . stringify ( { value : message , name : 'Text' , timestamp : Date . now ( ) } ) + '\n' ) ;
273
272
timelineFileStreams . get ( requestId ) ?. end ( ) ;
274
273
timelineFileStreams . delete ( requestId ) ;
274
+ sendQueueMap . delete ( requestId ) ;
275
275
WebSocketConnections . delete ( requestId ) ;
276
276
}
277
277
@@ -321,7 +321,7 @@ async function sendWebSocketEvent(
321
321
return ;
322
322
}
323
323
const eventChannel = `webSocketRequest.connection.${ response . _id } .event` ;
324
- dispatchWebSocketEvent ( event . sender , eventChannel , lastMessage ) ;
324
+ dispatchWebSocketEvent ( options . requestId , event . sender , eventChannel , lastMessage ) ;
325
325
}
326
326
327
327
async function closeWebSocketConnection (
@@ -352,22 +352,22 @@ async function findMany(
352
352
* Sets the CTS flag; sent when the UI is ready for more events.
353
353
*/
354
354
function signalClearToSend ( event : Electron . IpcMainInvokeEvent ) {
355
- const nextChannel = sendQueueMap . keys ( ) . next ( ) ;
355
+ const nextRequestId = sendQueueMap . keys ( ) . next ( ) ;
356
356
357
357
// There are no pending events; just set the CTS flag.
358
- if ( nextChannel . done ) {
358
+ if ( nextRequestId . done ) {
359
359
clearToSend = true ;
360
360
return ;
361
361
}
362
362
363
363
// We have batched events; immediately send one batch.
364
- const sendQueue = sendQueueMap . get ( nextChannel . value ) ;
364
+ const sendQueue = sendQueueMap . get ( nextRequestId . value ) ;
365
365
if ( ! sendQueue ) {
366
366
return ;
367
367
}
368
368
369
- event . sender . send ( nextChannel . value , sendQueue ) ;
370
- sendQueueMap . delete ( nextChannel . value ) ;
369
+ event . sender . send ( nextRequestId . value , sendQueue ) ;
370
+ sendQueueMap . delete ( nextRequestId . value ) ;
371
371
}
372
372
373
373
export function registerWebSocketHandlers ( ) {
0 commit comments