转自:http://www.9miao.com/thread-44671-1-1.html
本帖最后由 ddd33 于 2014-2-7 09:39 编辑
学习笔记一传送门 学习笔记二传送门
学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴出各个模块一览表,封装完毕我就更新一个状态,并且补上模块说明
模块名 |
方法名 |
方法说明 |
封装状态 |
用户基础模块 userModel |
userLogin |
用于用户登陆时的方法 |
已封装 |
regUser |
注册用户的方法 |
已封装 |
heartCheck |
用户更新心跳时间的方法 |
已封装 |
heartCheck |
用户心跳检测的方法 |
已封装 |
fundsCheck |
检查资金是否异常的方法 |
暂不封装 |
loginUpdate |
登陆时更新用户登陆记录并写日志的方法 |
暂不封装 |
sysMsg |
发送系统消息的方法 |
已封装 |
userTalk |
用户在游戏中发言的方法 (这里我考虑是像QQ斗地主一样固定发言防止作弊, 还是不限制用户发言,个人觉得防作弊好一点) |
已封装 |
日志模块 logModel |
sysLog |
系统日志的方法(保存log日志的方法) |
暂不封装 |
userLoginLog |
用户写登陆日志的方法 |
暂不封装 |
userActionLog |
用户写操作日志的方法 |
暂不封装 |
gameResultLog |
游戏结果日志的方法 |
暂不封装 |
rfloatLog |
写资金流水的方法 |
暂不封装 |
游戏主模块 gameMainModel |
showUserCount |
在线用户统计的方法 |
已封装 |
pushMessage |
推送消息的方法 |
取消封装 |
joinGameQueue |
加入游戏队列的方法 |
已封装 |
gameMatching |
匹配玩家并生成游戏空间,随机用户顺序的方法 |
已封装 |
shufflingLicensing |
洗牌发牌的方法,并整理排序 |
已封装 |
grabLandlord |
抢地主的方法 |
未封装 |
landlordCards |
地主牌分发及公示的方法 |
未封装 |
showCards |
出牌的方法 |
未封装 |
doubledFunds |
炸弹倍数翻倍计算的方法 |
未封装 |
cardAlarm |
报警的方法 |
未封装 |
settleAccounts |
结算并将用户清除队列的方法 |
未封装 |
系统模块 sysModel |
mysqlObject |
数据库模块,具体方法不再罗列,这里采取封装主从库 |
已封装 |
memcacheEx |
memcached封装的模块,用于分布式集群 |
已封装 |
========================================= 每个模块中都有调用Demo,可直接使用 更新记录: 后续更新 ============2013-12-12============= 1、封装完成洗牌发牌的方法 2、将所有储存用户数据的指针转储memcached ============2013-12-11============= 1、封装用户登录验证的方法并确定socket验证方案 2、封装心跳检查等方法 3、封装用户发言和系统发言方法 3、封装在线统计方法 4、封装加入队列方法 5、封装随机匹配玩家方法 6、封装扑克牌生成方法 7、封装洗牌的方法 先放出userModel ============2013-12-10============= 1、由于封装的那个数据库操作类及其不方便使用,而且功能不强大,我想,要做就做好,所以,狠心重新封装mysqlDB类,由于懒,所以参考http://my.oschina.net/zhouguanghu/blog/32422作者进行二次封装,新增错误代码及错误提示方法,新增多库支持,新增事物多库支持,并贴上示例代码:
- #s = MysqlObject()
- #print s.getAll('us', 'select * from us_user')
- #print s.getOne('us', 'select * from us_user')
- #print s.getMany('us', 'select * from us_user',4)
- #print s.insertOne('us', "insert into us_user (user_name, user_pass, pass_rand, balance, funds_key, is_lock) values (%s, %s, %s, %s, %s, %s)", ['ddd33', '1s','2sa',5,'3df',1],1) #参数4默认1,返回新增的主键,为0时返回修改的行数
- #如果是innoDB请commit()
- #s.commit('us')
- #print s.getErrorMsg().decode('UTF-8').encode('gb2312')
- #print s.update('us', 'update us_user set user_name=%s where user_id=%s',['dddd34', 1])
- #s.commit('us')
- #print s.delete('us', 'delete from us_user where user_id=%s',[15])
- #s.commit('us')
- '''开启事务,涉及到几个库就要开启几个前缀'''
- #s.begin('us')
- #s.begin('lo')
- '''执行代码操作,用try执行,捕获异常,如果执行数据库返回值为False,那么就创建异常'''
- #......
- #try:
- # .....如果出错了,可以自定义错误
- # raise Exception('err') #抛出异常
- # .....如果没有出现异常,则提交
- # s.commit('us')
- # s.commit('lo')
- # return True #根据需要附上返回值
- #except Exception, e:
- # ......返回自定义错误
- # s.rollback('us') #回滚
- # s.rollback('lo')
复制代码
2、由于大鸡蛋没封装cursorclass、autocommit等参数和方法,所以我没办法取返回数据的key值以及设置事务模式,很是无奈,好了,话不多说,先贴上更新的sysModel,此次更新后,userModel貌似就不能用了,必须改,好在我没有上传,哈哈 3、重新封装用户注册类,其实我有PHP版的注册登录验证机制,但是为了学习嘛,就在这里封装了。 ============2013-12-3============= 申明:没有在日记中贴太多的代码,是因为: 第一、代码太多,贴不过来,压缩包都有,无需画蛇添足 第二、上面有各模块的命名及功能说明,对照文件中的各个模块可以很清晰的看到代码的设计思路以及流程走向,这些,说起来太麻烦,部分代码也体现不出来,索性要么初学者直接调用,要么进阶者逐行读代码理解,甚至可以自己修改封装。也算设置一个门槛,因为在我看来,这些都是摸索路程,我给你们提供一个方向,你们自行去走适合自己的路。同时,这也是我自己参考的笔记,所以,就不贴太多代码了,只是一些需要说明的,我会贴出来 ============2013-12-2============= 因前几日事情繁多,故暂停更新,将于本日起重新更新 1、修正sysModel中的部分导致异常的BUG 2、修改query方法抛出异常时的返回值为-1(原为False,由于外键返回的IDENTITY为0,会与False冲突,故如此改动) 3、新增事务模拟函数,支持InnolDB, MyISAM 4、新增事务回滚函数uncommit() #目前暂只支持insert回滚,后续加上 sysModel暂时存在问题,主要是事务模块,故暂不同步文件压缩包到本贴 5、完成用户注册模块
============2013-11-26============= 1、重新封装MemcacheEx模块,集成了memcache for firefly自带的功能,如get_multi,并新增hostname参数 2、合并MemcacheEx与MysqlObject为sysModel模块 3、MysqlObject支持多库,config.json增加多库配置 4、创建数据库表,上传数据库备份的SQL文件 5、MysqlObject扩展了方法调用参数,分离sql语句与用户参数组合成tuple,用execute占位符的方式避免sql注入 由于我时间不多,所以没从webpy的数据库层里面抠代码出来自己改个sqlbuilder, 这里感谢Lany大神的指导
- #mysql
- obj = MysqlObject()
- print obj.getOne('us', ('select * from us_user', [])) #无参数情况下
- print obj.getOne('us',('select * from us_user where user_name=?', ['ddd33']))
- #有参数情况下,这里用?还是%s根据你mysqldb默认格式来定,我的默认格式是format,所以我用%s
复制代码
... 6、更新依赖关系,userModel等其他模块依赖sysModel ============2013-11-25============= 1、mysqlObject封装在学习笔记一基础上分离长连接模式,使mysql连接方式分离为主从库连接模式 2、memcacheEx封装原有memcache并加入分布式集群的调用方式
附件已上传
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
<ignore_js_op> |