var User = (function(){ var User = function(socket){ if(!(this instanceof User)){ return (new User(socket)); } /** * constructor here */ this.socket = socket; this._rooms = []; this._id = socket.id; this.generateName(); this._events(); }; var r = User.prototype; /** * methods && properties here * r.property = null; * r.getProperty = function() {...} */ r._id = null; r._name = null; r._rooms = null; r._inQueue = false; r.socket = null; r.disconnected = false; r.getID = function(){ return this._id; } r.send = function(event, data, room){ room = room || null; data = data || null; if(!room){ this.socket.emit(event, data); } else { this.socket.to(room).emit(event, data); } } r.generateName = function(){ var name = "Guest" + (((Math.random() * 8999) + 1000) | 0); this._name = name; return name; } r.setName = function(name) { console.log("user name changed from %s to %s", this._name, name); this._name = name; } r.getName = function() { return this._name; } r.getRoom = function() { return this._rooms[0]; } r.setDeck = function(deck) { //console.log("set deck: ", deck); this._deck = deck; } r.getDeck = function() { return this._deck; } r.addRoom = function(room) { this._rooms.push(room); } r.cleanUp = function() { for(var i=0; i<this._rooms.length; i++) { var room = this._rooms[i]; if(room[i] === null) { this._rooms.splice(i, 1); return this.cleanUp(); } } } r.disconnect = function() { var self = this; this.disconnected = true; matchmaking.removeFromQueue(this); this._rooms.forEach(function(room) { room.leave(self); if(!room.hasUser()) { //console.log("Remove room: ", room.getID()); room = null; } }) this.cleanUp(); } r._events = function() { var socket = this.socket; var self = this; socket.on("request:name", function(data){ if(data && data.name){ self.setName(data.name); } socket.emit("response:name", {name: self.getName()}); }) socket.on("request:matchmaking", function() { if(self._inQueue) return; matchmaking.findOpponent(self); }); socket.on("request:gameLoaded", function(data){ //console.log(data); connections.roomCollection[data._roomID].setReady(self); }) socket.on("set:deck", function(data) { //console.log(data); if(data && data.deck){ self.setDeck(data.deck); } }) } return User; })(); module.exports = User;