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 );
        });