From ea696f0d36833702ad4fce0edd49d9be428c6f3d Mon Sep 17 00:00:00 2001 From: lifegpc Date: Mon, 12 Jun 2023 12:49:56 +0800 Subject: [PATCH] Fix web socket cause exit not works --- routes/api/task.ts | 7 +++++++ signal_handler.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/routes/api/task.ts b/routes/api/task.ts index 43b30e5..98dc839 100644 --- a/routes/api/task.ts +++ b/routes/api/task.ts @@ -5,6 +5,7 @@ import { TaskClientSocketData, TaskServerSocketData, } from "../../server/task.ts"; +import { ExitTarget } from "../../signal_handler.ts"; export const handler: Handlers = { GET(req, _ctx) { @@ -15,12 +16,17 @@ export const handler: Handlers = { ) => { socket.send(JSON.stringify({ type: e.type, detail: e.detail })); }; + const close_handle = () => { + sendMessage({ type: "close" }); + socket.close(); + }; const removeListener = () => { t.removeEventListener("new_task", handle); t.removeEventListener("task_started", handle); t.removeEventListener("task_finished", handle); t.removeEventListener("task_progress", handle); t.removeEventListener("task_error", handle); + ExitTarget.removeEventListener("close", close_handle); }; function sendMessage(mes: TaskServerSocketData) { socket.send(JSON.stringify(mes)); @@ -64,6 +70,7 @@ export const handler: Handlers = { t.addEventListener("task_finished", handle); t.addEventListener("task_progress", handle); t.addEventListener("task_error", handle); + ExitTarget.addEventListener("close", close_handle); }; return response; }, diff --git a/signal_handler.ts b/signal_handler.ts index 977ce43..a6b2545 100644 --- a/signal_handler.ts +++ b/signal_handler.ts @@ -1,5 +1,7 @@ import { TaskManager } from "./task_manager.ts"; +export const ExitTarget = new EventTarget(); + export function add_exit_handler(m: TaskManager) { let first_aborted = true; let ignore_signal = false; @@ -17,6 +19,7 @@ export function add_exit_handler(m: TaskManager) { return; } await m.waiting_unfinished_task(); + ExitTarget.dispatchEvent(new Event("close")); m.close(); }; Deno.addSignalListener("SIGINT", handler); @@ -24,6 +27,7 @@ export function add_exit_handler(m: TaskManager) { Deno.addSignalListener("SIGKILL", () => { m.abort(); m.force_abort(); + ExitTarget.dispatchEvent(new Event("close")); m.close(); }); }