noname/game/http.js

112 lines
2.6 KiB
JavaScript

var http = require("http");
var fs = require("fs");
var server = new http.Server();
server.listen(80);
server.on("request", function (request, response) {
var url = require("url").parse(request.url);
switch (url.pathname) {
case "" || "/":
fs.readFile("./index.html", function (err, content) {
if (err) {
response.writeHead(404, {
"Content-Type": 'text/plain; charset="UTF-8"',
});
response.write(err.message);
response.end();
} else {
response.writeHead(200, {
"Content-Type": "text/html; charset=UTF-8",
});
response.write(content);
response.end();
}
});
break;
case "/test/delay":
var delay = parseInt(url.query) || 2000;
response.writeHead(200, {
"Content-type": "text/plain; charset=UTF-8",
});
response.write("Sleeping for" + delay + " milliseconds...");
setTimeout(function () {
response.write("done.");
response.end();
}, delay);
break;
case "/test/mirror":
response.writeHead(200, {
"Content-type": "text/plain; charset=UTF-8",
});
response.write(
request.mothod +
" " +
request.url +
" HTTP/" +
request.httpVersion +
"\r\n"
);
for (var h in request.headers) {
response.write(h + ":" + request.headers[h] + "\r\n");
}
response.write("\r\n");
request.on("data", function (chunk) {
response.write(chunk);
});
request.on("end", function (chunk) {
response.end();
});
break;
case "/json":
response.writeHead(200, {
"Content-type": "application/json; charset=UTF-8",
});
response.write(JSON.stringify({ test: "success" }));
response.end();
break;
default:
var filename = url.pathname.substring(1);
var type = getType(
filename.substring(filename.lastIndexOf(".") + 1)
);
fs.readFile(filename, function (err, content) {
if (err) {
response.writeHead(404, {
"Content-Type": 'text/plain; charset="UTF-8"',
});
response.write(err.message);
response.end();
} else {
response.writeHead(200, { "Content-Type": type });
response.write(content);
response.end();
}
});
break;
}
});
function getType(endTag) {
var type = null;
switch (endTag) {
case "html":
case "htm":
type = "text/html; charset=UTF-8";
break;
case "js":
type = 'application/javascript; charset="UTF-8"';
break;
case "css":
type = 'text/css; charset="UTF-8"';
break;
case "txt":
type = 'text/plain; charset="UTF-8"';
break;
case "manifest":
type = 'text/cache-manifest; charset="UTF-8"';
break;
default:
type = "application/octet-stream";
break;
}
return type;
}