原地址:http://www.9miao.com/question-15-54671.html

学习笔记一传送门
学习笔记二传送门

学习笔记三导读:
        笔记三主要就是各个模块的封装了,这里贴出各个模块一览表,封装完毕我就更新一个状态,并且补上模块说明

模块名方法名方法说明封装状态用户基础模块userModeluserLogin用于用户登陆时的方法已封装regUser注册用户的方法已封装heartCheck用户更新心跳时间的方法已封装heartCheck用户心跳检测的方法已封装fundsCheck检查资金是否异常的方法暂不封装loginUpdate登陆时更新用户登陆记录并写日志的方法暂不封装sysMsg发送系统消息的方法已封装userTalk用户在游戏中发言的方法(这里我考虑是像QQ斗地主一样固定发言防止作弊,还是不限制用户发言,个人觉得防作弊好一点)已封装日志模块logModelsysLog系统日志的方法(保存log日志的方法)暂不封装userLoginLog用户写登陆日志的方法暂不封装userActionLog用户写操作日志的方法暂不封装gameResultLog游戏结果日志的方法暂不封装rfloatLog写资金流水的方法暂不封装游戏主模块gameMainModelshowUserCount在线用户统计的方法已封装pushMessage推送消息的方法取消封装joinGameQueue加入游戏队列的方法已封装gameMatching匹配玩家并生成游戏空间,随机用户顺序的方法已封装shufflingLicensing洗牌发牌的方法,并整理排序已封装grabLandlord抢地主的方法未封装landlordCards地主牌分发及公示的方法未封装showCards出牌的方法未封装doubledFunds炸弹倍数翻倍计算的方法未封装cardAlarm报警的方法未封装settleAccounts结算并将用户清除队列的方法未封装系统模块sysModelmysqlObject数据库模块,具体方法不再罗列,这里采取封装主从库已封装memcacheExmemcached封装的模块,用于分布式集群已封装

=========================================
每个模块中都有调用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作者进行二次封装,新增错误代码及错误提示方法,新增多库支持,新增事物多库支持,并贴上示例代码:

  1. #s = MysqlObject()

  2. #print s.getAll('us', 'select * from us_user')

  3. #print s.getOne('us', 'select * from us_user')

  4. #print s.getMany('us', 'select * from us_user',4)

  5. #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时返回修改的行数

  6. #如果是innoDB请commit()

  7. #s.commit('us')

  8. #print s.getErrorMsg().decode('UTF-8').encode('gb2312')

  9. #print s.update('us', 'update us_user set user_name=%s where user_id=%s',['dddd34', 1])

  10. #s.commit('us')

  11. #print s.delete('us', 'delete from us_user where user_id=%s',[15])

  12. #s.commit('us')

  13. '''开启事务,涉及到几个库就要开启几个前缀'''

  14. #s.begin('us')

  15. #s.begin('lo')

  16. '''执行代码操作,用try执行,捕获异常,如果执行数据库返回值为False,那么就创建异常'''

  17. #......

  18. #try:

  19. #        .....如果出错了,可以自定义错误

  20. #        raise Exception('err')  #抛出异常

  21. #        .....如果没有出现异常,则提交

  22. #        s.commit('us')

  23. #        s.commit('lo')

  24. #        return True                                #根据需要附上返回值

  25. #except Exception, e:

  26. #        ......返回自定义错误

  27. #        s.rollback('us')                                #回滚

  28. #        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大神的指导

  1. #mysql

  2. obj = MysqlObject()

  3. print obj.getOne('us', ('select * from us_user', []))                #无参数情况下

  4. print obj.getOne('us',('select * from us_user where user_name=?', ['ddd33']))

  5. #有参数情况下,这里用?还是%s根据你mysqldb默认格式来定,我的默认格式是format,所以我用%s

复制代码

...
6、更新依赖关系,userModel等其他模块依赖sysModel
============2013-11-25=============
1、mysqlObject封装在学习笔记一基础上分离长连接模式,使mysql连接方式分离为主从库连接模式

2、memcacheEx封装原有memcache并加入分布式集群的调用方式

[Firefly引擎][学习笔记三][已完结]所需模块封装的更多相关文章

  1. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  2. [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯

    原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...

  3. [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室

    原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...

  4. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  5. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  6. angular学习笔记(三十一)-$location(2)

    之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...

  7. angular学习笔记(三十一)-$location(1)

    本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...

  8. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  9. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus

    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...

随机推荐

  1. 学习之spring自带缓存

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://w ...

  2. bzoj3405:[Usaco2009 Open]Grazing2 移动牛棚

    思路:首先因为要让距离尽量大,所以奶牛1一定在1号牛棚,奶牛n一定在s号牛棚,然后考虑dp. 因为总距离为s-1,然后要使长度为d的段数尽量多,那么剩下的一定就是d+1的段数,也就是s-(n-1)*d ...

  3. Junit的最简单样例:Hello world!

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3824934.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. XPOSED-LUA

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/xposed-lua/ 说明 Xposed Lua Module 是一个Xposed的模块,他有下面的优点 本 ...

  5. jquery获取iframe中的dom对象

    父窗口中操作iframe:$(window.frames["iframeChild"].document)    //假如iframe的id为iframeChild 在子窗口中操作 ...

  6. C#获取“所有用户桌面”的路径

    想用C#得到The All Users Desktop(Public\Desktop)的路径. 原来以为很简单,然而 Environment.GetFolderPath(Environment.Spe ...

  7. html 模板 swig 预编译插件 grunt-swig-precompile

    GitHub grunt-swig-precompile NPM grunt-swig-precompile 在书写前端静态页面的时候,每个页面总在书写很多重复的标签. 为了提高效率,结合 swig. ...

  8. 使用 JSONP 实现跨域通信

    简介 Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的 ...

  9. redis使用watch完成秒杀抢购功能:

    redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...

  10. php验证码的简单例子

    php随机验证码: <?php      $image_width=140;      $image_height=50;      srand(microtime()*10000);      ...