UNPKG

1.27 kBJavaScriptView Raw
1import Whisper from "@36node/whisper";
2
3import Request from "./request";
4import Response from "./response";
5import Protocol from "./protocol";
6import logger from "./lib/log";
7
8const app = new Whisper();
9const protocol = new Protocol();
10
11const log = async (ctx, next) => {
12 // step 1: log start
13 const startedAt = Date.now();
14
15 await next();
16
17 // step 4: log end
18 const endAt = Date.now();
19 logger.info(ctx.data);
20 logger.info("request: ");
21 logger.info(ctx.req);
22 logger.info("response: ");
23 logger.info(ctx.res);
24 logger.info(
25 `session ${ctx.session.id}: seq ${ctx.no} success ${endAt - startedAt} ms`
26 );
27};
28
29const handleFrame = async (ctx, next) => {
30 // step 2: handle data
31 const json = protocol.parse(ctx.data);
32 ctx.req = new Request(json);
33
34 await next();
35
36 // step 3: send data
37 ctx.res = new Response(json.body);
38 ctx.send(protocol.build(ctx.res));
39};
40
41app.use(log);
42app.use(handleFrame);
43
44app.on("close", session => {
45 logger.info(`session ${session.id}: closed`);
46});
47
48app.on("timeout", session => {
49 logger.info(`session ${session.id}: timeout`);
50});
51
52app.on("end", session => {
53 logger.info(`session ${session.id}: end`);
54});
55
56app.on("error", session => {
57 logger.info(`session ${session.id}: error`);
58});
59
60export default app;