SilvrAPI/server/routes/temp.js

205 lines
5.5 KiB
JavaScript
Raw Normal View History

2016-02-17 13:52:48 +00:00
var express = require('express'), fs = require('fs'), sqlite3 = require('sqlite3').verbose(), http = require('http');
var EventEmitter = require('events');
var log4js = require('log4js');
var logger = log4js.getLogger();
2015-11-09 00:47:50 +00:00
var router = express.Router();
var EventEmitter = require('events');
var busEmitter = new EventEmitter();
2016-02-17 13:52:48 +00:00
var WebSocketServer = require('websocket').server;
2015-11-09 00:47:50 +00:00
var temp_db;
2015-11-09 13:52:03 +00:00
var file = process.env.DB_HOME + '/' + "temp.db";
2015-11-09 11:11:14 +00:00
var exists;
2015-11-09 00:47:50 +00:00
/* GET users listing. */
function createDB() {
logger.debug('Creating Temp db...');
logger.debug(file);
if (!fs.existsSync(file)) {
logger.debug('creating db file');
fs.openSync(file, 'w');
2015-11-09 11:11:14 +00:00
temp_db = new sqlite3.Database(file, createTable);
2015-11-09 13:52:03 +00:00
temp_db.close();
}
else {
logger.info('Database already created.');
connectDB();
}
2015-11-09 13:52:03 +00:00
2015-11-09 11:11:14 +00:00
}
2015-11-09 11:11:14 +00:00
function startEventHandler() {
"use strict";
2015-11-09 13:52:03 +00:00
2015-11-09 11:31:24 +00:00
}
function connectDB() {
"use strict";
logger.debug('Connect db.');
temp_db = new sqlite3.Database(file);
2016-02-17 10:10:09 +00:00
//logger.debug(temp_db);
return temp_db;
2015-11-09 00:47:50 +00:00
}
function createTable() {
logger.debug('Creating temp table...');
temp_db.run('CREATE TABLE IF NOT EXISTS temp (date text, reading real);');
2015-11-09 00:47:50 +00:00
}
2015-11-09 08:10:52 +00:00
function closeDB() {
"use strict";
2016-02-17 10:10:09 +00:00
logger.debug('Closing db.');
temp_db.close();
2015-11-09 08:10:52 +00:00
}
2015-11-09 00:47:50 +00:00
function insertTempReading(time, reading) {
logger.debug('Inserting reading:' + reading);
temp_db.run('BEGIN TRANSACTION');
temp_db.run('INSERT into temp(date, reading) VALUES (?,?);', [time, reading]);
temp_db.run('commit');
2015-11-17 10:52:30 +00:00
2016-02-17 11:16:58 +00:00
busEmitter.emit("sendSocket", reading);
2016-02-17 11:04:45 +00:00
}
2015-11-09 00:47:50 +00:00
2016-02-17 10:10:09 +00:00
router.get('/', function (req, res, next) {
res.render('temp');
2015-11-09 00:47:50 +00:00
});
2015-11-17 10:37:52 +00:00
router.post('/', function (req, res, next) {
"use strict";
2015-11-19 10:19:00 +00:00
var t = req.body;
var now = new Date();
2016-02-12 16:03:43 +00:00
var dataJSON;
if (t.hasOwnProperty('data')) {
var data = JSON.parse(t.data.toString());
if (data.hasOwnProperty('temp')) {
busEmitter.emit("saveTempData", {time: now.toJSON(), value: parseFloat(data.temp)});
}
else {
logger.error('No temp data!');
}
}
else {
logger.error('No data block!');
}
2015-11-17 10:56:32 +00:00
res.writeHead(200, {"ContentType": "text/html"});
2016-01-18 00:15:21 +00:00
res.end('ok');
2015-11-17 10:52:30 +00:00
});
2015-11-17 10:37:52 +00:00
router.get('/all', function (req, res, next) {
"use strict";
2016-02-17 10:10:09 +00:00
logger.debug('Selecint all..');
//var db = connectDB();
2015-11-09 08:10:52 +00:00
2016-02-17 10:10:09 +00:00
temp_db.all('SELECT * from temp', function (err, rows) {
2015-11-09 00:47:50 +00:00
var out = [];
2016-02-17 13:52:48 +00:00
// logger.debug(err);
// logger.debug(rows);
2015-11-09 00:47:50 +00:00
rows.forEach(function (row) {
2016-02-17 13:52:48 +00:00
// logger.debug(row.date + ', ' + row.reading);
// var t = ;
// out.push({"date": Date(row.date), "reading":row.reading});
out.push({"date": row.date, "reading": row.reading});
2015-11-09 00:47:50 +00:00
});
res.writeHead(200, {"ContentType": "application/json"});
//res.send(JSON.stringify(t));
res.end(JSON.stringify(out));
2015-11-09 00:47:50 +00:00
//closeDB();
2015-11-09 00:47:50 +00:00
});
});
module.exports = router;
createDB();
2016-02-17 13:52:48 +00:00
var doInsertEvent = (obj) => {
// logger.info('sendSocket: ' + JSON.stringify(obj));
insertTempReading(obj.time, obj.value);
2020-02-12 13:21:47 +00:00
};
2016-02-17 12:10:27 +00:00
2016-02-17 13:52:48 +00:00
busEmitter.on('saveTempData', doInsertEvent);
2016-02-17 12:10:27 +00:00
2016-02-17 11:04:45 +00:00
2016-02-17 12:10:27 +00:00
// Socket Stuff
2016-02-17 11:04:45 +00:00
logger.info('Configuring WebSocket Listener...');
2016-02-17 11:20:09 +00:00
logger.trace('Creating server...');
2016-02-17 11:04:45 +00:00
var server = http.createServer(function (request, response) {
2016-02-17 11:09:57 +00:00
logger.info((new Date()) + ' Received request for ' + request.url);
2016-02-17 11:04:45 +00:00
response.writeHead(404);
response.end();
});
2016-02-17 11:20:09 +00:00
logger.trace('Creating listener...');
2016-02-17 11:04:45 +00:00
server.listen(8031, function () {
2016-02-17 11:09:57 +00:00
logger.info((new Date()) + ' Server is listening on port 8031');
2016-02-17 11:04:45 +00:00
});
2016-02-17 11:20:09 +00:00
logger.trace('Creating wsServer...');
2016-02-17 11:04:45 +00:00
var wsServer = new WebSocketServer({
httpServer: server,
// You should not use autoAcceptConnections for production
// applications, as it defeats all standard cross-origin protection
// facilities built into the protocol and the browser. You should
// *always* verify the connection's origin and decide whether or not
// to accept it.
autoAcceptConnections: false
});
function originIsAllowed(origin) {
// put logic here to detect whether the specified origin is allowed.
return true;
}
wsServer.on('request', function (request) {
2016-02-17 11:20:09 +00:00
logger.trace('CREATING CONNECTION');
2016-02-17 11:04:45 +00:00
if (!originIsAllowed(request.origin)) {
// Make sure we only accept requests from an allowed origin
request.reject();
2016-02-17 11:20:09 +00:00
logger.error((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
2016-02-17 11:04:45 +00:00
return;
}
2016-02-17 13:52:48 +00:00
var connection = request.accept('', request.origin);
2016-02-17 11:09:57 +00:00
logger.debug((new Date()) + ' Connection accepted.');
2016-02-17 11:04:45 +00:00
2016-02-17 13:52:48 +00:00
var sendSocketHandler = (obj) =>
{
2016-02-17 11:10:26 +00:00
logger.info('sendSocket: ' + JSON.stringify(obj));
2016-02-17 11:04:45 +00:00
connection.sendUTF(JSON.stringify(obj));
2020-02-12 13:21:47 +00:00
};
2016-02-17 11:16:58 +00:00
busEmitter.on('sendSocket', sendSocketHandler);
2016-02-17 11:04:45 +00:00
connection.on('message', function (message) {
if (message.type === 'utf8') {
2016-02-17 11:09:57 +00:00
logger.debug('Received Message: ' + message.utf8Data);
2016-02-17 11:04:45 +00:00
connection.sendUTF(message.utf8Data);
}
else if (message.type === 'binary') {
2016-02-17 11:09:57 +00:00
logger.debug('Received Binary Message of ' + message.binaryData.length + ' bytes');
2016-02-17 11:04:45 +00:00
connection.sendBytes(message.binaryData);
}
});
connection.on('close', function (reasonCode, description) {
2016-02-17 11:09:57 +00:00
logger.debug((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
2016-02-17 11:04:45 +00:00
busEmitter.removeListener('sendSocket', sendSocketHandler);
});
2020-02-12 13:21:47 +00:00
});
2016-02-17 13:52:48 +00:00