decoder reconnect
This commit is contained in:
@@ -21,7 +21,9 @@ export async function startFakeDecoder() {
|
||||
// plain server.close() would wait forever for them to end; track and destroy them
|
||||
// explicitly instead. closeAllConnections() does not reach upgraded sockets.
|
||||
const sockets = new Set();
|
||||
let totalConnections = 0;
|
||||
server.on("upgrade", (req, socket) => {
|
||||
totalConnections += 1;
|
||||
sockets.add(socket);
|
||||
socket.on("close", () => sockets.delete(socket));
|
||||
const key = req.headers["sec-websocket-key"];
|
||||
@@ -32,6 +34,12 @@ export async function startFakeDecoder() {
|
||||
await new Promise((resolve, reject) => { server.once("error", reject); server.listen(port, "127.0.0.1", resolve); });
|
||||
return {
|
||||
port,
|
||||
activeConnections: () => sockets.size,
|
||||
totalConnections: () => totalConnections,
|
||||
// Drops every currently-open socket with a raw TCP reset (not a clean WS close
|
||||
// handshake) to simulate a decoder/network interruption, while the server keeps
|
||||
// listening so the frontend's own reconnect logic has somewhere to reconnect to.
|
||||
dropConnections: () => { for (const socket of sockets) socket.destroy(); },
|
||||
close: () => new Promise(resolve => {
|
||||
for (const socket of sockets) socket.destroy();
|
||||
server.close(() => resolve());
|
||||
|
||||
Reference in New Issue
Block a user