Files
restitution/gameServer/main.js

109 lines
2.7 KiB
JavaScript

const HTTP = require("http");
const path = require("path");
const fs = require("fs");
const jsdom = require("jsdom");
const { Server } = require("socket.io");
const Datauri = require("datauri");
const server = HTTP.createServer((request, response) => {
const headers = {
"Access-Control-Allow-Origin":
"*" /* @dev First, read about security */,
"Access-Control-Allow-Methods": "OPTIONS, POST, GET",
"Access-Control-Max-Age": 2592000, // 30 days
/** add other headers as per requirement */
};
console.log("request starting...");
var filePath = "." + request.url;
if (filePath == "./") filePath = "./engine/serverEngine.html";
filePath = path.join(__dirname, filePath);
var extname = path.extname(filePath);
var contentType = "text/html";
switch (extname) {
case ".js":
contentType = "text/javascript";
break;
case ".css":
contentType = "text/css";
break;
case ".json":
contentType = "application/json";
break;
case ".png":
contentType = "image/png";
break;
case ".jpg":
contentType = "image/jpg";
break;
case ".wav":
contentType = "audio/wav";
break;
}
fs.readFile(filePath, function (error, content) {
if (error) {
if (error.code == "ENOENT") {
console.log("4xx", error);
fs.readFile(
path.join(__dirname, "./404.html"),
function (error, content) {
console.log("Error!!!", error);
response.writeHead(200, {
"Content-Type": contentType,
});
response.end(content, "utf-8");
}
);
} else {
console.log("5xx");
response.writeHead(500);
response.end(
"Sorry, check with the site admin for error: " +
error.code +
" ..\n"
);
response.end();
}
} else {
console.log("request ending...");
response.writeHead(200, { "Content-Type": contentType });
response.end(content, "utf-8");
}
});
});
const io = new Server(server, {
cors: {
origin: "http://localhost:8080",
// or with an array of origins
// origin: ["https://my-frontend.com", "https://my-other-frontend.com", "http://localhost:3000"],
credentials: true,
},
});
const { JSDOM } = jsdom;
function setupAuthoritativePhaser() {
JSDOM.fromFile(path.join(__dirname, "engine/serverEngine.html"), {
// To run the scripts in the html file
runScripts: "dangerously",
// Also load supported external resources
resources: "usable",
// So requestAnimatinFrame events fire
pretendToBeVisual: true,
})
.then((dom) => {
dom.window.gameLoaded = () => {
server.listen(8081, function () {
console.log(`Listening on ${server.address().port}`);
});
};
dom.window.io = io;
})
.catch((error) => {
console.log(error.message);
});
}
setupAuthoritativePhaser();