@sha1n/fungus
Version:
A dependency based service graph controller library
55 lines (46 loc) • 1.5 kB
text/typescript
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 }));
});
});
}