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 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.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) {
$("#main-ui").fadeIn(1000);
$("#begin, #wasted").fadeOut(1000);
@ -18,13 +18,21 @@ function run(flag) {
}
$(function() {
var error = $("#error");
var err = $("#error");
if (!window.WebSocket) {
error.text("Your browser does not support WebSockets!");
err.text("Your browser does not support WebSockets!");
return;
}
error.text("Loading... Please wait"); //TODO: show loading screen
var socket = io("//" + window.location.hostname + ":" + config.ws_port, {
err.text("Loading... Please wait"); //TODO: show loading screen
$.ajax("/port", {
type: "get",
dataType: "text",
error: function(xhr, status, error) {
console.log("Error");
},
success: function(data, status, xhr) {
var port = data;
var socket = io("//" + window.location.hostname + ":" + port, {
forceNew: true,
upgrade: false,
transports: ["websocket"]
@ -34,19 +42,21 @@ $(function() {
});
socket.on("pongs", function() {
socket.disconnect();
error.text("All done, have fun!");
err.text("All done, have fun!");
$("#name").keypress(function(evt) {
if (evt.which === 13) run();
});
$(".start").removeAttr("disabled").click(function(evt) {
run();
run(port);
});
$(".spectate").removeAttr("disabled").click(function(evt) {
run(true);
run(port, true);
});
});
socket.on("connect_error", function() {
error.text("Cannot connect with server. This probably is due to misconfigured proxy server. (Try using a different browser)");
err.text("Cannot connect with server. This probably is due to misconfigured proxy server. (Try using a different browser)");
});
}
});
});
//Event listeners

View File

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

View File

@ -23,11 +23,10 @@
},
"homepage": "https://github.com/stevenjoezhang/paper.io",
"dependencies": {
"finalhandler": "^1.1.1",
"serve-static": "^1.13.2",
"browserify": "^16.2.3",
"express": "^4.16.4",
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0",
"browserify": "^16.2.3",
"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 port = process.env.PORT || config.port || 8080;
if (!(config.http_port >= 0 && config.http_port < 65536 && config.http_port % 1 === 0)) {
console.error("[ERROR] http_port argument must be an integer >= 0 and < 65536.");
process.exit();
if (!(config.port >= 0 && config.port < 65536 && config.port % 1 === 0)) {
console.error("[ERROR] `port` argument must be an integer >= 0 and < 65536. Default value will be used.");
}
if (!(config.ws_port >= 0 && config.ws_port < 65536 && config.ws_port % 1 === 0)) {
console.error("[ERROR] ws_port argument must be an integer >= 0 and < 65536.");
process.exit();
}
const finalhandler = require("finalhandler"),
http = require("http"),
serveStatic = require("serve-static"),
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");
}
server.listen(port, () => {
console.log("Server listening at port %d", port);
});
//Routing
app.use(express.static(path.join(__dirname, "public")));
app.get("/port", (req, res) => {
var ans = process.env.PORT ? 443 : port;
res.end(ans.toString());
});
//Create server
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 = require("./src/game-server.js");
var game = new Game();
io.on("connection", function(socket) {
socket.on("hello", function(data, fn) {
io.set("transports", ["websocket"]);
io.on("connection", (socket) => {
socket.on("hello", (data, fn) => {
//TODO: error checking.
if (data.god && game.addGod(socket)) {
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 fn(true);
});
socket.on("pings", function(fn) {
socket.on("pings", (fn) => {
socket.emit("pongs");
socket.disconnect();
});
});
setInterval(function() {
setInterval(() => {
game.tickFrame();
}, 1000 / 60);
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) {
console.error("error: " + error);
return;