ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:166.42KB ,
资源ID:7533715      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7533715.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络斗地主服务端项目文档.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络斗地主服务端项目文档.docx

1、网络斗地主服务端项目文档安卓项目组2012/01/06V1.0文档版本记录版本号修改日期作者更改说明V1.02012/01/06史进鹏文档创建0阅读说明黑色粗体 表示需要重点阅读,蓝色代表MINA框架类的方法,红色代表类名。文档分4个部分:(1)1-5牌类游戏服务端基类;(2)6-8继承第一部分基类,定义斗地主游戏服务端主要的类,并在这些类中定义了处理消息队列线程需要的方法(3)9-12定义第二部分类的数据管理 13数据库数据初始化到内存的方法类(4)服务端交互部分,14-19是MINA服务端监听接收,发送,编解码;20-23创建4个线程对交互数据的处理;24-27定义把不同的协议归成属于哪些

2、服务类,规范处理。1房间Room类(1)属性房间名称、房间类型、房间内桌子的数量、房间内的桌子列表、房间内的在线人数(2)方法构造方法:构造器默认构造获取房间名称方法参数:无 返回值:房间名称设置房间名称方法参数:房间名称 返回值:无获取房间类型方法注释:获取房间类型(如:新手场、中级场、高级随意配桌) 参数:无 返回值:房间类型设置房间类型方法参数:房间类型 返回值:无获取房间内桌子数量的方法参数:无返回值:房间内桌子的数量g设置房间内桌子数量的方法参数:桌子的数量返回值:无h获取房间内桌子列表的方法参数:无返回值:房间内桌子列表i设置房间内桌子列表的方法参数:桌子的列表返回值:无j获取房间

3、内在线人数的方法参数:无返回值:房间内的在线人数k设置房间内在线人数的方法参数:在线人数返回值:无l进入房间时添加在线人数的方法注释:进入房间添加在线人数,并且同一时间只能有一个线程执行此操作(synchroni zed 修饰)参数:无返回值:无m退出房间时减少在线人数注释:退出房间减少在线人数,并且同一时间只能有一个线程执行此操作(synchroni zed 修饰)参数:无返回值:无n自动分配到桌子方法(子类中会实现)注释:为玩家自动分配到一张桌子参数:一个玩家的对象返回值:分配到的桌子(null)2桌子Table类(1)属性桌子所属房间ID、桌子名称(现在没用后面可能会用到)、桌子ID、桌

4、子当前用户数、桌子允许的最大用户数、桌子状态、用户列表(考虑用户数量不确定性用vector)、消息队列(2)方法构造方法:构造器默认构造设置桌子所属房间的方法注释:就是设置所在房间的房间类型,是新手场,中级场还是其他类型房间。返回值:无获取桌子所属房间的方法注释:可在斗地主桌子类的换桌方法中使用,使玩家只能在同一房间内换桌 参数:无 返回值:得到桌子所属房间的ID设置桌子名称的方法注释:在初始化桌子信息时把桌子名称设置成桌子 ID的字符串参数:桌子名称 返回值:无获取桌子名称的方法参数:无 返回值:得到桌子名称设置桌子ID的方法返回值:无获取桌子ID的方法注释:用于在玩家成功进入桌子后,发送消

5、息告诉玩家进入的是几号桌子 参数:无 返回值:得到桌子ID设置桌子用户数的方法注释:只为当玩家退出或者进入桌子时要设置一下桌子的当前用户数,私有方法。进入和退出桌子的方法已经加了线程保护synchronized,所以此方法就不用加线程保护。参数:桌子用户数 返回值:无i获取桌子用户数的方法注释:在斗地主桌子类中给玩家找桌子的方法中会用到,主要配合方法 k判断当前桌子玩家数有没有满参数:无 返回值:得到桌子用户数j设置桌子允许最大用户数的方法注释:在初始化桌子信息时,可根据游戏不同传入不同的参数 参数:桌子允许最大用户数 返回值:无k获取桌子允许最大用户数的方法注释:主要用来判断当前桌子玩家数有

6、没有满 参数:无 返回值:得到桌子允许最大用户数I设置桌子状态的方法注释:如准备中、叫分中、玩牌中 参数:桌子的状态 返回值:无获取桌子状态的方法参数:无 返回值:得到桌子的状态设置桌子用户列表的方法注释:在桌子初始化时,给每个桌子加一个包含三个空对象的用户列表 参数:桌子的用户列表 返回值:无获取桌子用户列表的方法注释:得到一个桌子的用户列表,便于遍历桌子中的每个玩家 参数:无 返回值:得到桌子的用户列表设置桌子消息队列的方法注释:初始化桌子信息时,每个桌子对象都会 new 个消息队列,所以这个方法一般不会用到 参数:桌子的消息队列 返回值:无获取桌子消息队列的方法注释:获取到桌子的消息队列

