Skip to content

Commit 98335a9

Browse files
committed
use requestId to eliminate inconsistencies
1 parent b544853 commit 98335a9

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

packages/insomnia/src/main/network/websocket.ts

+15-15
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ const timelineFileStreams = new Map<string, fs.WriteStream>();
6868
// CTS flag; When set, the renderer thread is accepting new WebSocket events.
6969
let clearToSend = true;
7070

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.
7272
const sendQueueMap = new Map<string, WebSocketEventLog>();
7373

7474
/**
7575
* Dispatches a websocket event to a renderer, using batching control flow logic.
7676
* When CTS is set, the events are sent immediately.
7777
* If CTS is cleared, the events are batched into the send queue.
7878
*/
79-
function dispatchWebSocketEvent(target: Electron.WebContents, eventChannel: string, wsEvent: WebSocketEvent): void {
79+
function dispatchWebSocketEvent(requestId:string, target: Electron.WebContents, eventChannel: string, wsEvent: WebSocketEvent): void {
8080
// If the CTS flag is already set, just send immediately.
8181
if (clearToSend) {
8282
target.send(eventChannel, [wsEvent]);
@@ -85,11 +85,11 @@ function dispatchWebSocketEvent(target: Electron.WebContents, eventChannel: stri
8585
}
8686

8787
// Otherwise, append to send queue for this event channel.
88-
const sendQueue = sendQueueMap.get(eventChannel);
88+
const sendQueue = sendQueueMap.get(requestId);
8989
if (sendQueue) {
9090
sendQueue.push(wsEvent);
9191
} else {
92-
sendQueueMap.set(eventChannel, [wsEvent]);
92+
sendQueueMap.set(requestId, [wsEvent]);
9393
}
9494
}
9595

@@ -179,7 +179,7 @@ async function createWebSocketConnection(
179179

180180
eventLogFileStreams.get(options.requestId)?.write(JSON.stringify(openEvent) + '\n');
181181
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);
183183
event.sender.send(readyStateChannel, ws.readyState);
184184
});
185185

@@ -194,7 +194,7 @@ async function createWebSocketConnection(
194194
};
195195

196196
eventLogFileStreams.get(options.requestId)?.write(JSON.stringify(messageEvent) + '\n');
197-
dispatchWebSocketEvent(event.sender, eventChannel, messageEvent);
197+
dispatchWebSocketEvent(options.requestId, event.sender, eventChannel, messageEvent);
198198
});
199199

200200
ws.addEventListener('close', ({ code, reason, wasClean }) => {
@@ -208,11 +208,10 @@ async function createWebSocketConnection(
208208
timestamp: Date.now(),
209209
};
210210

211-
sendQueueMap.delete(eventChannel);
212211
const message = `Closing connection with code ${code}`;
213212
closeRequest(request._id, message, closeEvent);
214213

215-
dispatchWebSocketEvent(event.sender, eventChannel, closeEvent);
214+
dispatchWebSocketEvent(options.requestId, event.sender, eventChannel, closeEvent);
216215
event.sender.send(readyStateChannel, ws.readyState);
217216
});
218217

@@ -230,7 +229,7 @@ async function createWebSocketConnection(
230229

231230
closeRequest(request._id, message, errorEvent);
232231

233-
dispatchWebSocketEvent(event.sender, eventChannel, errorEvent);
232+
dispatchWebSocketEvent(options.requestId, event.sender, eventChannel, errorEvent);
234233
event.sender.send(readyStateChannel, ws.readyState);
235234

236235
const responsePatch = {
@@ -272,6 +271,7 @@ async function closeRequest(requestId: string, message: string, event?: WebSocke
272271
timelineFileStreams.get(requestId)?.write(JSON.stringify({ value: message, name: 'Text', timestamp: Date.now() }) + '\n');
273272
timelineFileStreams.get(requestId)?.end();
274273
timelineFileStreams.delete(requestId);
274+
sendQueueMap.delete(requestId);
275275
WebSocketConnections.delete(requestId);
276276
}
277277

@@ -321,7 +321,7 @@ async function sendWebSocketEvent(
321321
return;
322322
}
323323
const eventChannel = `webSocketRequest.connection.${response._id}.event`;
324-
dispatchWebSocketEvent(event.sender, eventChannel, lastMessage);
324+
dispatchWebSocketEvent(options.requestId, event.sender, eventChannel, lastMessage);
325325
}
326326

327327
async function closeWebSocketConnection(
@@ -352,22 +352,22 @@ async function findMany(
352352
* Sets the CTS flag; sent when the UI is ready for more events.
353353
*/
354354
function signalClearToSend(event: Electron.IpcMainInvokeEvent) {
355-
const nextChannel = sendQueueMap.keys().next();
355+
const nextRequestId = sendQueueMap.keys().next();
356356

357357
// There are no pending events; just set the CTS flag.
358-
if (nextChannel.done) {
358+
if (nextRequestId.done) {
359359
clearToSend = true;
360360
return;
361361
}
362362

363363
// We have batched events; immediately send one batch.
364-
const sendQueue = sendQueueMap.get(nextChannel.value);
364+
const sendQueue = sendQueueMap.get(nextRequestId.value);
365365
if (!sendQueue) {
366366
return;
367367
}
368368

369-
event.sender.send(nextChannel.value, sendQueue);
370-
sendQueueMap.delete(nextChannel.value);
369+
event.sender.send(nextRequestId.value, sendQueue);
370+
sendQueueMap.delete(nextRequestId.value);
371371
}
372372

373373
export function registerWebSocketHandlers() {

0 commit comments

Comments
 (0)