mirror of
https://github.com/lifegpc/eh-downloader.git
synced 2026-07-08 01:31:00 +08:00
Fix web socket cause exit not works
This commit is contained in:
@@ -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;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user