资源描述:
《kbengine源代码读 v0.0.1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于kbengine0.4.20MMOG服务端是一种高品质的工程项目,品读开源的kbe是一种乐趣。本文档我带童鞋们一起领略一下。囿于我知识面和经验方面所限,文中所述之处难免有错误存在,还请读童鞋们睁大慧眼,如果你发现错误,可以电邮至shawhen2012@hotmail.com。(因为我个人懒散或者时间仓促的关系,这个文档的排版有点小乱。。。)其他牛逼哄哄的前言就不说了。从理论上来讲,我们阅读一份源代码,首先应该基于现有的文档从整体上把握项目的架构之后再庖丁解牛一般地细分阅读,不过在我写这个文档的现在,我暂时没发现这样的文档,所以我就按照我自己的阅读顺序从而编排这个文档的内容。从已有
2、的文档可知(我得假设你已经大致看完了kbe官网的现有文档),kbe由几个组件共同协作,所以我们先看看组件们:各个组件被设计为独立的app,使用网络通信进行协作。C++程序自然是从main函数开始。看起来似乎所有的组件都有一个这样的宏(KBENGINE_MAIN)来包裹main函数intKBENGINE_MAIN(intargc,char*argv[]){ENGINE_COMPONENT_INFO&info=g_kbeSrvConfig.getXXX();returnkbeMainT(argc,argv,YYY,info.externalPorts_min,info.exte
3、rnalPorts_max,info.externalInterface,0,info.internalInterface);}这个宏展开是这样子:kbeMain(intargc,char*argv[]);intmain(intargc,char*argv[]){loadConfig();g_componentID=genUUID64();parseMainCommandArgs(argc,argv);chardumpname[MAX_BUF]={0};kbe_snprintf(dumpname,MAX_BUF,"%"PRAppID,g_componentID);KB
4、Engine::exception::installCrashHandler(1,dumpname);intretcode=-1;THREAD_TRY_EXECUTION;retcode=kbeMain(argc,argv);THREAD_HANDLE_CRASH;returnretcode;}稍微整理一下之后很像是这个样子:intkbeMain(intargc,char*argv[]);intmain(intargc,char*argv[]){loadConfig();g_componentID=genUUID64();parseMainCommandArgs(arg
5、c,argv);chardumpname[MAX_BUF]={0};kbe_snprintf(dumpname,MAX_BUF,"%"PRAppID,g_componentID);KBEngine::exception::installCrashHandler(1,dumpname);intretcode=-1;THREAD_TRY_EXECUTION;retcode=kbeMain(argc,argv);THREAD_HANDLE_CRASH;return(retcode);}intkbeMain(intargc,char*argv[]){ENGINE_COMPONENT_INFO
6、&info=g_kbeSrvConfig.getXXX();returnkbeMainT(argc,argv,YYY,info.externalPorts_min,info.externalPorts_max,info.externalInterface,0,info.internalInterface);}嗯。。。基本可以理解为每个组件的main函数流程都是一样的,只是在特化kbeMainT时所给参数不一样。我们跟着main函数的loadConfig进去看看(kbemain.h)inlinevoidloadConfig(){Resmgr::getSingleton().i
7、nitialize();//"../../res/server/kbengine_defs.xml"g_kbeSrvConfig.loadConfig("server/kbengine_defs.xml");//"../../../assets/res/server/kbengine.xml"g_kbeSrvConfig.loadConfig("server/kbengine.xml");}在serverconfig.h中可以看到这样的代码:#define