UNPKG

transgate

Version:

Agent-based task flow framework

86 lines (85 loc) 2.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const http_1 = __importDefault(require("http")); const buffer_1 = require("./buffer"); /** * HTTP server Gate for Input */ class HttpServerGate { /** * @param {number} options.port - listen port * @param {string} options.host - bind host */ constructor(options = {}) { const { port = 18000, host } = options; this._buffer = new buffer_1.ItemBuffer(); this._server = http_1.default.createServer((req, res) => { if (req.method === 'POST' || req.method == 'PUT') { let body = ''; req.on('data', data => { body += data; }).on('end', () => { if (body.length === 0) { this._buffer.write(null); res.writeHead(204); res.end(); return; } try { const item = JSON.parse(body); this._buffer.write(item); res.writeHead(204); res.end(); } catch (e) { console.error(e); res.writeHead(422, { 'Content-Length': 0 }); res.end(); } }); } else { res.writeHead(405, { 'Content-Length': 0 }); res.end(); } }); this._server.listen(port, host); } /** * @return {http.Server} - HTTP server instance */ get server() { return this._server; } /** * @return {Promise<object>} - A promise that resolves the item when recevied */ async receive() { const entry = await this._buffer.read(); if (entry === null) { await this.close(); return null; } return entry; } /** * Close HTTP server * @return {Promise} - A promise that resolves server closed */ close() { const svr = this._server; if (svr) { this._server = null; return new Promise((resolve) => { svr.close(resolve); }); } else { return Promise.resolve(); } } } exports.HttpServerGate = HttpServerGate;