查看: 261|回复: 2

棋牌游戏服务器架构: 详细设计(二) 应用层设计(2)

[复制链接]

8

主题

36

帖子

220

积分

vip会员

Rank: 1

积分
220
发表于 2020-3-27 15:58:03 | 显示全部楼层 |阅读模式
3  LogServer详细设计

      LogServer的实现比较简单,下面是其结构图

棋牌游戏服务器架构: 详细设计(二) 应用层设计(2)

图4 LogServer结构图

      LogServer从IController继承下来,它接收玩家核查游戏过程的请求,并将其转发给LogFetcher处理,处理完成后,将结果返回给玩家。

      LogFetcher实现了IModel, 它的任务很简单,就是去数据库取得游戏过程的日志。

4  Room Server 详细设计

      RoomServer是最重要的一类Server,玩家的大多数操作都由它来响应,其结构图如图5所示。

棋牌游戏服务器架构: 详细设计(二) 应用层设计(2)

图5 RoomServer结构图

      UserManager继承自IModel, 主要任务是管理在线玩家,RoomController在接收到玩家进入房间的请求后,就会根据玩家的的用户名和密码从UserInfoDB中加载该玩家的详细信息,生成一个UserItem, 加入在线队列。UserManager同时还会维护一个离线队列,存储那些请求离线或者掉线的玩家。

      RoomController实现了IController接口。它主要有以下几个功能:

      1) 将进入房间的请求交和UserManager处理.

      2) 启动时通过CenterSocket向CenterServer注册,关闭时从其中注销,同时定时通过CenterSocket从CenterServer取回游戏列表和房间信息(由于空间问题,图中没有画出来,基本和LogonServer差不多)。

      3) 将游戏相关的请求转交给TableMgr处理.

      4) 处理聊天及管理请求。

       TableMgr管理着这个房间里的桌子。而Table则是处理公共棋牌游戏逻辑的地方。主要包括找椅子坐下,离开等。而具体地游戏命令比如德州扑克的加注等会由Table转发给GameModule进行处理。处理结果由RoomController返回给玩家。

5  Game Module详细设计

      这里以德州扑克为例,来说明一个游戏的逻辑的结构,


棋牌游戏服务器架构: 详细设计(二) 应用层设计(2)

图6 德州扑克游戏模块结构

      这里虽然给出的是德州扑克的结构图,但是其他游戏也有类似的结构。

      每一个游戏模块都必须要实现两个接口ITableObserver,游戏的主要逻辑就在放在这里面,因为桌子会将玩家的操作信息转化以后传递过来,所以这里是处理洗牌,发牌,玩家投注处理的最佳场所。另外一个必须实现的接口是IGameServiceMgr,这个接口是游戏模块暴露给桌子的工厂接口,桌子通过它才能创建出TexasPokerTableObserver。

      IGameServiceMgr中方法说明:

      1) CreateTableObserver  创建游戏逻辑处理的实现,这里会创建并返回TexasPokerTableObserver。

      2) GetGameAttrib  返回游戏的属性,主要包括: 游戏的名称 ,游戏描述,游戏模块的名称,客户端模块名称,游戏数据库名称等

      3) RectifyRoomOption 由于一些游戏对房间有特殊要求,所以RoomServer需要调用这个接口调整房间的一些设置

      4) CreateAndroidUser 创建机器人的监听者, 其角色相当于现实中的玩家。

      TexasPokerRule主要封装了德州扑克的一些基本规则,如果选出最大牌型、比较牌型的大小,洗牌,找出赢家等。

回复

使用道具 举报

0

主题

18

帖子

6万

积分

赞助会员永久

Rank: 1

积分
60149
发表于 2020-4-5 19:07:43 | 显示全部楼层
路过看看楼主
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部