aboutsummaryrefslogtreecommitdiff
path: root/src/server/session/utilities/ipc.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/session/utilities/ipc.ts')
-rw-r--r--src/server/session/utilities/ipc.ts66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/server/session/utilities/ipc.ts b/src/server/session/utilities/ipc.ts
deleted file mode 100644
index c90b15907..000000000
--- a/src/server/session/utilities/ipc.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import { isMaster } from "cluster";
-import { Utils } from "../../../Utils";
-
-export function IPC(target: IPCTarget) {
- return new PromisifiedIPCManager(target);
-}
-
-export type IPCTarget = NodeJS.EventEmitter & { send?: Function };
-export type Router = (message: Message) => void | Promise<void>;
-
-export const suffix = isMaster ? Utils.GenerateGuid() : process.env.ipc_suffix;
-
-type InternalMessage<T = any> = Message<T> & { metadata: any };
-
-export interface Message<T = any> {
- name: string;
- args: T;
-}
-
-export type MessageHandler<T = any> = (message: T) => any | Promise<any>;
-
-export class PromisifiedIPCManager {
- private readonly target: IPCTarget;
- private readonly ipc_id = `ipc_id_${suffix}`;
- private readonly is_response = `is_response_${suffix}`;
-
- constructor(target: IPCTarget) {
- this.target = target;
- }
-
- public emit = async (name: string, args?: any) => this.target.send?.({ name, args });
-
- public emitPromise = async (name: string, args?: any) => {
- return new Promise(resolve => {
- const messageId = Utils.GenerateGuid();
- const metadata: any = {};
- metadata[this.ipc_id] = messageId;
- const responseHandler: MessageHandler<any> = ({ metadata, args }) => {
- if (metadata[this.is_response] && metadata[this.ipc_id] === messageId) {
- this.target.removeListener("message", responseHandler);
- resolve(args?.error as Error | undefined);
- }
- };
- this.target.addListener("message", responseHandler);
- this.target.send?.({ name, args, metadata });
- });
- }
-
- public setRouter = (router: Router) => {
- this.target.addListener("message", async ({ name, args, metadata }: InternalMessage) => {
- if (name && (!metadata || !metadata[this.is_response])) {
- let error: Error | undefined;
- try {
- await router({ name, args });
- } catch (e) {
- error = e;
- }
- if (metadata && this.target.send) {
- metadata[this.is_response] = true;
- this.target.send({ name, args: { error }, metadata });
- }
- }
- });
- }
-
-} \ No newline at end of file