游戏服务端逻辑模块处理框架

当游戏服务端启动时,服务端会根据配置文件中的信息,加载各个游戏逻辑处理模块的动态链接库,然后调用模块的DllCreate函数对模块进行初始化。

         配置文件可以像下面这样:

ModuleCount = 30

Module1 = battlesys

Module2 = equipsys

Module3 = friendsys

Module4 = shopsys

Module5 = skilllsys

……

        

         模块中DllCreate函数的原型可能像这样:

IModule* DllCreate()

{

         return new CModule();

}

 

 

         函数的返回值是IModule接口类的指针,这个接口类是每个游戏逻辑处理模块都需要提供的,并且在每个模块中都会有个继续自IModule接口类的具体类CModule

 

返回的IModule将被保存到游戏逻辑管理类CLogicManager中。

std::map<IModule*> mapAllModule;

 

等加载完全部的模块后,就调用IModule::Init函数。伪码如下:

         foreach  IModule* p  in mapAllModule

                   p->Init((ILogicManager*)this);

 

这个时候每个模块的初始化函数都将被调用,在初始化函数中,每个模块向ILogicManager中注册自己感兴趣的消息编号,并且保存到

ILogicManagerstd::hash_multimap<MSGID,IModule*> mapMsgHandler;

 

完成初始化工作之后,每当服务端的网络模块收到消息后,会把消息传递给ILogicManager。然后ILogicManagermapMsgHandler找到相关的IModule;

 

IModule::RecvMessage(MSG* pMsg,Player* pPlayer);

 

每个模块都将在CModule:: RecvMessage中收到自己感兴趣的消息。然后可以根据MSG中的typeid生成相应的消息处理器CXXXHandler,然后处理消息.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值