initial commit of poker game

This commit is contained in:
Edward Yang
2015-03-20 14:21:44 -07:00
commit cd7f17778f
147 changed files with 10833 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
module.exports = function(){
return new Filter();
};
var Filter = function(){};
Filter.prototype.before = function (msg, session, next){
if(msg.content && msg.content.indexOf ('fuck') !== -1){
session.__abuse__ = true;
msg.content = msg.content.replace ('fuck', '****');
}
next();
};
Filter.prototype.after = function (err, msg, session, resp, next){
if(session.__abuse__){
var user_info = session.uid.split ('*');
console.log ('abuse:' + user_info[0] + "at room" + user_info[1]);
}
next(err);
};

View File

@@ -0,0 +1,245 @@
var logger = require('pomelo-logger').getLogger('game-log', __filename);
module.exports = function(app){
return new Handler(app);
};
var Handler = function(app){
this.app = app;
};
var handler = Handler.prototype;
/**
* Get tables
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.getTables = function(msg, session, next){
var tableService = this.app.get('tableService');
next(null, {
code : 200,
route : msg.route,
tables : tableService.getTables()
});
};
/**
* Create table
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.createTable = function(msg, session, next){
if(session.get('tid')){
next(null, {
code : 500,
error : 'already-in-table'
});
return;
}
this.app.get('tableService').createTable(session.uid, msg, function(e){
if(e){
next(null, {
code : 500,
error : e
});
return;
}
next(null, {
code : 200,
route : msg.route
});
});
};
/**
* Join table
*
* @param {Object} msg table parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.joinTable = function(msg, session, next){
var me = this;
var tableService = this.app.get('tableService');
var table = tableService.getTable(msg.tid);
if(!msg.tid || !table){
next(null, {
code : 500,
error : 'invalid-table'
});
return;
}
session.set('tid', msg.tid);
session.pushAll(function(err){
if(err){
logger.error('set tid for session service failed! error is : %j', err.stack);
next(null, {
code : 500,
error : 'server-error'
});
return;
}
var tid = session.get('tid');
me.app.rpc.chat.chatRemote.addToChannel(session, session.uid, tid, function(e){
if(e){
next(null, {
code : 500,
error : e
});
return;
}
tableService.addMember(tid, session.uid, function(e){
if(e){
next(null, {
code : 500,
error : e
});
return;
}
next(null, {
code : 200,
route : msg.route
});
});
});
});
};
/**
* Leave table
*
* @param {Object} msg table parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.leaveTable = function(msg, session, next){
var me = this;
var tid = session.get('tid');
if(!tid){
return next(null, {
code : 500,
error : 'not-table-member'
});
}
me.app.rpc.chat.chatRemote.leave(session, session.uid, tid, function(e){});
session.set('tid', undefined);
session.pushAll(function(e){
if(e){
logger.error('unset tid for session service failed! error is : %j', e.stack);
return next(null, {
code : 500,
error : 'server-error'
});
}
me.app.get('tableService').removeMember(tid, session.uid, function(e){
if(e){
next(null, {
code : 500,
error : e
});
return;
}
next(null, {
code : 200,
route : msg.route
});
});
});
};
/**
* Join game
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.joinGame = function(msg, session, next){
this.app.get('tableService').addPlayer(session.get('tid'), session.uid, msg.buyIn, function(e){
if(e){
next(null, {
code : 500,
error : e
});
return;
}
next(null, {
code : 200,
route : msg.route
});
});
};
/**
* Start game
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.startGame = function(msg, session, next){
this.app.get('tableService').startGame(session.get('tid'), function(e){
if(e){
next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route
});
});
};
/**
* Perform an action on your turn
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.execute = function(msg, session, next){
this.app.get('tableService').performAction(session.get('tid'), session.uid, msg, function(e){
if(e){
next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route
});
});
};
/**
* Perform an action on your turn
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.removeBots = function(msg, session, next){
var botService = this.app.get('botService');
botService.removeAllBots(session.get('tid'), true);
next(null, {
code : 200,
route : msg.route
});
};

View File

@@ -0,0 +1,188 @@
var logger = require('pomelo-logger').getLogger('game-log', __filename);
var UserStore = require('../../../persistence/users');
module.exports = function(app){
return new Handler(app);
};
var Handler = function(app){
this.app = app;
};
var handler = Handler.prototype;
/**
* Get users matching the criteria
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.getUsers = function(msg, session, next){
if(!msg.name && !msg.val && !session.uid){
return next(null, {
code : 500,
error : 'invalid-input'
});
}
var searchId = (msg.name == 'id' || msg.name == 'username' || msg.name == 'email') ? msg.name : 'id';
var searchVal = typeof msg.val === 'string' ? msg.val : session.uid;
UserStore.getByAttr(searchId, searchVal, {
getArray : true
}, function(e, matches){
if(e){
return next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route,
matches : matches
});
});
};
/**
* Update user profile
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.setProfile = function(msg, session, next){
if(!session.uid){
return next(null, {
code : 500,
error : 'invalid-session'
});
}
UserStore.getByAttr('id', session.uid, false, function(e, user){
if(e){
return next(null, {
code : 500,
error : e
});
}
var userObj = {
id : user.id
};
if(msg.email){
userObj.email = msg.email.trim();
}
UserStore.set(userObj, function(e, updatedUser){
if(e){
return next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route
});
});
});
};
/**
* Update user password
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.setPassword = function(msg, session, next){
if(!session.uid || !msg.oldpassword || !msg.password){
return next(null, {
code : 500,
error : 'invalid-input'
});
}
UserStore.getByAttr(['id', 'password'], [session.uid, msg.oldpassword], false, function(e, user){
if(e){
return next(null, {
code : 500,
error : e
});
}
var userObj = {
id : user.id,
password : msg.password.trim()
};
UserStore.set(userObj, function(e, updatedUser){
if(e){
return next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route
});
});
});
};
/**
* Add a friend to friend list
*
* @param {Object} msg game parameters from client
* @param {Object} session
* @param {Function} next next step callback
*
*/
handler.addFriend = function(msg, session, next){
if(!session.uid){
return next(null, {
code : 500,
error : 'invalid-session'
});
}
if(!msg.friend){
return next(null, {
code : 200,
route : msg.route
});
}
UserStore.getByAttr('id', session.uid, {
getFullEntity : true
}, function(e, user){
if(e){
return next(null, {
code : 500,
error : e
});
}
UserStore.getByAttr('id', msg.friend, false, function(e, friend){
if(e){
return next(null, {
code : 500,
error : e
});
}
user.friends.push({
id : friend.id,
username : friend.username
});
UserStore.set({
id : user.id,
friends : user.friends
}, function(e, updatedUser){
if(e){
return next(null, {
code : 500,
error : e
});
}
next(null, {
code : 200,
route : msg.route
});
});
});
});
};

