Server.JS Snippet
Simple snippet to get Phaser 3 running on server side
by ragesoft
JavaScript
var initHTMLServer = () => {
JSDOM.fromFile(path.join(__dirname, 'serverHtml/index.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( resDom => {
dom = resDom;
dom.window.URL.createObjectURL = (blob) => {
if (blob){
return datauri.format(blob.type || 'image/png', blob[Object.getOwnPropertySymbols(blob)[0]]._buffer).content;
}
};
dom.window.URL.revokeObjectURL = (objectURL) => {};
dom.window.config = config;
dom.window.gs = gs;
dom.window.player = () => players; // return array of current users in game
dom.window.gameInfos = () => gameInfos; // return object of current game status (starttime, id, playercount, etc...)
dom.window.resetGame = resetGame; // a function to reset database
// passing object references
dom.window.gameLoaded = () => {
console.log(`Serverside game loaded`);
dom.window.updateHeros();
};
}).catch((error) => {
console.log("Error in DOM init: " + error.message);
});
};
....
// socket.io handling for inputs from client:
// user has pressed a key while in game
socket.on('input', data => {
if( !isGameStarted() ) return socket.emit("error", "Spiel nicht gestartet!");
let player = players.find( p => p.user == socket.user );
if( !player ) return socket.emit("error", "Spieler nicht im Spiel");
// dead
if( !player.health ) return; // socket.emit("error", "Spieler ist bereits ausgeschieden");
player.keys = data.keys;
dom.window.moveHero( player );
});