Node.js C9 backup verisaemockedreceive

Was private

server.js

var http = require("http");
var url = require("url");

var serverStartedDateTimeFormatted = formatDate(new Date());

var requestCount = -1;
var requestStack = {};
var responseToSend = "";

/*
Use of seq numbers:
The client sends in a request with a seq no (starts at 0 on a a client restart)

client.request is added into clientStack if doesn't exist, replaces existing if it does
clientStack.client.request.responseSent is set to false

Client request response is setup by a setTimeout call to call response function after x seconds

If an interrupt comes in for a client:
- call the response function immediately

The response function:
- checks clientStack.client.responseSent is set to false and if so:
 - sends the response
- nulls clientStack.client.request & response (will this save ram?)


*/

function start() {
 writeLogWithTimeStamp("Starting");

 function onRequest(request, response) {
 request.url_parts = url.parse(request.url, true);
 request.content = "";
 
 writeLogWithTimeStamp(request.url_parts.pathname);

 if ( request.url_parts.pathname == '/alarm' 
 && "login" in request.url_parts.query
 && "password" in request.url_parts.query
 && "xml" in request.url_parts.query
 ) {
 
 requestCount++;

 requestStack[requestCount] = {};
 requestStack[requestCount].login = request.url_parts.query.login;
 requestStack[requestCount].password = request.url_parts.query.password;
 requestStack[requestCount].xml = request.url_parts.query.xml;
 
 responseToSend = 'hello';
 
 response.writeHead(200, {
 "Content-Type": "text/plain"
 });
 response.write(responseToSend);
 response.end();
 //request.connection.end(); // force a disconnect?
 
 } else {
 
 responseToSend = 'Whaaaat!';
 
 response.writeHead(404, {
 "Content-Type": "text/plain"
 });
 response.write(responseToSend);
 response.end();
 //request.connection.end(); // force a disconnect?
 
 }

 }

 var server = http.createServer(onRequest).listen(process.env.PORT, process.env.IP);
 writeLogServerUpSince();
 setInterval(function () {
 writeLogServerUpSince();
 }, 60000);
 console.log(server.PORT);
}


function writeLogWithTimeStamp(message) {
 console.log(formatDate(new Date()) + " " + message);
}

function writeLog(message) {
 console.log(message);
}

function writeLogServerUpSince() {
 writeLogWithTimeStamp("Server up since " + serverStartedDateTimeFormatted);
}

function pad(number, length) {
 var str = '' + number;
 while (str.length < length) {
 str = '0' + str;
 }
 return str;
}

function formatDate(date) {
 var dateStamp = '';
 dateStamp += date.getFullYear();
 dateStamp += '-';
 dateStamp += date.getMonth() + 1;
 dateStamp += '-';
 dateStamp += date.getDate();
 dateStamp += '_';
 dateStamp += pad(date.getHours(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getMinutes(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getSeconds(), 2);
 dateStamp += ':';
 dateStamp += pad(date.getMilliseconds(), 3);

 return dateStamp;
}

function is_int(value) {
 if ((parseFloat(value) == parseInt(value)) && !isNaN(value)) {
 return true;
 } else {
 return false;
 }
}


process.on('uncaughtException', function (err) {
 console.log((new Date()).toUTCString() + ' uncaughtException:', err.message);
 console.error(err.stack);
 //process.exit(1);
});

exports.start = start;

start();