pixelbattle/index.js

86 lines
2.4 KiB
JavaScript

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