逻辑服务器需要用到 LogicServerData.dll 没有源码。
通过LogicServerDataInfo.h LogicServerDataInfoManager.h 使用ida 分析LogicServerData.dll
//索引定义
typedef CMap<WORD, WORD, CGlobalLinkServerItem*, CGlobalLinkServerItem*> CMapLinkServerID;
typedef CMap<WORD, WORD, CGlobalGameServerItem *, CGlobalGameServerItem *> CMapGameServerID;
typedef CMap<DWORD, DWORD, CGlobalGameKindItem *, CGlobalGameKindItem *> CMapGameKindID;
这里链接服务器有一个单独的MAP结构,正向官方所说的。可以有多个链接服务器。上一节已经介绍过,客户端与服务器使用长连接通信。但是一个服务器长连接是有限制。通过多个链接服务器可以解决这个问题。
在协调服务器 CAttemperEngineSink.h
//获取服务
bool OnWebServerGetBestLink(VOID* pData, WORD wDataSize, DWORD dwSocketID);
这个函数是获取最佳链接服务器,均衡分配各个链接服务器负载。印证上面的说法。
头文件 LogicServerDataInfo.h LogicServerDataInfoManager.h。里面的几个基本类
CGlobalLinkServerItem CGlobalGameServerItem CGlobalGameKindItem ICLogicInfoManager ICServerUserItemManager ICManagerUserItemManager CGlobalInfoManager CServerUserItem CManagerUserItem CServerUserManager。
可以看出这些类在其他服务器。或是以前的版本中,基本都能找到相应的代码。可以拷贝过来,移植。
大部分的方法,代码是可以重用的。
部分关键的方法 使用 ida 分析。
ida解析出来了大部分方法名。
剩下的就是多一点耐心,慢慢分析了。
下面是部分源码截图
这个相对来讲不是很难。 重点是根据头文件,自己移植,实现具体功能。