UNPKG

@sha1n/fungus

Version:

A dependency based service graph controller library

55 lines (46 loc) 1.5 kB
import { sleep } from '@sha1n/about-time'; import http from 'http'; import { AddressInfo } from 'net'; import { createLogger } from '../../lib/logger'; const logger = createLogger('echo-serv'); function realisticPauseTime(): number { if (process.env['DEMO']) { const min = 1000; const max = 3000; return Math.floor(Math.random() * (max - min + 1) + min); } return 0; } type ServerHandle = { scheme: string; address: string; port: number; stop: () => Promise<void>; }; export default function start(): Promise<ServerHandle> { logger.info('starting HTTP server...'); return new Promise<ServerHandle>(resolve => { const server = http .createServer(function (request, response) { response.writeHead(200); request.on('data', function (message) { response.write(message); }); request.on('end', function () { response.end(); }); }) .listen(0, 'localhost', () => { const { address, port } = server.address() as AddressInfo; logger.info('HTTP server listening on localhost:%s', port); const stop = () => new Promise<void>(resolve => { server.close(); // good enough for the demo sleep(realisticPauseTime()) // making it feel more real .then(resolve); }); sleep(realisticPauseTime()) // making it feel more real .then(() => resolve({ scheme: 'http', address, port, stop })); }); }); }