43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
|
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;
|