blinky/libs/server.js

137 lines
No EOL
4.5 KiB
JavaScript

const path = require('path');
const config = require('../config');
const packageJSON = require('../package.json');
const logger = require('./logger');
const blinkstick = require('./blinkstick');
const parser = require('./parser.js');
const express = require('express');
const favicon = require('serve-favicon');
const bodyparser = require('body-parser');
const app = express();
app.use(favicon(path.join(path.dirname(__dirname), 'public', 'favicon.ico')));
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({extended: true}));
const MODE_SET = require('./blinkstick.js').MODE_SET;
const MODE_MORPH = require('./blinkstick.js').MODE_MORPH;
const MODE_BLINK = require('./blinkstick.js').MODE_BLINK;
const MODE_PULSE = require('./blinkstick.js').MODE_PULSE;
const MODE_POWEROFF = require('./blinkstick.js').MODE_POWEROFF;
const html = require('./index.js').get();
// run the express http server and handle gets/posts
function start() {
return new Promise(function (resolve, reject) {
app.listen(config.server.port, config.server.listen)
.on('listening', function () {
return resolve('server listening on ' + config.server.listen + ':' + config.server.port + '...')
})
.on('error', function (err) {
return reject('error starting server (' + err + ')');
});
});
}
async function handleRequests() {
// GET html page
app.get('*', (request, response) => {
logger.http(request);
response.send(html);
response.end();
});
// POST '/set'
app.post('/' + MODE_SET, (request, response) => {
logger.http(request);
blinkstick.simple(parser.parseRequest(request.body, MODE_SET))
.then((result) => {
response.end(JSON.stringify(result));
})
.catch((err) => {
response.status(500);
response.end({status: 'error', error: err});
});
});
// POST '/morph'
app.post('/' + MODE_MORPH, (request, response) => {
logger.http(request);
blinkstick.simple(parser.parseRequest(request.body, MODE_MORPH))
.then((result) => {
response.end(JSON.stringify(result));
})
.catch((err) => {
response.status(500);
response.end({status: 'error', error: err});
});
});
// POST '/blink'
app.post('/' + MODE_BLINK, (request, response) => {
logger.http(request);
const config = parser.parseRequest(request.body, MODE_BLINK);
if (blinkstick.isInfiniteAnimation(config)) {
response.end(JSON.stringify({status: 'ok'}));
response = undefined;
}
blinkstick.complex(config)
.then((result) => {
if (response === undefined) {
return;
}
response.end(JSON.stringify(result));
})
.catch((err) => {
if (response === undefined) {
return;
}
response.status(500);
response.end({status: 'error', error: err});
});
});
// POST '/pulse'
app.post('/' + MODE_PULSE, (request, response) => {
logger.http(request);
const config = parser.parseRequest(request.body, MODE_PULSE);
if (blinkstick.isInfiniteAnimation(config)) {
response.end(JSON.stringify({status: 'ok'}));
response = undefined;
}
blinkstick.complex(config)
.then((result) => {
if (response === undefined) {
return;
}
response.end(JSON.stringify(result));
})
.catch((err) => {
if (response === undefined) {
return;
}
response.status(500);
response.end({status: 'error', error: err});
});
});
// POST '/poweroff'
app.post('/' + MODE_POWEROFF, (request, response) => {
logger.http(request);
blinkstick.powerOff(parser.parseRequest(request.body, MODE_POWEROFF))
.then((result) => {
response.end(JSON.stringify(result));
})
.catch((err) => {
response.status(500);
response.end({status: 'error', error: err});
});
});
}
function checkForInfiniteAnimation(response, config) {
}
// exports
module.exports = {
start,
handleRequests
};