not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

237 lines
5.0 KiB

/**
* Object used for storing rooms
* @param capacityP -- the number of people that can be in room
* @param pass -- the room password -- null if none
* @param owner -- the person who is creating the room
*/
var room = function(capacityP, pass, owner)
{
//max capacity of room -- default is 4 for now
this.capacity = capacityP;
//name of the room
this.roomName = owner.name;
this.addUser(owner);
//list of words used in the game
this.words = [];
//list players -- so we can push requests to them
this.users = [];
//increments when rounds pass
this.currentRound = 0;
// the password of the room -- null if no password
this.password = null;
this.state = 1;
/**
* adds a user to a room
* @param p
* return 0 if they could join
*/
this.addUser = function(player)
{
//check if room is not full
this.users.push(player);
player.room = this;
}
/**
* Removes a specific user from the room and adjusts the size of the array
* if the array is empty, the room closes
* @param p
*/
this.removeUser = function(p)
{
var temp = new Array();
for(var i = 0; i < temp.length; i++)
{
if(p.name === this.users[i].name)
{
}
else
{
temp.push(this.users[i]);
}
}
this.users = temp;
//if room is empty remove the room from rooms list
if(this.users.length == 0)
{
rooms[this.roomName] = null;
}
}
/**
* creates json to send in the 'roomUpdate' socket event
*/
this.generateRoomUpdate()
{
}
/**
* Whether or not a user can join this room -- checks for number of people are
* already in the room and the password
* @param p
* @returns {boolean}
*/
this.canJoin = function(p)
{
if(this.password == null)
{
return (this.users.length < this.capacity);
}
else
{
return (this.users.length < this.capacity) && (p === this.password);
}
}
}
//list of all the rooms
var rooms = {};
var player = function(s)
{
//name of the user
this.name = null;
//players socket
this.socket = s;
//score of the player
this.score = 0;
//reference to the room -- might not need this
this.room = null;
this.sumbission = null;
/**
* generate the json object used in 'roomUpdate' socket io event
*/
this.genJASON = function()
{
}
}
//list of all players --accessed using names like a dic
var players = {};
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
const port = 3000;
const serverUtils = require('./serverUtils.js');
//Whenever someone connects this gets executed
io.on('connection', function(socket)
{
var player = new player(socket);
console.log('A user connected');
/**
*Register user nickname/handle (register) Client => Server
*/
socket.on('register', function(data) {
console.log("Register event called");
console.log(data);
console.log(" ");
//checks for user name in use
if(serverUtils.userAvailable(data, players))
{
player.name = data;
players[data] = player;
socket.emit('sendRooms', serverUtils.generateSendRoomsJSON(rooms));
}
else
{
socket.emit('registerFailed', 'User name taken');
}
});
/**
*Create Room (createRoom) Client => Server
* data {password: , capacity: }
*/
socket.on('createRoom', function(data) {
console.log("create room event called");
console.log(data);
console.log(" ");
rooms[player.name] = new room(data.capacity, data.password, player);
});
/**
* Room Selection (joinRoom) Client => Server
* data {roomName: , password: }
*/
socket.on('joinRoom', function(data) {
console.log("join room event called");
console.log(data);
console.log(" ");
if(rooms[data.roomName].canJoin(data.password))
{
rooms[data.roomName].addUser(player);
}
else
{
socket.emit('registerFailed', 'Failed connecting to room');
}
});
/**
* data -- literally a string
*/
socket.on('submitWord', function(data) {
console.log("submitWord called");
console.log(data);
console.log(" ");
});
//Whenever someone disconnects
socket.on('disconnect', function () {
console.log('A user disconnected');
if(rooms[player.name] != null)
{
rooms[player.name] = null;
}
//leave the room
if(player.room != null)
{
player.room.removeUser(player);
}
players[player.name] = null;
});
});
http.listen(port, function() {
console.log('listening on *:3000');
});