7、,可使用队列的 add方法添加消息。参数:无返回值:得到桌子的消息队列将收到的消息加入到桌子的消息队列中注释:将消息加入到桌子的消息队列中,会被处理所有桌子消息队列的线程 MessageThread 处理参数:消息类型、消息对象返回值:无实现过程:1创建一个消息队列单元类型 MessageUnit 的对象unit2把参数消息类型和消息对象打包到 unit中3调用方法q得到消息队列对象,用消息队列对象的添加方法,把 unit添加到消息队列中给桌子的玩家列表中的每个玩家发送消息的方法参数:消息类型、消息对象返回值:无玩家进入桌子的处理(同一时刻只能有一个线程执行此操作)注释:被斗地主房间类中找桌子

8、的方法调用(找桌子的方法是先找有2人的桌子,再找有1人的桌子,最后找无人的桌子)参数:玩家对象返回值:是否进入成功实现过程:传入一个玩家对象,判断桌子是否有空位 (被找桌子的方法调用时此判断无用),有空位则遍历桌子用户列表中为空的玩家给替换掉进入成功,否则进入失败玩家退出桌子的处理(同一时刻只能有一个线程执行此操作)注释:玩家退出桌子后对桌子的处理参数:玩家对象返回值:无实现过程:遍历桌子的玩家列表,取得每个玩家的用户名与参数的用户名比较,把相同的置空,减少桌子的用户数进入桌子所属的房间注释:玩家进入桌子所属的房间后的处理参数:无返回值:无实现过程:通过方法b获取得到桌子所属的房间ID,来增加

9、当前房间的人数退出桌子所属的房间:注释:玩家退出桌子所属的房间后的处理返回值:无 实现过程:通过方法b获取得到桌子所属的房间ID,来减少当前房间的人数并且移除此用户开始游戏:参数:无 返回值:无结束游戏:参数:无 返回值:无同步信息:参数:无 返回值:nullaa超时处理:参数:无 返回值:无3玩家Player类属性用户名、玩家交互、所属的桌子(可能没有桌子),用户ID,昵称(2)方法a构造方法:构造器默认构造b发送给当前玩家消息的方法注释:在子类中会被重载,暂无定义 参数:无 返回值:无设置当前用户名的方法注释:设置当前用户名返回值:无获取当前用户名的方法注释:获取当前用户名 参数:无 返回

10、值:用户名设置当前玩家交互的方法注释:设置当前玩家的交互 参数:用户交互实例(被服务端用来识别用户) 返回值:无获取当前用户交互的方法注释:获取当前玩家交互实例 参数:无 返回值:当前玩家交互实例设置当前用户所在的桌子方法注释:设置当前用户所在的桌子 参数:当前用户所在的桌子 返回值:无获取当前用户所在的桌子的方法注释:获取当前用户所在的桌子 参数:无 返回值:用户所在的桌子i设置当前用户ID的方法注释:标记客户端,服务端数据也应该以此为用户信息表的主键 参数:当前用户ID 返回值:无j获取当前用户ID的方法注释:标记客户端,服务端数据也应该以此为用户信息表的主键 参数:无返回值:用户IDk设

11、置当前用户昵称的方法参数:当前用户ID 返回值:无l获取当前用户昵称的方法参数:无 返回值:用户ID4牌Card类属性面值、花色、权值(2)方法构造方法1注释:初始化牌的面值、花色和权值(权值默认初始化为1)返回值:无构造方法2注释:初始化牌的面值、花色和权值 (按传入的参数初始化权值)参数:数值、花色、权值 返回值:无获取牌面值的方法注释:获取牌的面值 参数:无 返回值:面值获取牌花色的方法注释:获取牌的花色 参数:无 返回值:花色获取牌权值的方法注释:获取牌的权值 参数:无返回值:权值f设置牌权值的方法注释:设置牌的权值 参数:权值 返回值:无5 牌组 CardArray 类属性牌组中牌的

