Path: blob/main/replay/backend/api/ScriptRegistrationServer.ts
1030 views
import * as Http from 'http';1import * as Fs from 'fs';2import { IncomingMessage, ServerResponse } from 'http';3import { AddressInfo } from 'net';4import IReplayMeta from '~shared/interfaces/IReplayMeta';5import ReplayApi from '~backend/api/index';6import { getInstallDirectory } from '~install/Utils';78const apiPath = `${getInstallDirectory()}/api.txt`;910export default class ScriptRegistrationServer {11private server: Http.Server;12private readonly registerReplayMeta: (replayMeta: IReplayMeta) => any;1314constructor(registerReplayMeta: (replayMeta: IReplayMeta) => any) {15this.registerReplayMeta = registerReplayMeta;16this.server = new Http.Server(this.handleRequest.bind(this));17this.server.listen(0, () => {18const port = (this.server.address() as AddressInfo).port;19console.log('ScriptRegistrationServer.started', port);20Fs.writeFileSync(apiPath, Buffer.from(`http://localhost:${port}`));21});22}2324public close() {25Fs.writeFileSync(apiPath, '');26this.server.close();27}2829private async handleRequest(request: IncomingMessage, response: ServerResponse) {30let data = '';31for await (const chunk of request) {32data += chunk.toString();33}3435const meta: IReplayMeta & { apiStartPath: string; nodePath: string } = JSON.parse(data);36console.log('ScriptInstance Registered', meta);3738ReplayApi.serverStartPath = meta.apiStartPath;39ReplayApi.nodePath = meta.nodePath;40this.registerReplayMeta(meta);41response.writeHead(200);42response.end();43}44}454647