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.
231 lines
5.3 KiB
JavaScript
231 lines
5.3 KiB
JavaScript
|
|
const express = require('express');
|
|
const database = require('./database');
|
|
const cardGen = require('./cardGen');
|
|
const app = express();
|
|
const http = require('http').Server(app);
|
|
const port = process.env.PORT || 3000;
|
|
|
|
const io = require('socket.io')(http);
|
|
// util is what nodejs uses for console.log, but has a depth of 2 set
|
|
// so console.logs show [Array]/[Object] instead of useful info.
|
|
// This can be overridden console.log(util.inspect(LOGDATA, true, 4, true))
|
|
// 4 being new depth, true (last one) is to show colours
|
|
const util = require('util')
|
|
|
|
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);
|
|
}
|
|
|
|
// For testing to see console logs
|
|
//cardGen.requestDeck();
|
|
|
|
function requestStartGame(socket){
|
|
response = {success: false, message: 'Failed requestStartGame() server.js'};
|
|
cardGen.requestDeck().then(data => {
|
|
response.success = true;
|
|
response.message = data;
|
|
io.to(socket.id).emit('responseStartGame', response);
|
|
|
|
})
|
|
.catch(err => {
|
|
response.message = err;
|
|
io.to(socket.id).emit('responseStartGame', err);
|
|
});
|
|
}
|
|
|
|
function onConnection(socket){
|
|
|
|
console.log('+ User connected');
|
|
console.log('');
|
|
|
|
// New testing fella (working afaik)
|
|
// TODO: request specific deckId/playerId (and multiples, i.e. get 6 decks at same
|
|
// time, based on deckId/playerId combo. Maybe pass as array [deckId, playerId],[deck
|
|
socket.on('requestStartGame', function() {
|
|
requestStartGame(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');
|
|
|
|
}
|
|
|