12、张数、牌对象的数组、牌组的权值(2)方法a构造方法1参数:牌组中牌的张数、牌对象的数组 返回值:无构造方法2注释:初始化牌的张数、牌对象的数组、(按传入的参数初始化牌组的权值)参数:牌组中牌的张数、牌对象的数组、 返回值:无构造方法3返回值:无构造方法4参数:无 返回值:无获取牌组中牌的张数方法注释:获取牌组中牌的张数 参数:无 返回值:牌组中牌的张数获取一个排序后的全部数值数组1注释:获取一个排序后的全部数值数组(默认按照面值递增排序) 参数:无 返回值:一个排序后的牌组f获取一个排序后的全部数值数组 2注释:获取一个排序后的全部数值数组(按照传入参数方式排序) 参数:排序方式(面值正排序1

13、、面值逆排序2、权值大小正排序3或权值大小逆排序4) 返回值:一个排序后的数值数组g添加牌对象1注释:添加牌对象返回值:一个添加后的牌组h添加牌对象2注释:添加牌对象的数组 参数:牌对象的数组 返回值:一个添加后的牌组i删除牌对象1注释:删除牌对象返回值:删除后的数值数组j删除牌对象2注释:删除牌对象的数组 参数:牌对象的数组 返回值:删除后的数值数组k比较面值是否相同1注释:比较数值是否相同返回值:是否相同I比较面值是否相同2注释:比较数值是否相同 参数:牌对象的数组 返回值:是否相同m比较数值是否相同3注释:比较数值是否相同 参数:牌组类的对象 返回值:是否相同比较数值是否包含1注释:比较

14、牌对象数值是否包含返回值:是否包含比较数值是否包含2注释:比较牌对象的数组的数值是否包含 参数:牌对象的数组 返回值:是否包含比较数值是否包含3注释:比较牌类对象的数值是否包含 参数:牌组对象 返回值:是否包含是否清一色注释:比较牌对象是否相同花色 参数:无 返回值:是、否获取牌组对象的权值注释:获取牌组对象的权值 参数:无 返回值:牌组对象的权值设置牌组对象的权值注释:设置牌组对象的权值 参数:无 返回值:无比较牌组对象权值的大小注释:比较牌组对象权值的大小 参数:要比较的牌组对象的权值返回值:1 (大于)、0 (等于)、-1 (小于)/斗地主游戏框架6斗地主房间RoomDdz3 类继承Ro

15、om类(1)属性房间底注(2)方法构造方法:构造器默认构造设置斗地主房间底注的方法注释:设置斗地主房间底注 参数:要设置的底注的值 返回值:无获取斗地主房间底注的方法注释:获取斗地主房间底注 参数:无 返回值:房间底注重写父类自动分配桌子的方法注释:给玩家找到一个有位置的桌子,先找已经有 2人的桌子,如果没有再找已经有1人的桌子,如果没有再找已经有0人的桌子,如果没有则返回null 参数:玩家对象 返回值:分配到的桌子 实现过程:调用找桌子方法找桌子的方法参数:桌子的人数,玩家对象 返回值:找到的桌子7斗地主桌子TableDdz3类继承Table类(1)属性桌子底注、倍数、谁是地主、最高分数、

16、叫分次数当前操作人、当前出的牌、牌型、用户的牌(Ma P)已准备的人数、叫分人、上一轮出的牌(Ma P)、炸弹春天、时间、时间限制、不出次数(2)方法构造方法注释:初始化属性用户的牌、上一轮出的牌为 用户名,牌组初始化倍数默认为1.准备游戏注释:线程 MessageThread处理准备游戏时调用此函数参数:玩家状态,玩家对象 返回值:无叫分参数:叫分的消息包,玩家对象 返回值:无不叫分注释:线程MessageThread 处理不叫分时调用此函数 参数:叫分的消息包,玩家对象 返回值:无出牌注释:线程MessageThread 处理出牌时调用此函数 参数:出牌的消息包,玩家对象 返回值:无换桌注

17、释:线程MessageThread 处理换桌时调用此函数 参数:快速游戏的消息包,玩家对象 返回值:无托管/取消托管注释:线程MessageThread 处理托管/取消托管时调用此函数 参数:托管的消息包,玩家对象 返回值:无退出游戏注释:线程MessageThread 处理退出游戏时调用此函数参数:退出游戏的消息包,玩家对象 返回值:无i打牌结果处理注释:线程ResultThread处理打牌结果时调用此函数 参数:斗地主玩家对象,玩家列表,斗地主桌子对象 返回值:无j计算金币注释:线程ResultThread处理打牌结果时调用此函数 参数:斗地主桌子对象,用户名,结果消息包,是否赢,是否是地

