2019-03-27 09:53:43 -04:00
|
|
|
//https://github.com/socketio/socket.io/blob/master/examples/chat/index.js
|
|
|
|
const express = require("express");
|
|
|
|
const app = express();
|
|
|
|
const path = require("path");
|
|
|
|
const server = require("http").createServer(app);
|
|
|
|
const io = require("socket.io")(server);
|
2019-04-18 12:42:20 -04:00
|
|
|
const exec = require("child_process").exec;
|
2019-02-21 11:19:33 -05:00
|
|
|
|
2019-03-27 04:20:34 -04:00
|
|
|
var config = require("./config.json");
|
2019-02-21 11:19:33 -05:00
|
|
|
|
2019-03-27 04:20:34 -04:00
|
|
|
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.");
|
2019-03-27 09:53:43 -04:00
|
|
|
config.port = 8080;
|
2019-02-21 11:19:33 -05:00
|
|
|
}
|
2019-03-27 09:53:43 -04:00
|
|
|
var port = process.env.PORT || config.port;
|
2019-02-21 11:19:33 -05:00
|
|
|
|
2019-03-27 04:20:34 -04:00
|
|
|
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) => {
|
2019-03-27 09:53:43 -04:00
|
|
|
//Deploy to Heroku
|
2019-03-27 04:20:34 -04:00
|
|
|
var ans = process.env.PORT ? 443 : port;
|
|
|
|
res.end(ans.toString());
|
2019-01-15 10:42:15 -05:00
|
|
|
});
|
2017-02-28 02:20:32 -05:00
|
|
|
|
2019-04-18 12:42:20 -04:00
|
|
|
var Game = require("./src/game-server");
|
2019-02-21 11:19:33 -05:00
|
|
|
var game = new Game();
|
2019-03-27 04:20:34 -04:00
|
|
|
io.set("transports", ["websocket"]);
|
|
|
|
io.on("connection", (socket) => {
|
|
|
|
socket.on("hello", (data, fn) => {
|
2019-01-15 10:42:15 -05:00
|
|
|
//TODO: error checking.
|
2019-02-22 00:22:21 -05:00
|
|
|
if (data.god && game.addGod(socket)) {
|
|
|
|
fn(true);
|
|
|
|
return;
|
|
|
|
}
|
2019-01-15 10:42:15 -05:00
|
|
|
if (data.name && data.name.length > 32) fn(false, "Your name is too long!");
|
2019-02-21 20:36:35 -05:00
|
|
|
else if (!game.addPlayer(socket, data.name)) fn(false, "There're too many platers!");
|
2019-01-15 10:42:15 -05:00
|
|
|
else fn(true);
|
|
|
|
});
|
2019-03-27 04:20:34 -04:00
|
|
|
socket.on("pings", (fn) => {
|
2019-01-15 10:42:15 -05:00
|
|
|
socket.emit("pongs");
|
|
|
|
socket.disconnect();
|
|
|
|
});
|
2017-02-23 23:10:36 -05:00
|
|
|
});
|
2017-02-25 21:36:44 -05:00
|
|
|
|
2019-03-27 04:20:34 -04:00
|
|
|
setInterval(() => {
|
2019-02-21 11:19:33 -05:00
|
|
|
game.tickFrame();
|
|
|
|
}, 1000 / 60);
|
2019-02-22 04:35:16 -05:00
|
|
|
|
|
|
|
for (var i = 0; i < parseInt(config.bots); i++) {
|
2019-03-27 09:53:43 -04:00
|
|
|
exec(`node ${path.join(__dirname, "paper-io-bot.js")} ws://localhost:${port}`, (error, stdout, stderr) => {
|
2019-03-06 22:05:56 -05:00
|
|
|
if (error) {
|
2019-02-22 04:35:16 -05:00
|
|
|
console.error("error: " + error);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
console.log("stdout: " + stdout);
|
|
|
|
console.log("stderr: " + typeof stderr);
|
|
|
|
});
|
|
|
|
}
|