diff --git a/routes/api/task.ts b/routes/api/task.ts index 22a6b3e..95b5b7c 100644 --- a/routes/api/task.ts +++ b/routes/api/task.ts @@ -45,11 +45,16 @@ export const handler: Handlers = { socket.send(JSON.stringify(mes)); } } + const interval = setInterval(() => { + sendMessage({ type: "ping" }); + }, 30000); socket.onclose = () => { removeListener(); + clearInterval(interval); }; socket.onerror = () => { removeListener(); + clearInterval(interval); console.error("WebSocket error."); }; socket.onmessage = (e) => { @@ -70,6 +75,8 @@ export const handler: Handlers = { running: t.get_running_task(), }); }); + } else if (d.type == "ping") { + sendMessage({ type: "pong" }); } } catch (_) { null; @@ -144,7 +151,7 @@ export const handler: Handlers = { } } try { - const task = t.add_export_zip_task(gid, dcfg); + const task = await t.add_export_zip_task(gid, dcfg); return return_data(task, 201); } catch (e) { return return_error(500, e.message); diff --git a/server/task.ts b/server/task.ts index 3ce323d..52262e3 100644 --- a/server/task.ts +++ b/server/task.ts @@ -4,17 +4,27 @@ import type { DownloadConfig } from "../tasks/download.ts"; import type { ExportZipConfig } from "../tasks/export_zip.ts"; import type { DiscriminatedUnion } from "../utils.ts"; -export type TaskServerSocketData = TaskEventData | { type: "close" } | { - type: "tasks"; - tasks: Task[]; - running: number[]; -}; +export type TaskServerSocketData = + | TaskEventData + | { type: "close" } + | { + type: "tasks"; + tasks: Task[]; + running: number[]; + } + | { type: "ping" } + | { type: "pong" }; type EventMap = { new_download_task: { gid: number; token: string; cfg?: DownloadConfig }; new_export_zip_task: { gid: number; cfg?: ExportZipConfig }; }; -export type TaskClientSocketData = DiscriminatedUnion<"type", EventMap> | { - type: "close"; -} | { type: "task_list" }; +export type TaskClientSocketData = + | DiscriminatedUnion<"type", EventMap> + | { + type: "close"; + } + | { type: "task_list" } + | { type: "ping" } + | { type: "pong" };