kannon/classes/Api.js

81 lines
2.5 KiB
JavaScript
Raw Normal View History

2022-04-22 15:58:04 +02:00
const AudioServer = require("./AudioServer");
class Api {
constructor() {
this.get = new Map();
this.post = new Map();
this.#setup();
}
async handleRequest(request) {
if (request === undefined) {
return this.#createRequestResult(500);
}
const fn = this.#getFunction(request.url, request.method.toLowerCase());
if (fn === undefined) {
return this.#createRequestResult(501);
}
await fn();
return this.#createRequestResult();
}
#createRequestResult(code, message) {
if (code === undefined) {
code = 200;
}
const result = {
code: code
};
if (message !== undefined) {
result.message = message;
}
return result;
}
#setup() {
2022-04-29 16:50:56 +02:00
this.#registerEndpoint(constants.API_PLAY, constants.REQUEST_METHOD_POST, async () => {
if (global.audioserver !== undefined) {
await global.audioserver.destroy();
}
global.audioserver = new AudioServer('/home/velvettear/mounts/kingston/public/YOU_SUFFER.mp3');
2022-04-29 16:50:56 +02:00
});
this.#registerEndpoint(constants.API_RESUME, constants.REQUEST_METHOD_POST, async () => {
2022-04-29 16:50:56 +02:00
if (global.audioserver === undefined) {
return;
}
await global.audioserver.destroy();
global.audioserver = new AudioServer('/home/velvettear/mounts/kingston/public/YOU_SUFFER.mp3', global.audioserver.progress);
2022-04-29 16:50:56 +02:00
});
this.#registerEndpoint(constants.API_PAUSE, constants.REQUEST_METHOD_POST, async () => {
2022-04-29 16:50:56 +02:00
if (global.audioserver === undefined) {
return;
}
global.audioserver.pausePlayback();
2022-04-29 16:50:56 +02:00
});
this.#registerEndpoint(constants.API_STOP, constants.REQUEST_METHOD_POST, async () => {
if (global.audioserver === undefined) {
return;
}
global.audioserver.stopPlayback();
2022-04-22 15:58:04 +02:00
});
}
#getFunction(url, method) {
if (url === undefined || method === undefined || this[method] === undefined) {
return;
}
return this[method].get(url);
}
#registerEndpoint(url, method, fn) {
if (url === undefined || method === undefined || fn === undefined || this[method] === undefined) {
return false;
}
this[method].set(url, fn);
return true;
}
}
module.exports = Api;