[Firefly引擎][学习笔记三][已完结]所需模块封装
原地址: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作者进行二次封装,新增错误代码及错误提示方法,新增多库支持,新增事物多库支持,并贴上示例代码:
#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并加入分布式集群的调用方式
[Firefly引擎][学习笔记三][已完结]所需模块封装的更多相关文章
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯
原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...
- [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- muduo网络库学习笔记(三)TimerQueue定时器队列
目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...
随机推荐
- Android第三方授权(新浪微博篇)
Android第三方认证新浪微博,相对微信,也比较简单,并且sina给了一个sdk和sdkdemo,这个demo封装了许多,但是自己不准备记录这个demo,而是直接使用sdk 同样去sina官方下载s ...
- 第六十三篇、runtime实现归解档
#import <objc/runtime.h> #import <objc/message.h> @implementation HDFArchiveModel - (voi ...
- 第二十八篇、自定义的UITableViewCell上有图片需要显示,要求网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图
1)SDWebImage会自动帮助开发者缓存图片(包括内存缓存,沙盒缓存),所以我们需要设置用户在WiFi环境下下载的高清图,下次在蜂窝网络状态下打开应用也应显示高清图,而不是去下载缩略图. 2)许多 ...
- 类的构造器[constructor]_C#
类的构造器(constructor): 1. 先看两个类定义: class A{ } 相当于: class A: object { Public A ( ) : base( ) { } ...
- .Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- javascript笔记——js面试问题
1:javascript中的变量提升(先使用再声明,js中的函数也存在函数提升) 2:js中的事件捕获和事件冒泡(是两个相反的过程) 3:js中的动画队列(比如animate动画没有在点击的时候阻止正 ...
- feature.shape和feature.shapecopy的区别
以前在写AE代码的时候也没有注意到feature.shape和feature.shapecopy的区别,觉得两者也差不多: 今天写入库程序才明白过来. 如果取feature.shape,则得到的是该要 ...
- linux电源管理系列(一)
本系列将逐步介绍linux电源管理相关的知识,涉及到常见电源管理机制.linux电源管理机制.linux驱动中有关电源管理的相关接口.内核文档中关于Linux电源管理架构文档的分析.以下将以此来介绍相 ...
- 输入与enter
#include<iostream> using namespace std; int main() { char a,b,c; while(scanf("%c%c%c" ...
- Linux定时任务crontab每三秒执行一次shell
第一种方法:当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下: cat kick.sh #!/bin/bash while : ;do /home/somedir/scrip ...