Use express instead of finalhandler & serve-static

This commit is contained in:
StevenJoeZhang 2019-03-27 16:20:34 +08:00
parent 28e8f611f2
commit a9b9e8e895
5 changed files with 67 additions and 73 deletions

View File

@ -4,9 +4,9 @@ var io = require("socket.io-client");
var client = require("./src/game-client"); var client = require("./src/game-client");
var config = require("./config.json"); var config = require("./config.json");
function run(flag) { function run(port, flag) {
client.renderer = flag ? require("./src/mode/mode-god") : require("./src/mode/mode-user"); client.renderer = flag ? require("./src/mode/mode-god") : require("./src/mode/mode-user");
client.connectGame("//" + window.location.hostname + ":" + config.ws_port, $("#name").val(), function(success, msg) { client.connectGame("//" + window.location.hostname + ":" + port, $("#name").val(), function(success, msg) {
if (success) { if (success) {
$("#main-ui").fadeIn(1000); $("#main-ui").fadeIn(1000);
$("#begin, #wasted").fadeOut(1000); $("#begin, #wasted").fadeOut(1000);
@ -18,35 +18,45 @@ function run(flag) {
} }
$(function() { $(function() {
var error = $("#error"); var err = $("#error");
if (!window.WebSocket) { if (!window.WebSocket) {
error.text("Your browser does not support WebSockets!"); err.text("Your browser does not support WebSockets!");
return; return;
} }
error.text("Loading... Please wait"); //TODO: show loading screen err.text("Loading... Please wait"); //TODO: show loading screen
var socket = io("//" + window.location.hostname + ":" + config.ws_port, { $.ajax("/port", {
forceNew: true, type: "get",
upgrade: false, dataType: "text",
transports: ["websocket"] error: function(xhr, status, error) {
}); console.log("Error");
socket.on("connect", function() { },
socket.emit("pings"); success: function(data, status, xhr) {
}); var port = data;
socket.on("pongs", function() { var socket = io("//" + window.location.hostname + ":" + port, {
socket.disconnect(); forceNew: true,
error.text("All done, have fun!"); upgrade: false,
$("#name").keypress(function(evt) { transports: ["websocket"]
if (evt.which === 13) run(); });
}); socket.on("connect", function() {
$(".start").removeAttr("disabled").click(function(evt) { socket.emit("pings");
run(); });
}); socket.on("pongs", function() {
$(".spectate").removeAttr("disabled").click(function(evt) { socket.disconnect();
run(true); err.text("All done, have fun!");
}); $("#name").keypress(function(evt) {
}); if (evt.which === 13) run();
socket.on("connect_error", function() { });
error.text("Cannot connect with server. This probably is due to misconfigured proxy server. (Try using a different browser)"); $(".start").removeAttr("disabled").click(function(evt) {
run(port);
});
$(".spectate").removeAttr("disabled").click(function(evt) {
run(port, true);
});
});
socket.on("connect_error", function() {
err.text("Cannot connect with server. This probably is due to misconfigured proxy server. (Try using a different browser)");
});
}
}); });
}); });
//Event listeners //Event listeners

View File

@ -1,7 +1,5 @@
{ {
"hostname": "0.0.0.0", "port": 8080,
"http_port": 8080,
"ws_port": 8081,
"bots": 5, "bots": 5,
"consts": { "consts": {
"GRID_COUNT": 100, "GRID_COUNT": 100,

View File

@ -23,11 +23,10 @@
}, },
"homepage": "https://github.com/stevenjoezhang/paper.io", "homepage": "https://github.com/stevenjoezhang/paper.io",
"dependencies": { "dependencies": {
"finalhandler": "^1.1.1", "browserify": "^16.2.3",
"serve-static": "^1.13.2", "express": "^4.16.4",
"socket.io": "^2.2.0", "socket.io": "^2.2.0",
"socket.io-client": "^2.2.0", "socket.io-client": "^2.2.0",
"browserify": "^16.2.3",
"uglify-es": "^3.3.9" "uglify-es": "^3.3.9"
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -1,45 +1,32 @@
var express = require("express");
var app = express();
var path = require("path");
var server = require("http").createServer(app);
var io = require("socket.io")(server);
var exec = require('child_process').exec;
var config = require("./config.json"); var config = require("./config.json");
var port = process.env.PORT || config.port || 8080;
if (!(config.http_port >= 0 && config.http_port < 65536 && config.http_port % 1 === 0)) { if (!(config.port >= 0 && config.port < 65536 && config.port % 1 === 0)) {
console.error("[ERROR] http_port argument must be an integer >= 0 and < 65536."); console.error("[ERROR] `port` argument must be an integer >= 0 and < 65536. Default value will be used.");
process.exit();
} }
if (!(config.ws_port >= 0 && config.ws_port < 65536 && config.ws_port % 1 === 0)) { server.listen(port, () => {
console.error("[ERROR] ws_port argument must be an integer >= 0 and < 65536."); console.log("Server listening at port %d", port);
process.exit(); });
} //Routing
app.use(express.static(path.join(__dirname, "public")));
const finalhandler = require("finalhandler"), app.get("/port", (req, res) => {
http = require("http"), var ans = process.env.PORT ? 443 : port;
serveStatic = require("serve-static"), res.end(ans.toString());
exec = require('child_process').exec;
//Serve up public/ folder
var serve = serveStatic("public/", {
"setHeaders": function(res, path) {
res.setHeader("Cache-Control", "public, max-age=0");
}
}); });
//Create server var Game = require("./src/game-server.js");
try {
http.createServer(function onRequest(req, res) {
serve(req, res, finalhandler(req, res));
}).listen(config.http_port, config.hostname);
}
catch (e) {
console.error("[ERROR] hostname argument invalid.");
process.exit();
}
var server = http.createServer();
server.listen(config.ws_port);
var io = require("socket.io")(server);
io.set("transports", ["websocket"]);
const Game = require("./src/game-server.js");
var game = new Game(); var game = new Game();
io.on("connection", function(socket) { io.set("transports", ["websocket"]);
socket.on("hello", function(data, fn) { io.on("connection", (socket) => {
socket.on("hello", (data, fn) => {
//TODO: error checking. //TODO: error checking.
if (data.god && game.addGod(socket)) { if (data.god && game.addGod(socket)) {
fn(true); fn(true);
@ -49,18 +36,18 @@ io.on("connection", function(socket) {
else if (!game.addPlayer(socket, data.name)) fn(false, "There're too many platers!"); else if (!game.addPlayer(socket, data.name)) fn(false, "There're too many platers!");
else fn(true); else fn(true);
}); });
socket.on("pings", function(fn) { socket.on("pings", (fn) => {
socket.emit("pongs"); socket.emit("pongs");
socket.disconnect(); socket.disconnect();
}); });
}); });
setInterval(function() { setInterval(() => {
game.tickFrame(); game.tickFrame();
}, 1000 / 60); }, 1000 / 60);
for (var i = 0; i < parseInt(config.bots); i++) { for (var i = 0; i < parseInt(config.bots); i++) {
exec("node paper-io-bot.js ws://localhost:" + config.ws_port, function(error, stdout, stderr) { exec("node paper-io-bot.js ws://localhost:" + port, (error, stdout, stderr) => {
if (error) { if (error) {
console.error("error: " + error); console.error("error: " + error);
return; return;