const WebSocket = require('ws'); const express = require('express') const http = express() const path = require('path') const pug = require('pug'); http.use(express.static(path.join(__dirname, 'html'))); http.set('view engine', 'pug'); const config = require("./settings.json"); const httpPort = config.httpPort const appPort = config.appPort const serverAddress = config.serverAddress var board = new Array(config.boardHeight * config.boardWidth * 4); board.fill(255); const server = new WebSocket.Server({ port: appPort }); let clients = []; const evaulatePixelNumber = (x, y) => { let pixelNumber; if (y > 0) pixelNumber = (y) * config.boardWidth + x if (y == 0) pixelNumber = x return pixelNumber } server.on('connection', function(client) { clients.push(client); // When you receive a message, send that message to every socket. client.on('message', function(msg) { let packet, content, code; try { packet = JSON.parse(msg.toString()); content = packet.content code = packet.code } catch (e) {console.log(e)} console.log(packet) let response = {}; switch(code) { case 0: response.code = 0; response.content = board; client.send(Buffer.from(JSON.stringify(response))); break; case 1: response.code = 1; response.content = content; console.log(`response content ${response.content}`) contentJson = JSON.parse(content); let pixelNumber = evaulatePixelNumber(contentJson.x * 4, contentJson.y * 4); if (contentJson.x < 0 || contentJson.y < 0) { break; } board[pixelNumber + 0] = contentJson.r; board[pixelNumber + 1] = contentJson.g; board[pixelNumber + 2] = contentJson.b; board[pixelNumber + 3] = 255; clients.forEach(c => c.send(Buffer.from(JSON.stringify(response)))); break; default: console.log("Packet cannot be understood: ", packet); client.send("{\"code\":-1}") } }); client.on('close', function() { clients = clients.filter(s => s !== client); }); }); http.get('/', (req, res) => { res.render('index.pug', {root: __dirname, server: serverAddress, port:appPort}) }) http.listen(httpPort, "0.0.0.0", () => { console.log(`Starting pixelbattle http server on port ${httpPort}`) })