initial checkin
This commit is contained in:
180
server.js
Normal file
180
server.js
Normal file
@@ -0,0 +1,180 @@
|
||||
// $Revision: 16 $ -- $Date: 2016-02-08 15:14:12 -0600 (Mon, 08 Feb 2016) $
|
||||
|
||||
var http = require('http');
|
||||
var sys = require('sys');
|
||||
var fs = require('fs');
|
||||
var moniFilename = 'abc';
|
||||
var querystring = require('querystring');
|
||||
var q = require('q');
|
||||
|
||||
var deferredAllDone;
|
||||
|
||||
http.createServer(function(req, res) {
|
||||
//debugHeaders(req);
|
||||
|
||||
deferredAllDone = q.defer();
|
||||
deferredAllDone.promise.done(function(pos) {
|
||||
res.end();
|
||||
console.log("Response END. [" + pos + "]");
|
||||
});
|
||||
|
||||
if (req.headers.accept && req.headers.accept === 'text/event-stream') {
|
||||
var arrMatches;
|
||||
arrMatches = req.url.match(new RegExp(/\/events\/(.*)$/));
|
||||
if (arrMatches) {
|
||||
moniFilename = arrMatches[1];
|
||||
console.log("Monitoring:" + moniFilename);
|
||||
sendSSE(req, res);
|
||||
} else {
|
||||
res.writeHead(404);
|
||||
deferredAllDone.resolve("404");
|
||||
}
|
||||
} else {
|
||||
console.log("RCV-HTML");
|
||||
res.writeHead(200, { 'Content-Type': 'text/html', 'Cache-Control': 'no-cache' });
|
||||
arrMatches = req.url.match(new RegExp(/\/(save|raw)\/(.*)$/));
|
||||
console.log("Matches", arrMatches);
|
||||
if ((arrMatches) && (arrMatches.length === 3)) {
|
||||
var func = arrMatches[1];
|
||||
moniFilename = arrMatches[2];
|
||||
if ("save" === func) {
|
||||
console.log("SAVE-Data");
|
||||
//sys.puts(sys.inspect(req));
|
||||
var fullBody = '';
|
||||
|
||||
req.on('data', function(chunk) {
|
||||
// append the current chunk of data to the fullBody variable
|
||||
fullBody += chunk.toString();
|
||||
});
|
||||
|
||||
//req.on('end', (function(res) {
|
||||
req.on('end', function() {
|
||||
var decodedBody = querystring.parse(fullBody);
|
||||
//sys.puts(sys.inspect(decodedBody));
|
||||
|
||||
fs.writeFile(__dirname + "/docs/" + moniFilename, decodedBody.data, function(err) {
|
||||
if (err) {
|
||||
res.write('ERROR : "' + err + '"');
|
||||
deferredAllDone.resolve("OnEndERR");
|
||||
console.log(err);
|
||||
} else {
|
||||
fs.stat(__dirname + "/docs/" + moniFilename, function(err, stats) {
|
||||
if (stats) {
|
||||
console.log('deb' + stats.mtime);
|
||||
res.write(constructJSON("Saved", stats.mtime));
|
||||
}
|
||||
deferredAllDone.resolve("OnEndSaved");
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
//}(res)));
|
||||
} else if ("raw" === func) {
|
||||
console.log("RAW");
|
||||
try {
|
||||
res.write(fs.readFileSync(__dirname + '/docs/' + moniFilename));
|
||||
} catch (e) {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' });
|
||||
console.log("RAW - FAILED");
|
||||
}
|
||||
deferredAllDone.resolve("OnRaw");
|
||||
}
|
||||
} else {
|
||||
var reqFile=req.url.replace("/wc/","");
|
||||
|
||||
console.log("Orig Requested File " + reqFile );
|
||||
if ((reqFile!=='EventSource.js') && (reqFile!=='autosize.min.js') ) {
|
||||
reqFile='display.html'
|
||||
}
|
||||
console.log("Requested File " + reqFile );
|
||||
var contentType="text/html";
|
||||
if (reqFile.match(/\.css/gi)) {
|
||||
contentType="text/css";
|
||||
}
|
||||
if (reqFile.match(/\.js/gi)) {
|
||||
contentType="application/javascript";
|
||||
}
|
||||
|
||||
|
||||
var filePath = __dirname + '/' + reqFile;
|
||||
console.log("Full path " + filePath + " [" + contentType + "]" );
|
||||
|
||||
try {
|
||||
var stat = fs.statSync(filePath);
|
||||
|
||||
var readStream = fs.createReadStream(filePath);
|
||||
res.writeHead(200, {"Content-Type":contentType});
|
||||
|
||||
readStream.pipe(res); // this will do a res.end() by its own.
|
||||
|
||||
} catch (ex) {
|
||||
res.writeHead(404,{"Content-Type":"text/html"});
|
||||
res.write("Not found: " + reqFile );
|
||||
deferredAllDone.resolve("OnDisplay");
|
||||
console.log ("Not found: " + reqFile, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}).listen(8001,'127.0.0.1');
|
||||
|
||||
// Send the server side event - consider that this response never ends, so no res.end() is called whatsowever!
|
||||
function sendSSE(req, res) {
|
||||
var theClient=req.socket.remoteAddress + ":" + req.socket.remotePort;
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'text/event-stream',
|
||||
'Cache-Control': 'no-cache',
|
||||
'Connection': 'keep-alive'
|
||||
});
|
||||
|
||||
var id = (new Date()).toLocaleTimeString();
|
||||
|
||||
fs.stat(__dirname + "/docs/" + moniFilename, function(err, stats) {
|
||||
if (stats) {
|
||||
console.log('deb' + stats.mtime);
|
||||
res.write(constructSSE("Modified", stats.mtime));
|
||||
}
|
||||
});
|
||||
|
||||
// Watching directory for changes
|
||||
fs.watch(__dirname + '/docs/', function(event, filename) {
|
||||
console.log('event is: ' + event);
|
||||
if (filename) {
|
||||
console.log('filename provided: ' + filename);
|
||||
console.log("Monitoring:" + moniFilename);
|
||||
|
||||
if (moniFilename === filename) {
|
||||
fs.stat(__dirname + "/docs/" + filename, function(err, stats) {
|
||||
console.log('deb 2 ' +theClient + " - " + stats.mtime);
|
||||
res.write(constructSSE("Modified", stats.mtime));
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('filename not provided');
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// the SSE requires a "data" element
|
||||
function constructSSE(type, timeStamp) {
|
||||
var retVal = "data: " + constructJSON(type, timeStamp) + "\n\n";
|
||||
console.log('MESSAGE-DEBUG-L: ' + type + " _ " + timeStamp);
|
||||
return (retVal);
|
||||
}
|
||||
|
||||
// just the JSON of the data
|
||||
function constructJSON(type, timeStamp) {
|
||||
var retVal = '{"type": "' + type + '",';
|
||||
retVal += ('"timeStamp": "' + timeStamp + '"}');
|
||||
return (retVal);
|
||||
}
|
||||
|
||||
function debugHeaders(req) {
|
||||
sys.puts('URL: ' + req.url);
|
||||
for (var key in req.headers) {
|
||||
sys.puts(key + ': ' + req.headers[key]);
|
||||
}
|
||||
sys.puts('\n\n');
|
||||
}
|
||||
Reference in New Issue
Block a user