mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 08:39:59 +00:00
Fix bridge SIGTERM handling
This commit is contained in:
@@ -179,16 +179,19 @@ export async function startMediaServer(filePath: string, port: number) {
|
|||||||
|
|
||||||
export function stopMediaServer() {
|
export function stopMediaServer() {
|
||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
if (mediaServer?.listening) {
|
if (!mediaServer?.listening) {
|
||||||
mediaServer.close(err => {
|
resolve();
|
||||||
if (err) {
|
return;
|
||||||
reject();
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mediaServer = undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mediaServer.close(err => {
|
||||||
|
if (err) {
|
||||||
|
reject();
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mediaServer = undefined;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,22 @@
|
|||||||
import http from "http";
|
import http from "http";
|
||||||
import https from "https";
|
import https from "https";
|
||||||
import { spawn } from "child_process";
|
import { ChildProcess, spawn } from "child_process";
|
||||||
import { Readable } from "stream";
|
import { Readable } from "stream";
|
||||||
|
|
||||||
import WebSocket from "ws";
|
import WebSocket from "ws";
|
||||||
|
|
||||||
import { DecodeTransform, EncodeTransform } from "./transforms.js";
|
import { DecodeTransform, EncodeTransform } from "./transforms.js";
|
||||||
|
|
||||||
|
const bridgeInstances = new Set<ChildProcess>();
|
||||||
|
|
||||||
|
// Ensure child processes are killed on exit
|
||||||
|
process.on("SIGTERM", async () => {
|
||||||
|
for (const bridge of bridgeInstances) {
|
||||||
|
bridge.kill();
|
||||||
|
}
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
export interface DaemonOpts {
|
export interface DaemonOpts {
|
||||||
host: string;
|
host: string;
|
||||||
port: number;
|
port: number;
|
||||||
@@ -46,6 +56,7 @@ export function init(opts: DaemonOpts) {
|
|||||||
* version of self in bridge mode.
|
* version of self in bridge mode.
|
||||||
*/
|
*/
|
||||||
const bridge = spawn(process.execPath, [process.argv[1]]);
|
const bridge = spawn(process.execPath, [process.argv[1]]);
|
||||||
|
bridgeInstances.add(bridge);
|
||||||
|
|
||||||
// socket -> bridge.stdin
|
// socket -> bridge.stdin
|
||||||
messageStream.pipe(new EncodeTransform()).pipe(bridge.stdin);
|
messageStream.pipe(new EncodeTransform()).pipe(bridge.stdin);
|
||||||
@@ -61,7 +72,10 @@ export function init(opts: DaemonOpts) {
|
|||||||
|
|
||||||
// Handle termination
|
// Handle termination
|
||||||
socket.on("close", () => bridge.kill());
|
socket.on("close", () => bridge.kill());
|
||||||
bridge.on("exit", () => socket.close());
|
bridge.on("exit", () => {
|
||||||
|
socket.close();
|
||||||
|
bridgeInstances.delete(bridge);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user