View File

@@ -0,0 +1,82 @@
var UserStore = require('../../../persistence/users');
var tokenService = require('../../../../../shared/token');
var SESSION_CONFIG = require('../../../../../shared/config/session.json');
module.exports = function(app){
return new Remote(app);
};
var Remote = function(app){
this.app = app;
};
var remote = Remote.prototype;
/**
* Register user.
*
* @param {object} userObj object containing userObj.user and userObj.pass
* @param {Function} cb
* @return {Void}
*/
remote.register = function(userObj, cb){
UserStore.create({
username : userObj.username,
password : userObj.password,
email : userObj.email,
chips : 100000
}, function(e, user){
if(e){
cb(e);
}else{
cb(null, user);
}
});
};
/**
* Auth via user/pass or token, and check for expiry.
*
* @param {object|string} input token or object containing username and password
* @param {Function} cb
* @return {Void}
*/
remote.auth = function(input, cb){
if(typeof input === 'string'){
var res = tokenService.parse(input, SESSION_CONFIG.secret);
if(!res){
cb('invalid-token');
return;
}
if(!checkExpire(res, SESSION_CONFIG.expire)){
cb('token-expired');
return;
}
UserStore.getByAttr('id', res.uid, false, function(e, user){
if(e){
cb('invalid-user');
return;
}
cb(null, user);
});
}else{
UserStore.getByAttr(['username', 'password'], [input.username, input.password], false, function(e, user){
if(!user){
cb('invalid-user');
}else{
cb(null, user, tokenService.create(user.id, Date.now(), SESSION_CONFIG.secret));
}
});
}
};
/**
* Check the token whether expire.
*
* @param {Object} token token info
* @param {Number} expire expire time
* @return {Boolean} true for not expire and false for expire
*/
var checkExpire = function(token, expire){
if(expire < 0){
// negative expire means never expire
return true;
}
return (Date.now() - token.timestamp) < expire;
};

View File

@@ -0,0 +1,22 @@
module.exports = function(app){
return new Remote(app);
};
var Remote = function(app){
this.app = app;
this.tableService = app.get('tableService');
};
var remote = Remote.prototype;
/**
* Remove member/player from table
*
* @param {string} uid user id
* @param {string} sid server id
* @param {string} tid channel id
* @param {function} cb callback
*
*/
remote.removeMember = function(uid, sid, tid, cb){
this.tableService.removeMember(tid, uid, cb);
};