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,
TaskServerSocketData,
} from "../../server/task.ts";
import { ExitTarget } from "../../signal_handler.ts";
export const handler: Handlers<Task[]> = {
GET(req, _ctx) {
@@ -15,12 +16,17 @@ export const handler: Handlers<Task[]> = {
) => {
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<Task[]> = {
t.addEventListener("task_finished", handle);
t.addEventListener("task_progress", handle);
t.addEventListener("task_error", handle);
ExitTarget.addEventListener("close", close_handle);
};
return response;
},

View File

@@ -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();
});
}