1 |
import { ArchiveMessagePayload } from "src/types/ArchiveMessagePayload"; |
2 |
import { MessageType } from "../types/MessageType"; |
3 |
import ArchiveService from "./ArchiveService"; |
4 |
|
5 |
if (!process.send) { |
6 |
throw new Error("This script must be run as a child process"); |
7 |
} |
8 |
|
9 |
process.send?.({ |
10 |
type: MessageType.Ping |
11 |
}); |
12 |
|
13 |
async function main() { |
14 |
const service = await ArchiveService.create(); |
15 |
|
16 |
process.on("message", async serializable => { |
17 |
if ( |
18 |
!serializable || |
19 |
typeof serializable !== "object" || |
20 |
!("type" in serializable) || |
21 |
typeof serializable.type !== "string" |
22 |
) { |
23 |
return; |
24 |
} |
25 |
|
26 |
const message = serializable as Record<string, unknown>; |
27 |
|
28 |
switch (message.type) { |
29 |
case MessageType.Archive: |
30 |
await service.archive(message as ArchiveMessagePayload); |
31 |
break; |
32 |
case MessageType.Ping: |
33 |
process.send?.({ |
34 |
type: MessageType.Acknowledgement |
35 |
}); |
36 |
break; |
37 |
} |
38 |
}); |
39 |
|
40 |
service.startServer(); |
41 |
process.on("beforeExit", () => service.close()); |
42 |
} |
43 |
|
44 |
main().catch(console.error); |