kannon/classes/ApiServer.js

43 lines
1.4 KiB
JavaScript
Raw Normal View History

2022-04-22 15:58:04 +02:00
const Api = require('./Api.js');
const http = require('http');
class ApiServer {
constructor() {
this.listen = config.api?.listen || "0.0.0.0";
this.port = config.api?.port || 9000;
this.api = new Api();
this.server = http.createServer();
this.requestId = 0;
}
start() {
return new Promise((resolve, reject) => {
this.server.listen(this.port, this.listen).on('listening', () => {
this.port = this.server.address().port;
logger.info('api server listening on ' + this.listen + ':' + this.port + '...');
this.#handleRequests();
resolve();
});
this.server.on('error', (err) => {
reject('an unexpected error occured: ' + err);
});
});
}
#handleRequests() {
this.server.on('request', async (request, response) => {
request.timestamp = Date.now();
request.id = this.requestId;
this.requestId++;
logger.debug('handling api request #' + request.id + ' \'' + request.url + '\'...');
const result = await this.api.handleRequest(request);
response.writeHead(result.code);
response.end(result.message);
logger.debug('handling api request #' + request.id + '\'' + request.url + '\' took ' + (Date.now() - request.timestamp) + 'ms');
});
}
}
module.exports = ApiServer;