18、主 返回值:结果消息包k开始游戏注释:线程ResultThread处理打牌结果时调用此函数,包括调用洗牌发牌,随机叫分方法 参数:无 返回值:无l游戏结束注释:重置斗地主桌子属性和玩家列表 参数:无 返回值:无m离开游戏参数:玩家对象 返回值:无n斗地主桌子属性的获取和设置方法8斗地主玩家PlayerDdz3 类继承Player类属性金币数、角色名称、胜数、输数、状态、得分、叫分、是否是地主、是否准备、打牌超时次数、操作时间、托管、打牌次数(2)方法构造方法:构造器默认构造发送消息给自己参数:消息类型,消息对象返回值:无斗地主玩家属性的获取和设置/游戏数据9数据库连接池管理类 DbManage

19、r创建连接数据库的方法属性数据源(2)方法初始化注释:读取配置文件,获取数据库的位置,连接用户名和密码等信息,并加载到数据源。参数:无 返回值:无加载配置信息的方法注释:把配置信息加载到数据源 参数:要加载的信息实例 返回值:无同步配置信息的方法注释:如果数据源为空,就重新加载 参数:无 返回值:无修改保存的方法注释:修改数据库内容并保存 参数:数据库名,要修改内容对象 返回值:修改结果获取与数据库的连接实例的方法参数:无 返回值:得到数据库连接的实例关闭与数据库的连接实例的方法参数:数据库连接的实例 返回值:无10房间数据库管理方法类 RoomDao :(1)属性:无(2)方法:a加载数据库

20、中房间信息的方法注释:根据游戏类型获取数据库中的房间信息加载到每个新建的房间对象中 参数:游戏类型(三人斗地主或者其他) 返回值:加载好的房间列表b加载数据库中用户的信息注释:根据用户名获取数据库中的用户信息加载到每个新建的用户对象中返回值:加载好的用户对象11任务数据库管理方法类TaskDao(1)属性:任务数据库管理方法类实例(2)方法:构造方法:空获取任务数据库管理方法类实例参数:无 返回值:得到任务数据库管理方法类实例新建一个任务数据库管理方法类实例参数:无 返回值:无获取任务列表参数:无 返回值:任务列表检测任务是否完成参数:任务类型,用户名返回值:完成或未完成查询用户的任务列表参数

21、:任务类型,用户名返回值:完成或未完成参数:一组用户名更新任务列表参数:打牌结果处理包实例返回值:无属性:无方法:a添加一个用户参数:用户信息包实例 返回值:无b验证用户是否注册(暂时不用)参数:用户信息包实例 返回值:存在或不存在c用户登录验证(暂时不用)包括金币,输数,赢数,等级和网名注释:在登录成功后就新建个用户信息包来保存当前数据库中的用户信息。参数:用户信息包实例 返回值:用户详细信息实例13数据库数据初始化到内存的方法类(1)属性定义一个房间列表的引用(用来只想新建的房间列表)roomList(2)方法:a、初始化房间到内存方法注释:初始化房间信息,桌子信息和每个桌子一个空用户列表

22、 参数:无 返回值:无 实现过程:1从数据库中加载出房间列表实例给被 roomList弓I用2根据房间信息新建桌子对象并加入到一个桌子列表中, set到房间对象中 3新建桌子对象时新建一个用户对象为空的用户列表给桌子对象b、设置房间列表引用的方法参数:房间列表引用 返回值:无C、获取房间列表引用的方法参数:无 返回值:房间列表引用/MINA 交互框架14服务启动Server类(1)属性端口号(2)方法:a构造方法:构造器默认构造b初始化服务端配置方法:bindServer注释:初始化服务端配置 参数:无 返回值:无 实现过程:1初始化了服务端的TCP/IP的基于NIO的套接字 2然后调用IoS

23、essionConfig设置读取数据的缓冲区大小 3读写通道均在10秒内无任何操作就进入空闲状态4使用MINA为我们提供的编解码器工厂来对字符串进行编解码处理 ,组装编解码器En coderBea n BaseMessageE ncoder BaseMessageDecoder 三个类5注册ServerHa ndler 处理die nt传过来的数据 6绑定端口号c服务端启动的入口函数:main注释:服务端启动 参数:输入行参数args 返回值:无实现过程:15编码包类EncoderBean 类发送消息时将要发送的信息放入 En coderBea n 类对象中(1)属性编码类型(有默认编码类型)

