Fix web socket cause exit not works

This commit is contained in:
2023-06-12 12:49:56 +08:00
parent 23eb6ca71c
commit ea696f0d36
2 changed files with 11 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ import {
TaskClientSocketData, TaskClientSocketData,
TaskServerSocketData, TaskServerSocketData,
} from "../../server/task.ts"; } from "../../server/task.ts";
import { ExitTarget } from "../../signal_handler.ts";
export const handler: Handlers<Task[]> = { export const handler: Handlers<Task[]> = {
GET(req, _ctx) { GET(req, _ctx) {
@@ -15,12 +16,17 @@ export const handler: Handlers<Task[]> = {
) => { ) => {
socket.send(JSON.stringify({ type: e.type, detail: e.detail })); socket.send(JSON.stringify({ type: e.type, detail: e.detail }));
}; };
const close_handle = () => {
sendMessage({ type: "close" });
socket.close();
};
const removeListener = () => { const removeListener = () => {
t.removeEventListener("new_task", handle); t.removeEventListener("new_task", handle);
t.removeEventListener("task_started", handle); t.removeEventListener("task_started", handle);
t.removeEventListener("task_finished", handle); t.removeEventListener("task_finished", handle);
t.removeEventListener("task_progress", handle); t.removeEventListener("task_progress", handle);
t.removeEventListener("task_error", handle); t.removeEventListener("task_error", handle);
ExitTarget.removeEventListener("close", close_handle);
}; };
function sendMessage(mes: TaskServerSocketData) { function sendMessage(mes: TaskServerSocketData) {
socket.send(JSON.stringify(mes)); socket.send(JSON.stringify(mes));
@@ -64,6 +70,7 @@ export const handler: Handlers<Task[]> = {
t.addEventListener("task_finished", handle); t.addEventListener("task_finished", handle);
t.addEventListener("task_progress", handle); t.addEventListener("task_progress", handle);
t.addEventListener("task_error", handle); t.addEventListener("task_error", handle);
ExitTarget.addEventListener("close", close_handle);
}; };
return response; return response;
}, },

View File

@@ -1,5 +1,7 @@
import { TaskManager } from "./task_manager.ts"; import { TaskManager } from "./task_manager.ts";
export const ExitTarget = new EventTarget();
export function add_exit_handler(m: TaskManager) { export function add_exit_handler(m: TaskManager) {
let first_aborted = true; let first_aborted = true;
let ignore_signal = false; let ignore_signal = false;
@@ -17,6 +19,7 @@ export function add_exit_handler(m: TaskManager) {
return; return;
} }
await m.waiting_unfinished_task(); await m.waiting_unfinished_task();
ExitTarget.dispatchEvent(new Event("close"));
m.close(); m.close();
}; };
Deno.addSignalListener("SIGINT", handler); Deno.addSignalListener("SIGINT", handler);
@@ -24,6 +27,7 @@ export function add_exit_handler(m: TaskManager) {
Deno.addSignalListener("SIGKILL", () => { Deno.addSignalListener("SIGKILL", () => {
m.abort(); m.abort();
m.force_abort(); m.force_abort();
ExitTarget.dispatchEvent(new Event("close"));
m.close(); m.close();
}); });
} }