mate-counter/server.js
Thomas Wade 08f83d9adf Implement cooldown on frontend
Also make cooldown time dependent on mates.json
2018-10-06 21:08:57 +09:30

73 lines
1.8 KiB
JavaScript

var bodyParser = require('body-parser'); // Data conversion, JSON parsing
var express = require('express');
var https = require('https');
var http = require('http');
var path = require('path');
var fs = require('fs');
// Set up Express //////////////////////////////////////////////////////////////
var app = express();
app.use(express.static("./")); // Set root as current dir
app.use(express.json()); // Use JSON handler when parsing requests
// Set up server and start listening ///////////////////////////////////////////
http.createServer(app).listen(8000);
// https.createServer(options, app).listen(443);
// Add routes //////////////////////////////////////////////////////////////////
// Get root
app.get('/', function(rq, rs)
{
rs.sendFile('./index.html')
});
// Get mates count
app.get('/mates', function(rq, rs)
{
var data = fs.readFileSync('./mates.json');
var json = JSON.parse(data);
rs.send(json);
});
// Update mates count
app.post('/mates', function(rq, rs)
{
var data = fs.readFileSync('./mates.json');
var json = JSON.parse(data);
var cooldownSecs = json.cooldown;
var currentTime = new Date().getTime();
var timeSinceLast = (currentTime - json.lastUpdate) / 1000;
// Check if update was sent too quickly
if (timeSinceLast < cooldownSecs)
{
rs
.status(403)
.json({
error:"Update sent too quickly",
cooldown: cooldownSecs,
remaining: Math.ceil(cooldownSecs - timeSinceLast)
});
return;
}
json.mates += 1;
json.lastUpdate = new Date().getTime();
fs.writeFile('./mates.json', JSON.stringify(json), (err) => {
if (err)
{
rs.sendStatus(500);
throw err;
}
});
rs.send(json);
});