109 lines
2.7 KiB
JavaScript
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();
|