You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cardGame/server.js

219 lines
4.8 KiB
JavaScript

const express = require('express');
const database = require('./database');
const app = express();
const http = require('http').Server(app);
const port = process.env.PORT || 3000;
const io = require('socket.io')(http);
app.use(express.static(__dirname + '/public'));
http.listen(port, () => console.log('listening on port ' + port));
database.connect();
io.on('connection', onConnection);
// Variables
let numRooms = 0;
let numRoomsToPreGen = 1;
const maxRooms = 3;
const maxPlayersPerRoom = 2;
const maxSpectatorsPerRoom = 0;
// All the room
//let data = []; // Normal array
let data = {}; // Object array (this one for returning to player, and JSON stringify while keeping named ids)
let roomData = {};
for (let roomId = 1; roomId <= numRoomsToPreGen; roomId++) {
// Never have more rooms than max rooms!!!
if(numRooms > maxRooms){
break;
}
createRoom(roomId);
}
function onConnection(socket){
console.log('+ User connected');
console.log('');
socket.on('requestGetCards', function() {
requestGetCards(socket);
});
socket.on('requestRooms', function(filter) {
requestRooms(socket, filter);
});
socket.on('requestJoinRoom', function(playerName, roomId) {
requestJoinRoom(socket, playerName, roomId);
});
socket.on('requestCreateRoom', function(playerName) {
requestCreateRoom(socket, playerName);
});
}
function requestRooms(socket, filter){
console.log('+ requestRooms recieved');
console.log('- filter: '+filter);
let response = getRooms(filter, dump = true);
io.to(socket.id).emit('returnRooms', response);
console.log('');
}
function getRooms(filter = 'all', dump = false){
console.log('+ getRooms');
let response = {
random: 'randomStuff',
roomData: roomData,
};
if(dump){
console.log(response);
console.log('');
}
return response;
}
function requestCreateRoom(socket, playerName){
console.log('+ createRoom recieved');
console.log('- requested by: '+playerName);
response = createRoom(roomId = false, dump = true);
io.to(socket.id).emit('returnCreateRoom', response);
if(response.success){
let response = getRooms(filter = 'all', dump = true);
io.to(socket.id).emit('returnRooms', response);
}
console.log('');
}
function createRoom(roomId = false, dump = true){
let roomName = false;
if(roomId == false){
roomId = numRooms + 1;
}
console.log(roomId);
let response = {
success: false,
message: 'No idea bossman'
};
// Max room limit reached
console.log(numRooms);
console.log(maxRooms);
if(numRooms >= maxRooms){
console.log('- Room limit reached');
response = {
success: false,
message: 'No space '+numRooms+' out of '+maxRooms+' created.'
};
// Create room
}else{
console.log('- Creating room')
let room = {};
room['id'] = roomId;
room['name'] = 'Room:'+room['id'];
roomName = room['name'];
room['password'] = '';
room['timeout'] = {};
room['timeout']['s'] = 10;
room['people'] = 0;
//room['deck'] = [];
//room['turn'] = 0;
// Removed players for now, players may be seperate
// and back-end only with an assoc. to current room
//let players = {};
//for (let j = 0; j < maxPlayersPerRoom; j++) {
//let p = {};
//p['id'] = 0;
//p['name'] = "";
//p['hand'] = {};
//players[j] = p;
//}
//room['players'] = players;
roomData[roomId] = room;
numRooms = numRooms + 1;
response = {
success: true,
message: 'Room Created: '+roomName,
};
}
if(dump){
console.log(response);
console.log('');
}
return response;
}
// TODO: break into requestJoinRoom, and JoinRoom?
// Maybe not needed here? As won't be done via backend?
function requestJoinRoom(socket, playerName, roomId){
console.log('+ requestJoinRoom recieved');
socket.playerName = playerName;
for (let i = 1; i <= numRooms; i++) {
let name = 'Room_' + i;
let people = roomData[i]['people'];
console.log('- people: '+people);
console.log('- maxPlayersPerRoom: '+maxPlayersPerRoom);
if (true || people < maxPlayersPerRoom) {
people = roomData[i]['people'] += 1;
socket.join(name);
console.log('>> User ' + socket.playerName +
' connected on ' + name + ' (' + (people) + '/' + maxPlayersPerRoom + ')');
io.to(socket.id).emit('responseJoinRoom', name);
if (people >= maxPlayersPerRoom) {
console.log('- starting game');
//startGame(name);
}
return;
}
}
io.to(socket.id).emit('responseRoom', 'error');
console.log('>> Rooms exceeded');
}
function requestGetCards(socket){
let response = {'success':false, 'message':'Nothing happened'};
response.success = true;
// Await promise, once it's done get the data, if errors send err
database.getCards().then(data => {
response.message = data;
io.to(socket.id).emit('responseGetCards', response);
})
.catch(err => {
response.message = err;
io.to(socket.id).emit('responseGetCards', err);
})
}