24、、要编码的内容、自定义编码类型(2)方法构造方法:构造器默认构造获取编码类型的方法:注释:获取编码类型 参数:无 返回值:编码类型设置编码类型的方法:注释:设置编码类型 参数:编码类型 返回值:无d获取要编码内容的方法:注释:获取要编码的内容 参数:无 返回值:编码的内容e设置要编码内容的方法:注释:设置要编码的内容 参数:编码的内容 返回值:无f获取自定义编码类型的方法:注释:获取自定义编码类型 参数:无 返回值:自定义编码类型g设置自定义编码类型的方法:注释:设置自定义编码类型 参数:编码类型 返回值:编码类型16编码打包方法类BaseMessageEncoder 类发送消息写入缓冲区实例

25、之后将调用此类中的 encode函数(1)属性:无(2)方法:a构造方法:构造器默认构造b 编码方法encode :注释:把写入到缓冲loBuffer中的编码包类对象 编码并发送参数:session实例、编码包对象、encode输出方法类对象返回值:无17 解码方法类 BaseMessageDecoder 类收到client数据后调用此类中的decode方法解包(1)属性:定义一个保存在IoSession中的对象的键值(2)方法:a构造方法:构造器默认构造b判断是否可解码的方法:decodable注释:是否可解码 参数:当前session实例,输入缓冲buffer实例 返回值:是否可解码c解码

26、的方法:decode注释:对收到的数据解码 参数:session实例,输入缓冲buffer实例,decode输出方法类实例 返回值:解码结果(解码完成、还需要数据)18服务端处理数据ServerHandler 类(1)属性:无(2)方法:构造函数注释:注册StringHandler 处理client传过来的数据 参数:无发送消息的方法:sendBeanMsg注释:把要发送的消息实例和协议传入,然后发送 参数:session实例,协议值,消息对象 返回值:无 实现过程:1创建数据包PackData类的对象 2把传入的参数协议值和消息对象set到packdata对象中 3调用方法发送消息方法写入I

27、oBuffer缓冲区发送消息方法:sendMsg注释:把消息对象参数解释成json的String,再由参数session对象的write方法写入缓冲区,框架会调用enconde函数将缓 冲区内的buffer编码打包并发送。参数:session实例,消息对象 返回值:无 实现过程:1创建编码对象bean 2把消息对象参数解释成json的String,打包到编码对象bean中 3再由参数session对象的write方法把bean写入缓冲区,由框架调用encode编码发送。19服务端处理数据StringHandler 类(1)属性:用户服务类对象,房间服务类对象,桌子服务类对象,聊天服务类对象注释

28、:目前将接收到的数据分成这 4类来处理,用户服务类单独提出来提供测试使用的注册和登录服务,房间服务类单独提出来提供测试使用的游戏大厅的服务(2)方法:a处理客户端发来的数据handleMessage注释:客户端发来数据经解码后由 ServerHa ndler发过来,此功能就是从数据中找到消息类型(即协议),根据不同的数据类型执行对应的操作。参数:当前交互实例,消息实例 返回值:无实现过程:把传过来的json型String对象转成数据包类型 PackData类对象 使用数据包PackData类的获取数据类型的方法得到数据类型 根据不同的数据类型选择不同的执行方法/游戏交互数据处理20 心跳线程

29、HeartBeatThread 类(1)属性:无(2)方法:a构造函数:构造器默认构造b线程运行函数:注释:客户端会持续发送心跳包,服务端接到解码处理后会为此交互设置一个时间点 (查看StringHandler ),线程反复的把此交互的最新的时间点和当前时间比较,超时则发送消息告诉桌子此用户已掉线并删除此用户(这个操作还需完善)参数:无 返回值:无21计时线程CounterThread 类(1)属性:定义一个房间列表的引用指向已经初始化的房间列表的实例(2)方法:a构造函数:构造器默认构造b线程运行函数:注释:循环遍历每个房间的每张桌子的状态,针对每种状态做计时处理。准备中状态 (默认),踢出超时玩家;叫分中状态,超时提示下家叫分;玩牌中状态超时一次自动出牌,超时多次托管出牌。参数:无 返回值:无c处理准备中桌子的方法:注释:把进入桌子准备中超时的玩家踢出22处理桌子消息队列线程 MessageThread 类(1)属性:无(2)方法:a构造函数:构造器默认构造b线程运行函数:注释:遍历每个房间的每个桌子的消息队列,根据消息类型做不同处理 参数:无 返回值:无23处理显示结果线程ResultThr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1