最后一战(LastBattle)服务器源码分析2——中心服务器(CentralServer)

本文详细分析了《最后一战》(LastBattle)的中心服务器CS,涵盖房间匹配逻辑、场景服战斗控制、邮件系统运作、玩家实体管理、Kernel核心功能以及数据存储与缓存机制。房间匹配通过定时器实现,选择负载最小的场景服创建战斗。场景服负责战斗及玩家管理,邮件系统处理发送、提取和删除操作。玩家实体在上线时创建,下线时存档。Kernel管理服务器配置、连接、交互消息及定时任务。
摘要由CSDN通过智能技术生成

中心服CS:

作为游戏的核心服务器,中心服承担着除战斗外的所有游戏功能,包括房间匹配,场景服(SS)战斗及玩家的管理控制,邮件系统,玩家实体创建和管理,Kernel核心管理,数据存储与缓存,游戏日志生成等。
中心服务器结构

房间匹配:
class CCSMatchMgr
{
   
public:
    ...
    INT32 TeamStartMatch(IMatchPlayer* pPlayer);//开始匹配
    bool TeamStopMatch(IMatchPlayer* pPlayer);//结束匹配
    void Update(int64_t tUTCMilsec,int64_t tTickSpan);
    ...
private:
    map<UINT32,ICSMatchList*>   mAllMatchList[eMatchType_Total];//不同类型的匹配列表
    map<UINT32,CCSMatchTeam*>   mAllTeamMap;//记录所有正在匹配的队伍信息
};

该类是CCSBattleMgr的成员变量,在服务器启动时创建,并在一个定时器中周期性的调用刷新函数:

  void CCSMatchMgr::Update(int64_t tUTCMilsec,int64_t tTickSpan)

该刷新函数中根据mAllMatchList数组中存储的客户端发来的不同类型的开始匹配的玩家数据,调用各自类型的update函数进行匹配。最终在匹配函数:

  void CCSBattleMgr::OnBattleMached(CCSUserListMap& pList,map<UINT32,UINT32>* aiRobots,...);

中,根据函数

  ICSSSInfo* CCSKernel::GetMiniBattleNumSS();

选取负载最小的SS,并根据该SS的id在CS上创建CCSBattle来管理本场战斗,然后将本次匹配的玩家及机器人数据通过消息eMsgToSSFromCS_CreateBattle发送给该SS,SS接收到信息后开始创建CSSBattle,加载地图信息,设置玩家和AI信息,创建玩家CSSUser等,然后通知客户端开启战斗。

场景服(SS)战斗及玩家的管理控制:
//战场信息类
class CCSBattle
{
   
private:
    ...
    BattleType             m_Type; //战场类型
    EBattleMatchType       m_MatchType;//匹配类型
    map<UINT64,CCSUser*>   m_UserMap;//玩家数据
    map<UINT32,SAIRobot*>  m_AIRobots;//机器人数据
    SMapLogicCfg*          m_MapLogicCfg;//地图配置
public:
    ...
    //游戏开始发送所有数据给场景服
    INT32 Start();
    //发送消息给客户端
    INT32 BroadcastMsgToAllUser(google::protobuf::Message& sMsg,int n32MsgID);
    //向场景服发送消息
    INT32 PostMsgToBattleSS(google::protobuf::Message& sMsg,int n32MsgID);
    INT32 PostMsgToSS_NotifyUserIsOnline(CCSUser* pUser,bool IsOnline);
    //向网关服发送消息
    INT32 PostMsgToGS_NotifyCombineUserNetInfoToSS(CCSUser* piUser,ICSSSInfo* piSSInfo);
    INT32 
花钱买来的 ,自己亲测可执行,~ 下载下来是个 txt文本,里面有 下载地址,跟密码! 这款游戏 类似王者荣耀! 客户端用 unity 4.6直接打开编译,生成exe,或者安卓APK(需要装JDK,SDK), 服务端按教程操作就可以了! 最后一战OL》是国内首款原创精品MOBA手游,是一款由前暴雪文案亲自操刀世界观,日韩专业团队打造美术场景,新加坡团队精心制作战斗音乐的旷世之作!' e9 H' Q* w: Z5 r 《最后一战OL》超快速的匹配对战、默契的团队协作给你带来意犹未尽的快感,在传统的MOBA游戏中融入了诸多创新玩法,吸附野怪技能、祭坛超级兵种、怒气超神爆发的同时多样性的英雄供你挑选!百余种装备搭配助您打造最强王者,超神不断!带上你的战友并肩协作,一起来体验《最后一战》这款引领潮流的精品手游吧!2 n" r$ Q' |+ \; w$ A' q! ^ 本资源是完整的,可以编译进游戏的。前端采用Unity3D,可以在 Unity3D 4.0 + 以上版本编译运行,后端服务器部分采用 C++开发,需要在 VS 2010 下完成编译。数据库采用 MySQL。 最后一战经过测试,可以进游戏,搭建很简单,只要几步简单的操作就能跑起来 1、客户端打开 用的u3d 4.6版本打开的,没有发现什么问题,可以直接编译 2、服务端 首先用vs2010打开server》Allserver.sln,点击编译,编译要花点时间,编译完成后,可能会出现几个红色的文字,不用管他,暂时没发现有影响。 然后打开Server\Bin\x64\Release\dbsql\Rebuild.bat,创建数据库,在这里要编辑下Rebuild.bat里面的内容,记事本打开,然后将-uroot -p123321,改成你自己的数据库名称和密码, root改成你的数据库名称,123321改成你自己的数据库密码。+ H7 s. z7 f/ g8 Q9 V+ G 数据库创建完成后,打开server》start.bat,打开的几个窗口也会有红字的文字,不用管,暂时没发现有影响。 注意点: 1、数据库安装-》数据库安装是个难活,我在自己电脑上按了N次,没成功,总是提示联不到数据库,可能跟系统有关系,回头再研究下 2、服务端编译,vs在编译后有红色的文字,之前以为是报错,一直改,没解决,后来不管他了,直接跑,居然过了。。。。 3、修改rebuild.bat,一定要修改成你自己的数据库名字和密码,不然创建不成功。 3、编译u3d客户端,就可以进游戏了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值