const WebSocket = require('ws'); const uuid = require('node-uuid'); const jsDir = `${__dirname}/`; const Game = require(`${jsDir}/game.js`); const wss = new WebSocket.Server({ port: 8080 }); const DEBUG = true; // Global, for now. Is there a need for an instance? Ben 052220 const Server = { games: {}, messageOthers: (ws, message) => { DEBUG && console.log("Sending to other " + wss.clients.size + " clients.") wss.clients.forEach((client) => { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify(message)); } }); }, messageAll: (ws, message) => { DEBUG && console.log("Sending to all " + wss.clients.size + " clients.") wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(JSON.stringify(message)); } }); }, onDisconnect: (ws) => { DEBUG && console.log("Closing " + ws.id) Server.messageOthers(ws, { head: { type: 'disconnect' }, body: { id: ws.id }}) }, onConnect: (ws, req) => { ws.id = uuid.v4(); DEBUG && console.log(req.url + ' connected to ' + ws.id); ws.on('message', Server.onMessage.bind(null, ws)); ws.on('close', Server.onDisconnect.bind(null, ws)) const G = new Game(); Server.messageAll(ws, { head: { type: 'connect' }, body: { id: ws.id }}); Server.messageAll(ws, { head: { type: 'walls' }, body: G.walls}) }, onMessage: (ws, message) => { DEBUG && console.log('Received: %s', message); // Server.messageAll(ws, message); }, }; wss.on('connection', Server.onConnect); console.log("Websocket server listening on :8080")