From 8d15219757019a84d5a88053a3e6745d3ffa165c Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 8 Jul 2021 12:09:04 +0800 Subject: [PATCH] core: server: wrap bail method --- packages/hydrooj/src/service/bus.ts | 2 +- packages/hydrooj/src/service/server.ts | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index e113a9635..ad28b4dd1 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -173,7 +173,7 @@ export async function serial(name: K, ...args: Paramet } } -export async function bail(name: K, ...args: Parameters): ReturnType { +export async function bail(name: K, ...args: Parameters): Promise> { if (argv.options.showBus && name !== 'message/log') logger.debug('bail: %s %o', name, args); const hooks = Array.from(_hooks[name] || []); for (const callback of hooks) { diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 34b5369da..6c2738c5c 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -638,6 +638,11 @@ export class Handler extends HandlerCommon { } } +async function bail(name: string, ...args: any[]) { + const r = await bus.bail(name, ...args); + if (r instanceof Error) throw r; +} + async function handle(ctx, HandlerClass, checker) { global.Hydro.stat.reqCount++; const args = { @@ -670,21 +675,21 @@ async function handle(ctx, HandlerClass, checker) { throw new MethodNotAllowedError(method); } - await bus.bail('handler/init', h); - await bus.bail(`handler/before-prepare/${HandlerClass.name.replace(/Handler$/, '')}`, h); - await bus.bail('handler/before-prepare', h); + await bail('handler/init', h); + await bail(`handler/before-prepare/${HandlerClass.name.replace(/Handler$/, '')}`, h); + await bail('handler/before-prepare', h); if (h._prepare) await h._prepare(args); if (h.prepare) await h.prepare(args); - await bus.bail(`handler/before/${HandlerClass.name.replace(/Handler$/, '')}`, h); - await bus.bail('handler/before', h); + await bail(`handler/before/${HandlerClass.name.replace(/Handler$/, '')}`, h); + await bail('handler/before', h); if (h[method]) await h[method](args); if (operation) await h[`post${operation}`](args); - await bus.bail(`handler/after/${HandlerClass.name.replace(/Handler$/, '')}`, h); - await bus.bail('handler/after', h); + await bail(`handler/after/${HandlerClass.name.replace(/Handler$/, '')}`, h); + await bail('handler/after', h); if (h.cleanup) await h.cleanup(args); if (h.finish) await h.finish(args); - await bus.bail(`handler/finish/${HandlerClass.name.replace(/Handler$/, '')}`, h); - await bus.bail('handler/finish', h); + await bail(`handler/finish/${HandlerClass.name.replace(/Handler$/, '')}`, h); + await bail('handler/finish', h); } catch (e) { try { await h.onerror(e);