MultiplayerSnakeGame/server/server.js
2022-05-19 16:53:26 +02:00

99 lines
2.8 KiB
JavaScript

const port = 3000;
const http = require('http');
const express = require('express');
const socketio = require('socket.io');
const { exec } = require('child_process');
const app = express();
const clientPath = __dirname+'/../client';
console.log('Serving static from ' + clientPath);
app.use(express.static(clientPath));
const server = http.createServer(app);
const io = socketio(server);
app.post('/receiveUpdate', (req, res) => {
res.status(200).json({success:true});
exec(`sh ${__dirname}/../gitUpdate.sh`, (error, stdout, stderr) => {
console.log(stdout);
console.error(stderr);
if (error !== null) {
console.error(`exec error: ${error}`);
}
});
});
server.on('error', err => {
console.error('Server error:', err);
});
server.listen(port, () => {
console.log('Server Started on Port '+port);
});
const cells = 40;
let snakePlayers = Array(), snakeFood = {x: Math.floor(Math.random()*cells), y: Math.floor(Math.random()*cells)};
io.on('connection', socket => {
let id = -1;
console.log("New Player has connected.");
while (true) {
let current = Math.floor(Math.random()*89+10);
let isUsed = false;
for (let i = 0; i < snakePlayers.length; i++) {
if (snakePlayers[i].uid == current) {
isUsed = true;
break;
}
}
if (!isUsed) {
id = current;
break;
}
}
if (id != -1) {
console.log('Handing ID', id);
let temp = Array();
snakePlayers.forEach(p => {
if (p.data != null) {
temp.push(p.data);
}
});
socket.emit('connected', {pdata: temp, ownID: id, food: snakeFood});
snakePlayers.push({socket, ownID: id, data: null});
}
socket.on('disconnect', () => {
for (let i = 0; i < snakePlayers.length; i++) {
if (snakePlayers[i].socket == socket) {
console.log("Disconnecting SNAKEGAME User. ID", snakePlayers[i].ownID);
snakePlayers.splice(i, 1);
break;
}
}
});
socket.on('snakeFoodUpdate', () => {
snakeFood = {x: Math.floor(Math.random()*cells), y: Math.floor(Math.random()*cells)};
});
socket.on('snakePlayerUpdate', p => {
for (let i = 0; i < snakePlayers.length; i++) {
if (p.ownID == snakePlayers[i].ownID) {
snakePlayers[i].data = p.data;
let temp = Array();
snakePlayers.forEach(d => {
if (d.ownID != p.ownID && d.data != null) {
temp.push(d.data);
}
});
snakePlayers[i].socket.emit('snakeUpdatePlayers', {pdata: temp, food: snakeFood});
break;
}
}
});
});