云计算百科
云计算领域专业知识百科平台

【游戏框架】多进程服务器

架构图

gateway

  • engineadapter
  • internalcomm
  • networkpackstat
  • gatewaymodule

engineadapter

主要工作是封装调用了几个库的一些功能,提供接口给外部使用。

– 里面调用到的封装的库有:IConfigModule、IGameModule、INetworkModule、IClockModule、ILogModule。
– 提供对外的接口有:NetListen()、NetConnect()、NetSend()、NetDisconnect()、GetLogModule(),这些接口实际用到的是m_network模块的方法。

internalcomm

主要工作是内部服务间的网络接口封装。NetListen/NetConnect/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。

networkpackstat

主要工作是

– 对外接口Init、Update、Stat、CheckMsgSize
– 维护m_pack_list,网络包列表,每个网络包状态
– m_last_check_time最后检查时间

gatewaymodule

主要工作是封装了本模块的一些方法,方法主要工作:

– ① 提供接口分别连接到chatserver、loginserver、globalserver、logicserver、和多个client(m_user_list)。
– ② 注册回调方法,**`<font style="color:#DF2A3F;">`收到客户端网络连接后(ServerNetworkCallback)`</font>`**

m_network_callback = new ServerNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class ServerNetworkCallback : public IEngineNetCallback
{
public:
ServerNetworkCallback(GatewayModule *gateway):m_gateway(gateway), m_cur_connect_num(0){}
virtual ~ServerNetworkCallback(){}
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:维护客户端连接(m_user_list)。
* **OnRecv()**:OnRecvUserMsg(),根据协议内容,断开连接,将消息转发给chatserver/loginserver/globalserver/logicserver。
* **OnDisconnect()**:客户端断开连接,m_user_list维护一下。
* **OnConnect()**:空。
– ③ 注册回调方法,**`<font style="color:#DF2A3F;">`收到内部网络连接后(ServerInternalNetCallback)`</font>`**

m_internal_network_callback = new ServerInternalNetCallback(this);
m_internal_network->RegisterCallback(m_internal_network_callback);

class ServerInternalNetCallback : public IEngineNetCallback
{
public:
ServerInternalNetCallback(GatewayModule *gateway):m_gateway(gateway), m_reconnet_login_handle(1){}
virtual ~ServerInternalNetCallback(){}
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:维护内部服务连接(m_gs_list、m_login_server_id、m_chat_server_id、m_global_server_id)。
* **OnRecv()**:OnRecvGSMsg根据协议内容,是否单发、多发、断开连接、检查等,OnRecvSend/OnRecvMulSend/OnRecvSendAll/OnRecvDisconnect/OnHasCheck。
* **OnDisconnect()**:内部服务连接断开,维护下m_user_list/m_login_server_id/m_chat_server_id/m_global_server_id,置空为-1。
* **OnConnect()**:维护下m_user_list/m_login_server_id/m_chat_server_id/m_global_server_id。

logicserver

  • engineadapter
  • internalcomm
  • loginservermodule

engineadapter

主要工作是封装调用了几个库的一些功能,提供接口给外部使用。

– 里面调用到的封装的库有:IConfigModule、IGameModule、INetworkModule、IClockModule、ILogModule。
– 提供对外的接口有:NetListen()、NetConnect()、NetSend()、NetDisconnect()、GetLogModule(),这些接口实际用到的是m_network模块的方法。

internalcomm

主要工作是内部服务间的网络接口封装。NetListen/NetConnect/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。

loginservermodule

– ① 提供接口分别监听ListenForGlobalServer、ListenForGameServer、ListenForGateWay、ListenForUser。
– ② 提供接口连接到数据库ConnectToDB。
– ③ 注册回调方法,**`<font style="color:#DF2A3F;">`收到客户端网络连接后(ServerNetworkCallback)`</font>`**

m_network_callback = new ServerNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class ServerNetworkCallback : public IEngineNetCallback
{
public:
ServerNetworkCallback(LoginServerModule *server):m_server(server), m_cur_connect_num(0){}
~ServerNetworkCallback(){}
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:维护客户端连接(m_connect_list)。
* **OnRecv()**:LoginServer::Instance().OnRecv()根据协议类型区分执行哪种登陆逻辑(OnLoginReq/OnRoleReq/OnPassAntiWallow/OnPassAntiWallowEX/OnCreateRole/OnDestroyRole/OnOldRoleListReq/OnOldRoleRecoverReq);更新m_connect_list[netid].last_active_time 。
* **OnDisconnect()**:LoginServer::Instance().OnDisconnect();m_connect_list维护一下(m_connect_list[netid].Reset())。
* **OnConnect()**:空。
– ④ 注册回调方法,**`<font style="color:#DF2A3F;">`收到内部网络连接后(ServerInternalNetCallback)`</font>`**

m_internal_network_callback = new ServerInternalNetCallback(this);
m_internal_network->RegisterCallback(m_internal_network_callback);

class ServerInternalNetCallback : public IEngineNetCallback
{
public:
ServerInternalNetCallback(LoginServerModule *server):m_server(server){}
~ServerInternalNetCallback(){}
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:根据监听端口的不同,区分执行LoginServer::Instance().OnGSAccept/LoginServer::Instance().OnGateAccept/LoginServer::Instance().OnGlobalAccept,即收到来自logicserver/gateserver/globalserver监听请求时,分别维护连接关系。
* **OnRecv()**:LoginServer::Instance().OnInnerRecv() 根据netid区分是OnGSRecv/OnGateRecv/OnGlobalRecv,即收到来自logicserver/gateserver/globalserver消息时,走的具体登陆逻辑(一般就是维护的连接状态改变了,比如登陆状态的改变)。
* **OnDisconnect()**:LoginServer::Instance().OnInnerDisconnect() 根据netid区分是OnGSDisconnect/OnGateDisconnect/OnGlobalDisconnect,即收到来自logicserver/gateserver/globalserver消息时,走的具体退出连接逻辑(一般就是维护的连接状态改变了,比如维护的列表删除指定 netid 的项)。
* **OnConnect()**:空。

rmiclient/

  • rmidaloginclient:定义RMI请求函数 RMILoginClient::UserLoginAsyn;RMILoginClient::AddRoleAsyn;RMILoginClient::RemoveRoleAsyn;RMILoginClient::PassAntiWallowAsyn;RMILoginClient::Frobid;RMILoginClient::AddNameInfoAsyn;RMILoginClient::UpdateNameInfoAsyn;RMILoginClient::DeleteNameInfoAsyn;RMILoginClient::DeleteNameInfoByNameAsyn;RMILoginClient::GetPlatNameByRoleIDAsyn;RMILoginClient::AddIdentityAsyn;RMILoginClient::OldRoleListAsyn;RMILoginClient::DelOldRoleAsyn;RMILoginClient::GetNewGoldAsyn;RMILoginClient::GetNewChargePlanAsyn。定义RMI回调函数 RMIUserLoginBackObject::__response;RMIAddRoleBackObject::__response;RMIRemoveRoleBackObject::__response;RMIPassAntiWallowBackObject::__response;RMIForbidBackObject::__response;RMIAddNameInfoBackObject::__response;RMIUpdateNameInfoBackObject::__response;RMIDeleteNameInfoBackObject::__response;RMIDeleteNameInfoByNameBackObject::__response;RMIGetPlatNameBackObject::__response;RMIAddIdentityBackObject::__response;RMIOldRoleListBackObject::__response;RMIDelOldRoleBackObject::__response;RMIGetNewGoldListBackObject::__response;RMIGetNewChargePlanListBackObject::__response。
  • **rmidaroleclient:**定义RMI请求函数 RMILRoleClient::GetRoleInfoAsyn();RMILRoleClient::CreateRoleAsyn();RMILRoleClient::DestroyRoleAsyn()。定义RMI回调函数 RMIGetRoleInfoBackObject::__response;RMICreateRoleBackObject::__response;``RMIDestroyRoleBackObject::__response。

server/

  • **gameserver:**维护scene_list,不过好像暂时没用到。
  • **ipforbid:**维护m_ip_list,里面存储被禁止的ip,以及封禁时间。对list的增删改查接口。
  • **loginlog:**初始化log,用到了封装的模块ILogModule,设置一些log属性。
  • **loginmempool:**对象池。提供了64个UserItem实例和64个多个RMI接口。
  • **loginserver:**维护m_user_manager,m_gs_list,m_gateway_list,m_logout_time_map。提供一些接口当收到网络请求时触发方法(OnGSAccept/OnGateAccept/OnGlobalAccept/OnInnerRecv/OnInnerDisconnect/OnGSRecv/OnGSDisconnect/OnRegisterGS)。对m_user_manager的管理(OnLoginReq/OnRoleReq/OnCreateRole/OnDestroyRole/OnPassAntiWallow/OnPassAntiWallowEX/OnOldRoleListReq/OnOldRoleRecoverReq/OnKuafuRoleReq)。
  • **loginserverlogin:**RMI回调实现类Impl的回调方法的具体实现。
  • **loginserverregister:**RMI回调实现类Impl的回调方法的具体实现。
  • **rmibackobjdef:**RMI回调实现类Impl的具体定义。主要实现类Impl是继承自rmidaloginclient或者rmidaroleclient里定义的RMI回调类。
  • **roleinitattr:**维护m_role_init_attr,角色创建时从数据库拉取的属性值保存到这个变量。
  • **threadstate:**维护m_thread_user_num_state_map,对这个map增删改查,主要统计不同平台玩家个数。
  • **usermanager:**维护m_user_list,对列表增删改查。持有threadstate、WallowTimer。
  • **wallowtimer:**维护m_account_list,这个list里的内容自定义的结构体,我猜是存放防沉迷角色的列表。对这个list增删改查。

chatserver

  • chatserver
  • chatserver/

chatserver

– ① 注册回调方法,**`<font style="color:#DF2A3F;">`收到客户端网络连接后(ServerNetworkCallback)`</font>`**

m_network_callback = new ChatNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class ChatNetworkCallback : public IEngineNetCallback
{
public:
ChatNetworkCallback(ChatServer *host):m_host(host), m_world(0){}
~ChatNetworkCallback(){}
void SetWorld(ChatWorld *world) { m_world = world; }
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:m_world->OnAccept() 主要工作是在维护的连接列表中插入新项 m_gateway_set.insert(netid)。
* **OnRecv()**:m_world->OnRecv() 根据协议区分OnRecvMsg/OnNetDisconnect。OnUserRecv() 根据协议区分OnUserLogin/OnChannelChat/OnSingleChat/OnChannelChatSound/OnSingleChatSound/OnGetSound/OnUserMute/OnUserUnMute。
* **OnDisconnect()**:m_world->OnDisconnect() 在维护的连接列表中删除本项 m_gateway_set.erase(netid)。
* **OnConnect()**:空。
– ② 注册回调方法,**`<font style="color:#DF2A3F;">`收到内部网络连接后(ServerInternalNetCallback)`</font>`**

m_internal_network_callback = new ChatInternalNetworkCallback(this);
m_internal_network->RegisterCallback(m_internal_network_callback);

class ChatInternalNetworkCallback : public IEngineNetCallback
{
public:
ChatInternalNetworkCallback(ChatServer *host):m_host(host), m_world(0), m_allow_ip_prefix(""){}
~ChatInternalNetworkCallback(){}
void SetWorld(ChatWorld *world) { m_world = world; }
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:空。
* **OnRecv()**:m_world->OnInternalRecv() 根据协议传来的msg_type_index调用对应的函数 (this->*(g_gc_handler[msg_type_index]))(netid, data, length);
* **OnDisconnect()**:m_world->OnInternalDisconnect() 如果当前是全局网络,设置为非全局网络。
* **OnConnect()**:空。

chatserver/

  • **channel:**每一个channel实例有一个m_channel_id,并且维护m_user_list用户列表,m_cache_msg_list缓存的消息;提供一些用于发送和接受channel信息的接口(OnChannelMsg/OnSendChannelMsg/OnSendCrossChannelMsg/OnSendServerChannelMsg/OnCrossChannelMsg/OnSendCrossTeamChannelMsg/BroadcastMsg/CacheChannelMsg/SendCacheMsg)。
  • **channelmanager:**维护m_channel_list,往这个channel列表增删改查。
  • **chatmempool:**对象池,提供了64个channel实例和64个chatuser实例。
  • **chatuser:**聊天用户实例,channel实例的m_user_list存的就是这个。
  • **usermanager:**维护m_user_list,也就是chatuser列表,对列表增删改查。
  • **chatworld:**维护m_channel_manager、m_user_manager、m_sound_cache。对channel、user、sound_cache的增删改查管理,以及提供回调的接口,在收到网络消息时,调用具体接受消息方法。
  • **engineadapter:**对m_clock、m_network、m_internal_network模块的封装,调用模块的网络接口方法。
  • **soundcache:**维护m_sound_list 缓存声音信息。

dataserver

engineadapter

提供接口发送给db。

exceptdump

window平台下开启/关闭dump捕捉。

darmiinit

注册RMI函数。

databaselayer

  • 持有commandManager,主要作用是提供接口间接调用commandManager提供的获取命令(command)的方法。
  • 提供类StmtHelper,析构时自动将连接(connect)放回连接池(conn_pool)。

dataaccess

– ① 注册定时器方法,**`<font style="color:#DF2A3F;">`定时器触发(MsgMoniterTimer)`</font>`**

static const int MSG_MONITER_INTERVAL_S = 600;
EngineAdapter::Instance().CreateTimerSecond(MSG_MONITER_INTERVAL_S, new MsgMoniterTimer(MSG_MONITER_INTERVAL_S, &m_mem_mommonitor_log));

class MsgMoniterTimer : public ITimerCallback
{
int interval_s;
LogAgent *log_s;
public:
MsgMoniterTimer(int i, LogAgent *log):interval_s(i), log_s(log){}
virtual void OnTimer()
{
static char buff[1024 * 10];

memmonitor::PrintDyMemInfo(buff);
log_s->print(LL_INFO, buff);
EngineAdapter::Instance().CreateTimerSecond(interval_s, new MsgMoniterTimer(interval_s, log_s));
}
virtual void Free() { delete this; }
};

– ② 注册回调方法,**`<font style="color:#DF2A3F;">`收到网络连接后(DataAccessNetworkCallback)`</font>`**

m_network_callback = new DataAccessNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class DataAccessNetworkCallback : public IEngineNetCallback
{
public:
DataAccessNetworkCallback(DataAccess *host):m_host(host), m_allow_ip_prefix(""){}
~DataAccessNetworkCallback(){}
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:设置m_global_server_id。
* **OnRecv()**:OnRecvDBMsg() 主要作用是同步角色数据OnSynRoleData() 最后调用RMIRoleObject::RoleSave(): 如果是本地角色数据:(从连接池获取conn,并且json序列化角色数据,通过与mysql的长连接conn发送到mysql数据库。);如果切换gameserver的:(把角色数据同步到globalserver);如果切换gameserver没找到:(把角色数据存到数据库,注意是其他分区的表);如果跨服角色数据:(保存到本地内存的m_cross_user_list这个数据结构列表里)。
* **OnDisconnect()**:设置m_global_server_id为-1。
* **OnConnect()**:空。

dataaccess/crossdata

CrossData是静态对象,主要作用是用于存储role_all_struct的std::map<UserID, CrossUser> CrossUserList,即跨服的角色数据的map。

dataaccess/datalayer

  • **commandmanager:**维护std::vector<TableOperator> OperatorList操作列表,其中TableOperator是数据库中的表table和对应的操作命令command封装的数据结构。提供对外接口GetCommand(根据table_id获取操作的命令)和GetTable(获取mysql操作的表)。
  • **tablefactory:**给CommandManager::OperatorList GetTableFactroy()加上一个命名空间tabledef。
/cache

  • **cachebase:**空。
  • **cachecmpnode:**空。
  • **cachecommand:**空。
  • **cachemaker:**空。
  • **cachemanager:**空。
  • **cachenode:**空。
  • **cachetransaction:**空。
/db

  • **connection:**纯虚类IConnection,作用是连接数据库的抽象类。提供虚函数接口:Clone;Connect;Reconnect;IsActive/IsBegin;Close;IsClosed;SetAutoCommit;GetAutoCommit;GetIsCache;GetConn;GetInsertID;Begin;Commit;Rollback;CreateStatement;GetErrNo;GetError。
  • **connfactory:**纯虚类IConnFactroy,作用是创建IConnection的抽象类。提供虚函数接口:CreateConn,返回值是IConnection。
  • **connpool:*维护std::queue<IConnection> ConnList队列,持有IConnFactroy *m_conn_factroy。对外提供的接口主要是GetConn(从ConnList获取其中一个IConnection)和PutConn(把IConnection放入ConnList)。内部方法Init在初始化的时候,根据配置的数量调用m_conn_factroy->CreateConn()创建多个IConnection连接,并且放入ConnList中。
  • **dbdef:**定义枚举DBDATATYPE,列举了mysql数据类型。
  • **resultset:**纯虚类IResultset,作用是返回关系型数据库结果的抽象类。提供虚函数接口:GetStmt/SetStmt;Init/Close;GetColumnCount/GetColumnName/GetColumnDataType;FindColumn;Next;IsNull;GetByte;GetBoolean;GetString;GetInt32;GetDouble;GetDate;GetTime;GetTimestamp;GetLong64。
  • **statement:**纯虚类IStatement,作用是设置关系型数据库参数字段以及执行操作数据库的抽象类。提供虚函数接口:SetConnection/GetConnection;GetStmt;GetInsertID;Prepare;ClearParameters;Close;SetByte;SetBoolean;SetInt32;SetDouble;SetLong64;SetString;SetDate;SetTime;SetTimestamp;Execute;ExecuteQuery;
  • **transaction:**纯虚类ITransaction,作用是翻译数据库结果数据结构的抽象类。提供虚函数接口:Begin;Commit;Rollback;IsBegin;Clone。
/mysql

  • **mysqlconnection:**继承自IConnection,实现IConnection所有虚函数,具体调用mysql.h库的函数实现与mysql服务器的长连接,持有MYSQL *m_mysql与mysql的连接。
  • **mysqlconnfactory:**继承自IConnFactroy,实现IConnFactroy所有虚函数,主要是CreateConn函数创建mysqlconnection实例,并且调用connect函数连接mysql。
  • **mysqldef:**定义getDataType函数,主要作用是返回mysql数据类型。
  • **mysqlresult:**继承自IResultset,实现IResultset所有虚函数,持有std::map<std::string, IndexType> m_field_name_info保存从mysql服务器获取到的结果。
  • **mysqlstatement:继承自IStatement,实现IStatement所有虚函数,持有MYSQL_BIND m_params 和 YSQL_STMT m_stmt; 用于存储mysql请求语句的参数。
/dbopera

  • **dataadapter:**对mysql数据结构的封装。封装mysql基本数据结构;封装mysql表和基本数据结构列表的集合;。
  • **dbcommand:**封装sql语句操作命令的基本语句,提供接口修改操作语句和参数,并且执行sql语句命令。
  • **sqlmaker:**提供五个对外接口,实现对sql语句的修改和sql语句参数修改。
  • **sqlnode:**定义sql语句一些操作类型(比如排序,like,列数量等),提供接口设置sql语句的操作类型和基本数据类型。
/rmiobj

  • **jsonadapter:**定义角色数据,背包数据,好友数据,其他额外数据等结构体。定义 JsonInitXXX()接口使用Json反序列化XXX数据并初始化。定义 JsonSaveXXX()接口使用Json将需要保存的数据序列化为Json格式并保存。
  • **jsonadapterinit:**jsonadapter中关于 JsonInitXXX()接口的具体实现,用于使用Json反序列化XXX数据并初始化。
  • **jsonadaptersave:**jsonadapter中关于 JsonSaveXXX()接口的具体实现,用于使用Json将需要保存的数据序列化为Json格式并保存。
  • **rmiarmysave:**空。
  • **rmicenter:**注册RMI函数,主要有__CreateArmy;__DestroyArmy;__InitArmy;__SaveArmy;__QueryMail;__MarketQueryTotalNum;__MarketNewTrade;__MarketQueryInfo;__MarketDeleteInfo;__MarketReqForTrade;当触发RMI调用时,执行上述函数,上述函数内涉及到从连接池获取conn并且对mysql指定表的字段的修改(增删改查)。
  • **rmicommon:**注册RMI函数,主要有__InitServerStatusData;__SaveServerStatusData;当触发RMI调用时,执行上述函数,上述函数内涉及到从连接池获取conn并且对mysql指定表的字段的修改(增删改查)。
  • **rmilogin:**注册RMI函数,主要有__UserLogin;__PassAntiWallow;__AddRole;__RemoveRole;__Forbid;__GetGold;__ChangeGold;__GetChargePlan;__ChangeChargePlan;__AddNameInfo;__UpdateNameInfo;__DeleteNameInfo;__DeleteNameInfoByName;__GetPlatNameByRoleID;__AddIdentity;__QueryNameExist;__ResetRoleName;__QueryOldRoleList;__DelOldRole;__GetNewChargePlatName;__GetNewChargePlanList;__QueryNameByRoleID;当触发RMI调用时,执行上述函数,上述函数内涉及到从连接池获取conn并且对mysql指定表的字段的修改(增删改查)。
  • **rmirole:**注册RMI函数,主要有__GetRoleInfo;__GetRoleInfoByName;__RoleInit;__RoleSave;__CreateRole;__DestroyRole;__QueryPresent;__GetPresent;__SetPresentHasGet;__RemovePresent;__ReadPresent;__QueryRoleInfoOffline;__NewPresent;__SetRoleOnline;__GetRoleAllInfo;当触发RMI调用时,执行上述函数,上述函数内涉及到从连接池获取conn并且对mysql指定表的字段的修改(增删改查)。
  • **rmiroleinit:**rmirole里使用到的某些函数在这里写,主要有InitRole;JsonInitRoleTable。
  • **rmirolesave:**rmirole里使用到的某些函数在这里写,主要有SaveTableRole;JsonSaveRoleTable。
  • **rmisystem:**注册RMI函数,主要有__GetPublicNotice;__GetCmd;当触发RMI调用时,执行上述函数,上述函数内涉及到从连接池获取conn并且对mysql指定表的字段的修改(增删改查)。
  • **translateint:**提供工具函数,主要有TranslateInt64。
/status

/tabledef

  • **registertables:**空。
  • **tabledef:**定义获取mysql指定的表所有内容的函数,返回值是mysql表的id,表名,表里所有字段的内容。
  • **tablefactory:**提供函数GetTableFactroy,主要作用是生成一个operalist,这个list里的单个是TableOperator(包含table(mysql存储的表)和command(操作表的对象(增删改查))),就是commandmanager管理的m_operator_list里的内容。
  • **tablefieldid:**定义多个枚举类型,枚举类型的名字是mysql存储的表名,枚举类型的内容是mysql各个表中每个字段。
  • **tableid:**定义枚举类型,枚举类型的内容是mysql存储的表名。

servercommon

目录结构

│ basedef.h
│ chatserverdef.h
│ commonfunc.cpp
│ commonfunc.h
│ configcommon.h
│ errornum.h
│ globaldef.h
│ logindef.h
│ noticenum.h
│ serverclmempool.cpp
│ serverclmempool.h
│ servercommon.cpp
│ servercommon.h
│ serverdef.h
│ tree.txt
│ turnfightdef.h
│ turnfightsizedef.h
│ unstdstaticcheck.h

├─attributecommon
├─darmi
├─Debug
├─internalprotocal
├─itemcommon
├─jsonparser
├─netprotocalbuff
├─serverconfig
├─string
├─struct
│ ├─army
│ └─system
├─time
├─turnfightcommon
└─userprotocal

  • **basedef.h:**typeof一系列c++基本数据类型,取一个统一的名字。
  • **chatserverdef.h:**typeof一些基本类型,定义一些chatserver用到的常量。
  • **commonfunc.cpp:**一些公用函数实现。
  • **commonfunc.h:**一些公用函数定义。
  • **configcommon.h:**定义实现一些static的操作json对象获取/修改的函数,定义一个ConfigElementBase读取和修改参数的json基类。
  • **errornum.h:**枚举了所有错误码对应的编号。
  • **globaldef.h:**定义各个模块的一些常量和枚举。
  • **logindef.h:**定义了loginserver用到的常量。
  • **noticenum.h:**枚举了通知类型和对应的编号。
  • **serverclmempool.cpp:**继承自CLMemPool,使用到了这个内存分配器策略,重载了new和delete关键字。
  • **serverclmempool.h:**继承自CLMemPool,使用到了这个内存分配器策略,重载了new和delete关键字。
  • **servercommon.cpp:**定义一些工具函数,如GetSessionKey;InvalidCharFilte;PlatNameProcess;GetIPStr;GetServerStartUpKey;GetValueByBitMark;GetValueByLeftBit;GetValueByRightBit;GetNameStr。
  • **servercommon.h:**定义一些模块(如chatserver)用到的常量和枚举。
  • **serverdef.h:**定义一些常量,定义代表server或者用户的类结构体,如PServerID;GSNetID;UserID;PServerSceneID;PServerArmyID;PServerTeamIndex;CheckPointRecord。
  • **turnfightdef.h:**定义常量,类结构体FightResultInfo;PServerRoomKey。
  • **turnfightsizedef.h:**定义战斗队伍相关常量。
  • **unstdstaticcheck.h:**定义检查类型的函数。

目录结构展开

│ basedef.h
│ chatserverdef.h
│ commonfunc.cpp
│ commonfunc.h
│ configcommon.h
│ errornum.h
│ globaldef.h
│ logindef.h
│ noticenum.h
│ serverclmempool.cpp
│ serverclmempool.h
│ servercommon.cpp
│ servercommon.h
│ serverdef.h
│ tree.txt
│ turnfightdef.h
│ turnfightsizedef.h
│ unstdstaticcheck.h

├─attributecommon
│ attributecommon.cpp
│ attributecommon.h

├─darmi
│ dacenter.h
│ dacommon.h
│ dalogin.h
│ damodule.h
│ darole.h
│ dasystem.h
│ rmicommonclient.cpp
│ rmicommonclient.h
│ rmisystemclient.cpp
│ rmisystemclient.h

├─internalprotocal
│ clglobalprotocal.h
│ crossprotocal.h
│ gcprotocal.h
│ gcrossprotocal.h
│ gdataprotocal.h
│ gglobalprotocal.h
│ ggprotocal.h
│ lglobalprotocal.h
│ lgprotocal.h
│ lwprotocal.h
│ rankprotocal.h
│ readme.txt
│ wgprotocal.h

├─itemcommon
│ itemcommonstruct.cpp
│ itemcommonstruct.h

├─jsonparser
│ jsonconfig.cpp
│ jsonconfig.h
│ jsondatamanager.cpp
│ jsondatamanager.h
│ jsondatatypedef.h
│ jsonparser.cpp
│ jsonparser.h

├─netprotocalbuff
│ netprotocalbuff.cpp
│ netprotocalbuff.h

├─serverconfig
│ configstruct.cpp
│ configstruct.h
│ serverconfigpool.cpp
│ serverconfigpool.h

├─string
│ crossstr.h
│ gamestring.cpp
│ gameworldstr.h
│ globalstr.h
│ namecommonstr.cpp
│ namecommonstr.h

├─struct
│ │ activitycrazyweekparam.cpp
│ │ activitycrazyweekparam.h
│ │ activitydiscountgiftbagparam.cpp
│ │ activitydiscountgiftbagparam.h
│ │ activitylimitsummonparam.cpp
│ │ activitylimitsummonparam.h
│ │ activitymysticgroceryparam.cpp
│ │ activitymysticgroceryparam.h
│ │ activitypyramidparam.cpp
│ │ activitypyramidparam.h
│ │ activitysignrewardparam.cpp
│ │ activitysignrewardparam.h
│ │ activitysummonrewardparam.cpp
│ │ activitysummonrewardparam.h
│ │ activitytimelimitchargeparam.cpp
│ │ activitytimelimitchargeparam.h
│ │ activitytimelimitgiftbagparam.cpp
│ │ activitytimelimitgiftbagparam.h
│ │ activitytimelimitstoreparam.cpp
│ │ activitytimelimitstoreparam.h
│ │ activityupstarrewardparam.cpp
│ │ activityupstarrewardparam.h
│ │ activityweeklycardparam.cpp
│ │ activityweeklycardparam.h
│ │ activitywindbellprayparam.cpp
│ │ activitywindbellprayparam.h
│ │ activitywishrewardparam.cpp
│ │ activitywishrewardparam.h
│ │ arenabetparam.cpp
│ │ arenabetparam.h
│ │ battlevideoparam.cpp
│ │ battlevideoparam.h
│ │ blackparam.cpp
│ │ blackparam.h
│ │ challengearenaparam.cpp
│ │ challengearenaparam.h
│ │ changegsstruct.cpp
│ │ changegsstruct.h
│ │ checkpointmgrparam.cpp
│ │ checkpointmgrparam.h
│ │ dailytaskparam.cpp
│ │ dailytaskparam.h
│ │ developsysparam.cpp
│ │ developsysparam.h
│ │ dimenparam.cpp
│ │ dimenparam.h
│ │ divineadventureparam.cpp
│ │ divineadventureparam.h
│ │ effectparam.cpp
│ │ effectparam.h
│ │ elementtemplateparam.cpp
│ │ elementtemplateparam.h
│ │ endlessroadparam.cpp
│ │ endlessroadparam.h
│ │ enemyparam.cpp
│ │ enemyparam.h
│ │ fighterbookfettersparam.cpp
│ │ fighterbookfettersparam.h
│ │ fighterparam.cpp
│ │ fighterparam.h
│ │ friendparam.cpp
│ │ friendparam.h
│ │ gatepassparam.cpp
│ │ gatepassparam.h
│ │ godequipstoreparam.cpp
│ │ godequipstoreparam.h
│ │ heavensplogicparam.cpp
│ │ heavensplogicparam.h
│ │ heroconveneparam.cpp
│ │ heroconveneparam.h
│ │ heromanagerparam.cpp
│ │ heromanagerparam.h
│ │ illustrationparam.cpp
│ │ illustrationparam.h
│ │ itemlistparam.cpp
│ │ itemlistparam.h
│ │ kaifurewardparam.cpp
│ │ kaifurewardparam.h
│ │ kaifurushrankparam.cpp
│ │ kaifurushrankparam.h
│ │ knapsackparam.cpp
│ │ knapsackparam.h
│ │ leaderboardparam.cpp
│ │ leaderboardparam.h
│ │ lotterysystemparam.cpp
│ │ lotterysystemparam.h
│ │ marketparam.cpp
│ │ marketparam.h
│ │ newplayerguideparam.cpp
│ │ newplayerguideparam.h
│ │ noahsailparam.cpp
│ │ noahsailparam.h
│ │ otherdata1param.cpp
│ │ otherdata1param.h
│ │ otherdata2param.cpp
│ │ otherdata2param.h
│ │ otherlogicparam.cpp
│ │ otherlogicparam.h
│ │ platcommonparam.cpp
│ │ platcommonparam.h
│ │ praiseparam.cpp
│ │ praiseparam.h
│ │ presentparam.cpp
│ │ presentparam.h
│ │ preventaddictedparam.cpp
│ │ preventaddictedparam.h
│ │ recorderparam.cpp
│ │ recorderparam.h
│ │ resonancecrytalparam.cpp
│ │ resonancecrytalparam.h
│ │ roleachievementparam.cpp
│ │ roleachievementparam.h
│ │ roleallstruct.cpp
│ │ roleallstruct.h
│ │ rolearmyparam.cpp
│ │ rolearmyparam.h
│ │ rolefacadeparam.cpp
│ │ rolefacadeparam.h
│ │ rolefighthorseparam.cpp
│ │ rolefighthorseparam.h
│ │ rolefightpetparam.cpp
│ │ rolefightpetparam.h
│ │ rolegodbeastparam.cpp
│ │ rolegodbeastparam.h
│ │ roleinfolist.cpp
│ │ roleinfolist.h
│ │ roleinitparam.cpp
│ │ roleinitparam.h
│ │ rolerewardparam.cpp
│ │ rolerewardparam.h
│ │ roletitleparam.cpp
│ │ roletitleparam.h
│ │ runemanagerparam.cpp
│ │ runemanagerparam.h
│ │ settingparam.cpp
│ │ settingparam.h
│ │ sevendaystargetparam.cpp
│ │ sevendaystargetparam.h
│ │ shenyusplogicparam.cpp
│ │ shenyusplogicparam.h
│ │ shopparam.cpp
│ │ shopparam.h
│ │ skilllistparam.cpp
│ │ skilllistparam.h
│ │ squadsparam.cpp
│ │ squadsparam.h
│ │ squaredparam.cpp
│ │ squaredparam.h
│ │ structsizedef.h
│ │ sviplogicparam.cpp
│ │ sviplogicparam.h
│ │ taskrewardparam.cpp
│ │ taskrewardparam.h
│ │ templateparam.h
│ │ tradeparam.cpp
│ │ tradeparam.h
│ │ vipparam.cpp
│ │ vipparam.h
│ │ weekendwelfareparam.cpp
│ │ weekendwelfareparam.h
│ │
│ ├─army
│ │ armyactivityparam.cpp
│ │ armyactivityparam.h
│ │ armyallstruct.cpp
│ │ armyallstruct.h
│ │ armyapplylist.cpp
│ │ armyapplylist.h
│ │ armyauctionparam.cpp
│ │ armyauctionparam.h
│ │ armybossparam.cpp
│ │ armybossparam.h
│ │ armycontendparam.cpp
│ │ armycontendparam.h
│ │ armyflowerparam.cpp
│ │ armyflowerparam.h
│ │ armyhefuactivityparam.cpp
│ │ armyhefuactivityparam.h
│ │ armyhuntingparam.cpp
│ │ armyhuntingparam.h
│ │ armyimpeachparam.cpp
│ │ armyimpeachparam.h
│ │ armyinitparam.cpp
│ │ armyinitparam.h
│ │ armymemberlist.cpp
│ │ armymemberlist.h
│ │ armyredpaperparam.cpp
│ │ armyredpaperparam.h
│ │ armyrobberparam.cpp
│ │ armyrobberparam.h
│ │ armyshopparam.cpp
│ │ armyshopparam.h
│ │ armywarehouseparam.cpp
│ │ armywarehouseparam.h
│ │
│ └─system
│ chargeplanlist.cpp
│ chargeplanlist.h
│ cmdlist.cpp
│ cmdlist.h
│ publicnoticelist.cpp
│ publicnoticelist.h

├─time
│ tmtime.h

├─turnfightcommon
│ battlecompeletelogic.cpp
│ battlecompeletelogic.h
│ squads.cpp
│ squads.h
│ team.cpp
│ team.h

└─userprotocal
chatmsgcode.h
crosslogicmsgcode.h
globalmsgcode.h
loginmsgcode.h
msgcode.h
msgheader.h
msgsystem.h
systemmsgcode.h
turnfightmsgcode.h

/attributecommon
  • **attributecommon:**定义角色属性的类,AttributeCommonFirst;AttributeCommonSecond;AttributeCommonPercent。这些类里提供序列化/反序列化,获取/修改属性值,比较属性值大小等方法。
/darmi
  • **dacenter:**定义命名空间dataaccessrmi::center下的静态常量,表示该模块下的RMI函数。
  • **dacommon:**定义命名空间dataaccessrmi::common下的静态常量,表示该模块下的RMI函数。
  • **dalogin:**定义命名空间dataaccessrmi::login下的静态常量,表示该模块下的RMI函数。
  • **damodule:**定义命名空间dataaccessrmi下的静态常量,表示RMI的模块种类Login;Role;Center;System;Common。
  • **darole:**定义命名空间dataaccessrmi::role下的静态常量,表示该模块下的RMI函数。
  • **dasystem:**定义命名空间dataaccessrmi::system下的静态常量,表示该模块下的RMI函数。
  • **rmicommonclient:**RMI请求类,RMICommonClient;RMI回调类RMIServerStatusInitBackObject;RMIServerStatusSaveBackObject。
  • **rmisystemclient:**RMI请求类,RMISystemClient;RMI回调类RMIGetPublicNoticeBackObject;RMIGetCmdBackObject。
/internalprotocal

说明:

ggameserver
llogin
wgateway
cchatserver
globalglobalserver
centercenterserver
rankrank
crosscross

20000 gcprotocal
21000 gglobalprotocal
22000 ggprotocal
23000 lgprotocal
24000 lglobalprotocal
25000 gcrossprotocal
26000 rankprotocal
27000 crossprotocal
28000 gdataprotocal

  • **clglobalprotocal:**定义 chatserver-login-globalserver 枚举,请求体结构体等数据结构。
  • **crossprotocal:**定义 cross 枚举,请求体结构体等数据结构。
  • **gcprotocal:**定义 gameserver-chatserver 枚举,通信协议结构体等数据结构。
  • **gcrossprotocal:**定义 gameserver-cross 枚举,通信协议结构体等数据结构。
  • **gdataprotocal:**定义 gameserver-dataserver 枚举,通信协议结构体等数据结构。
  • **gglobalprotocal:**定义 gameserver-globalserver 枚举,通信协议结构体等数据结构。
  • **ggprotocal:**定义 gameserver-gameserver 枚举,通信协议结构体等数据结构。
  • **lglobalprotocal:**定义 loginserver-globalserver 枚举,通信协议结构体等数据结构。
  • **lgprotocal:**定义 loginserver-gameserver 枚举,通信协议结构体等数据结构。
  • **lwprotocal:**定义 loginserver-gateway 枚举,通信协议结构体等数据结构。
  • **rankprotocal:**定义 rank 枚举,通信协议结构体等数据结构。
  • **wgprotocal:**定义 gateway-gameserver 枚举,通信协议结构体等数据结构。
/itemcommon

**itemcommonstruct:**定义物品相关属性结构体ItemCommonAttr;HeroCommonAttr;CommonItemInfo;MsgItemInfo。这些类里提供序列化/反序列化,获取/修改属性值,比较属性值大小等方法。

/jsonparser
  • **jsonconfig:**定义json处理相关类JsonItem;JsonConfigCheckHelper;JsonConfigChecker。定义一系列json检查的函数。
  • **jsondatamanager:**定义两个类,JsonData;JsonDataManager;其中JsonDataManager中持有JsonData,在读取完json数据后保存。有RMI回调方法,收到RMI回调方法时读取或保存json数据。
  • **jsondatatypedef:**定义json数据类型常量。
  • **jsonparser:**定义类JsonParser,提供方法Init;InitFromFile;GetListLength;Down;Up;ObjGetBoolean;ObjGetInt;ObjGetDouble;ObjGetString;ObjSetBoolean;ObjSetInt;ObjSetDouble;ObjSetString;ObjSetObjAndDown;ObjSetArrayAndDown;ArrayGetBoolean;ArrayGetInt;ArrayGetDouble;ArrayGetString;ArraySetBoolean;ArraySetInt;ArraySetDouble;ArraySetString;ArraySetObjAndDown;ArraySetArrayAndDown;ArrayPushBackBoolean;ArrayPushBackInt;ArrayPushBackDouble;ArrayPushBackString;ArrayPushBackObjAndDown;ArrayPushBackArrayAndDown;ArrayPushBackMsgSquads;ArrayGetMsgSquads;SaveInFile;ToJsonString等保存以及操作json里面元素的方法。
/netprotocalbuff
  • **netprotocalbuff:**定义类NetProtocalBuff,里面持有g_protocal_buff。提供方法WriteBegin;WriteFmt;WriteChar;WriteUChar;WriteShort;WriteUShort;WriteInt;WriteUInt;WriteLL;WriteULL;WriteFloat;WriteDouble;WriteString这些方法都是往g_protocal_buff里面写入的。GetProtocalBuff这个方法返回g_protocal_buff的内容,GetProtocalBuffLen这个方法返回g_protocal_buff的长度。
/serverconfig
  • **configstruct:**定义类结构体NetAddr;DBConfig;DBInnerAddr;DBModuleAddr;TableNameList;IndexList;DBServerAddr;LoginServerInnerAddr;LoginServerAddr;ChatServerAddr;GlobalServerAddr;PushServerAddr;CrossManagerConfig;CrossConfig;IPConfig;ServerTimeOut;ChatChannelCD;WallowConfig;CommonConfig。这些类结构体内的变量存储配置的值,方法获取或者修改变量。
  • **serverconfigpool:**定义类结构体ServerConfigPool,持有CommonConfig,方法对CommonConfig进行操作或者读取。
/string
  • **crossstr:**定义一系列外部变量 extern g_cross_xxx等。
  • **gamestring:**定义一系列外部变量 extern g_xxx_xxx等。定义方法INIT_GAME_STR从配置获取值存到对象中。
  • **gameworldstr:**定义一系列外部变量 extern g_xxx_xxx等。
  • **globalstr:**定义一系列外部变量 extern g_xxx_xxx等。
  • **namecommonstr:**定义一系列外部变量 extern g_xxx_xxx等。
/struct
  • **activitycrazyweekparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **activitydiscountgiftbagparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **activitylimitsummonparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **tradeparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **vipparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **weekendwelfareparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
/army
  • **armyallstruct:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **armyapplylist:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **armyshopparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **armywarehouseparam:**定义类结构体,有变量,以及Serialize/Unserialize方法。
/system
  • **chargeplanlist:**定义类结构体,有变量,以及Serialize/Unserialize方法。
  • **… ****publicnoticelist:**定义类结构体,有变量,以及Serialize/Unserialize方法。
/time
  • **tmtime:**定义类结构体TmTime,提供方法GetYear;GetMonth;GetDate; GetHour;GetMinute;GetSecond;GetWeekDay;GetYearDay返回当前日期时间。
/turnfightcommon
  • **battlecompletelogic:**定义一个基类BattleCompleteLogicBase和两个继承类ChampionRaceBattleCompleteLogic;OfflineBattleCompleteLogic。两个继承类完成基类BattleCompleteLogicBase的OnComplete方法。
  • **squads:**定义类结构体General;Squads;SubSquads;MultiSquads;MsgSquads。类结构体里有序列化/反序列化,jsoninit/jsonsave,修改变量等方法。
  • **team:**定义类结构体TeamMember;Team。类结构体里有序列化/反序列化,jsoninit/jsonsave,修改变量等方法。
/userprotocal
  • **chatmsgcode:**定义chat相关的通信协议相关枚举code类型。
  • **crosslogicmsgcode:**定义cross相关的通信协议相关枚举code类型。
  • **globalmsgcode:**定义global相关的通信协议相关枚举code类型。
  • **loginmsgcode:**定义login相关的通信协议相关枚举code类型。
  • **msgcode:**定义gameserver相关的通信协议相关枚举code类型。
  • **msgheader:**定义MessageHeader类结构体,所有通信协议体都需要这个类结构体对象作为头部识别。
  • **msgsystem:**定义类结构体SCSystemMsg;SCNoticeNum;SCZeroHour;SCRebootClient;SCLogoutClientNotice;SCResetWinClientNotice;SCReloadLanguageMask;SCSystemNoticeInfo;    class SCCrossLoadSpeakerMsg。这些类结构体作为通信协议结构体。
  • **systemmsgcode:**定义system相关的通信协议相关枚举code类型。
  • **turnfightmsgcode:**定义turnfight相关的通信协议相关枚举code类型。

globalserver

engineadapter

  • 使用封装模块IConfigModule;IGameModule;INetworkModule;IClockModule;ILogModule;IRMIModule;ITimerModule;IConfigModule提供的方法。
  • 上述封装模块提供的方法再次封装并且提供接口方法给外部使用
    • NetSend/NetSendAll/NetMulSend/NetDisconnect/NetHasCheck;
    • GetGameTime/DayID/Time/LocalTime/AscTime;
    • NextMinuteInterval/NextHourInterval/NextDayInterval/NextWeekInterval/NextMouthInterval;
    • GetDifDay/IsSameDay;
    • GetWorkPath;StopGame;ConfigSyncValue;
    • IsThisWeek/IsThisMonth;
    • GetSeverStartDifDayNumUntilNow/GetDifDayNumUntilNow;
    • IsTargetPlatform/IsCurDNYPlatform;
    • RMIObjRegister/RMICreateSession/RMICloseSession;
    • CreateTimer/CreateTimerSecond。

internalcomm

主要工作是内部服务间的网络接口封装。NetListen/NetConnect/NetConnectAsyn/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。

SetDBSession/GetDBSession,实际用到的是rmi::Session。

serverconfig.xml

定义模块的一些变量,如jobqueuelength指工作队列长度,maxpackagesize指最大网络包长。

globalservermodule

主要工作是封装了本模块的一些方法,方法主要工作:

– ① 提供接口ConnectToDBServer/ConnectToLoginServer/ConnectToChatServer/ConnectToDBRMI。分别连接到dbserver,loginserver,chatserver,dbserverRMI。
– ② 提供接口ListenForGateway/ListenForGS。分别监听来自gateway,gameserver的消息。
– ③ 注册回调方法,**`<font style="color:#DF2A3F;">`收到客户端网络连接后(ServerNetworkCallback)`</font>`**

m_network_callback = new ServerNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class ServerNetworkCallback : public IEngineNetCallback
{
public:
ServerNetworkCallback(GlobalServerModule *server):m_server(server){}
virtual ~ServerNetworkCallback(){}
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:m_gateway_set.insert(gateway_netid); m_gateway_set维护所有gateway列表。
* **OnRecv()**:OnUserRecv,根据协议区分是user逻辑还是user断开连接。如果是user逻辑根据协议判断是否cross,如果是跨服发送到cross,如果是本地逻辑执行 `(this->*m_msg_handler_list[msg_type].func)(netid, user, data); `根据协议类型执行对应的回调函数。
* **OnDisconnect()**:m_gateway_set.erase(gateway_netid); 并且下线所有通过该gateway通信的gameuser。排行榜下线,army下线等。
* **OnConnect()**:空。
– ④ 注册回调方法,**`<font style="color:#DF2A3F;">`收到内部网络连接后(ServerInternalNetCallback)`</font>`**

m_internal_network_callback = new ServerInternalNetCallback(this);
m_internal_network->RegisterCallback(m_internal_network_callback);

class ServerInternalNetCallback : public IEngineNetCallback
{
public:
ServerInternalNetCallback(GlobalServerModule *server):m_server(server)
{
m_globalserver = &GlobalServer::Instance();
}
virtual ~ServerInternalNetCallback(){}
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:`m_gs_list[netid].netid = netid;` m_gs_list是gameserver列表。
* **OnRecv()**:根据协议类型区分是来自gamserver/loginserver/dbserver/chatserver的消息,分别调用OnGsRecv/OnLoginRecv/OnDataAccessRecv/OnChatRecv方法接受来自其他server消息处理逻辑。其中`<u>`OnGsRecv`</u>`的逻辑是根据协议执行回调方法 `(this->*m_gs_handler_list[msg_type_index].func)(netid, data, length);`。`<u>`OnLoginRecv`</u>`根据协议不同执行 `OnKickUser/OnWallowNotice/OnLGCmd/OnGetNewGold/OnGetNewChargePlan/OnKillRobot`。`<u>`OnDataAccessRecv`</u>`根据协议执行 `InternalComm::Instance().NetSend/OnChangeGSFromDB/OnLogoutSaveSucc`。`<u>`OnChatRecv`</u>`根据协议执行 `CrossConnect::Instance().GetCrossList()->TransmitGCProtocal/CrossConnect::Instance().GetCrossList()->SendUserMsg/CrossConnect::Instance().SendChatMsgToAllGlobal/CrossConnect::Instance().SendChatMsgCross`。
* **OnDisconnect()**:`m_gs_list[netid].Reset();` `m_gs_count–;`gameserver列表删除断开连接的这个gameserver。
* **OnConnect()**:设置m_login_server_id。注册到loginserver。发送所有在本globalserver的角色列表信息给loginserve。

/config

  • **globalconfig:**持有otherconfig和rankvalue,持有配置地址,初始化配置。
  • **otherconfig:**一个配置,读取配置内容并放到变量里。
  • **rankvalue:**定义一个命名空间rankglobalvalue,里面有一些关于rank的变量和方法。
  • **rankvaluedef:**把配置的值放到命名空间rankglobalvalue的变量里。

/configjson

  • **globaljsonconfigmgr:**提供所有config的名字以及json文件名;提供InitConfig方法初始化所有配置;提供ReloadConfig加载指定name的配置;提供ReloadAllConfig重新加载所有配置;提供RegisterConfig注册配置到一个map里方便索引。
  • **armycontendjson:**army相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **auctioncommonconfigjson:**拍卖相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **elementtemplatejsonconfig:**元素塔相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **endlessrankjsonconfig:**无尽塔排行榜奖励相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **friendofflinejson:**好友离线相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalarmybossjson:**globalarmyboss相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalarmyconfigjson:**globalarmyconfig相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalarmyfbjson:**globalarmyfb相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalarmyhuntingjson:**globalarmyhunting相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalarmywarehousejsonconfig:**globalarmywarehouse相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalchallengearenajson:**globalchallengearena相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalchampionracejson:**globalchampionrace相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globaldeepbattlefieldconfig:**globaldeepbattlefield相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalherotrainjsonconfig:**globalherotrainjson相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalkaifuwardmanagerjson:**globalkaifuward相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globaltimeractivityconfigbase:**globaltimeractivity相关内容(获取活动开启时间),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **globalwishmakerjson:**globalwishmaker相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **leaderboardjsonconfig:**leaderboard相关内容(很多是这个活动的奖励相关,开启时间等),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **rankjsonconfig:**排行榜相关内容,从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。
  • **sealleveljson:**seallevel相关内容(很多是这个活动的奖励相关),从json配置中读取数据并存到变量里,提供接口给外部获取变量的值。

/crossconnect

  • **crossconnect:**定义类CrossConnect,持有CrossList,提供接口发送消息给其他cross:SendChatMsgCross/SendChatMsgToAllGlobal/SendCLGlobalMsg;定义一个定时器,定时向各个server发送心跳包;定义一个定时器,定时向cross请求crossinfo信息。
  • **crosslist:**定义类crosslist,持有CrossItemList和PServerItemList。提供方法OnRecv接受数据,根据协议内容 OnTransmitInnerProtocal/OnTransmitUserProtocal/OnSendUserMsg/OnMutlSendUserMsg/OnNotifyDisconnectCrossGSNetID/OnDisconnectCrossGSNetID/OnCrossAddGlobal/OnCrossDelGlobal;提供方法增删CrossItem到CrossItemList;提供方法增删PServerItem到PServerItemList。提供方法发送网络数据包到其他cross的globalserver/gameserver/user;

/rmiclient

  • **rmiglobalclient:**定义一些RMI请求和RMI回调。定义RMI类 RMIQueryMailBackObject;RMIDestroyArmyBackObject;RMICreateArmyBackObject;RMIInitArmyBackObject;RMISaveArmyBackObject。
  • **rmigroleclient:**定义RMI类 RMIGRoleClient;RMIGGetRoleInfoBackObject;RMIGSetRoleOnlineBackObject。

/globalserver

globallog

定义一系列logAgent对象,在init的时候分别调用各个logAgent对象的方法 SetLogModule设置log模块和方法 SetCatagory设置保存路径。

globalserver

定义全局对象GlobalServer:

  • 持有收到网络协议回调函数列表m_msg_handler_list(一个数组)。当收到对应通信协议,在这个list直接索引到对应的回调函数,然后执行回调函数。
  • 持有对象管理器 GlobalUserManager;OnlineReactor;GlobalValueManager;RankManager;TeamManager;ArmyManager;FriendOfflineMgr;TimerLogicManager;FirstThreeStarMgr;ChallengeArenaMgr;EndlessRoadMgr;KaifuRewardManager;DimenMgr;LeaderBoardMgr;ChampionRaceMgr;GloDailyActivity;WishMakerManager;BattleVideoMgr;GlobalHeroTrainMgr;DevelopRankManager ;DeepBattleFieldMgr;GlobalShenYuLogicMgr。
  • 时间回调函数:OnZeroHour;OnWeekEnd;OnMonthEnd。里面分别又调用具体持有对象管理器的时间回调函数。
  • global收到网络消息回调函数:OnGateWayAccept/OnGateWayDisconnect;OnUserRecv/OnUserDisconnect;OnGsAccept;OnInternalRecv;OnGsRecv;OnInternalDisconnect;。
  • global发送网络数据函数:SendToUserGameWorld;SendToUserGameWorldByUserId;SendToAllUserGameWorld;SendToGateWayAllUser;SendToDefaultSceneGameWorld;SendToAllGameWorldUser;SendToSceneGameWorld;SendToAllGameWorld;SendToOtherGlobal。
  • 用户登陆登出回调:UserLogin;UserLogout;UserLoginSuc。
  • 注意:globalserver有一个globaluser,gameserver有一个user。当一个用户登陆成功,在globalserver和gameserver中都有一个对象表示这个用户。
globalservermsghandlere

全局对象GlobalServer中m_msg_handler_list的回调函数的具体实现。

globalmempool
  • 注册64个GlobalUser对象实例到对象池
  • 注册64个Army对象实例到对象池
  • 注册64个ArmyMember对象实例到对象池
  • 注册64个ApplyItem对象实例到对象池
  • 注册64个RMIGGetRoleInfoBackObjectImpl对象实例到对象池
  • 注册64个RMIGGetRoleInfoByNameBackObjectImpl对象实例到对象池
  • 注册64个RMIGGetRoleInfoUpdateFriendBackObjectImpl对象实例到对象池
  • 注册64个RMICreateArmyBackObjectImpl对象实例到对象池
  • 注册64个RMIDestroyArmyBackObjectImpl对象实例到对象池
  • 注册64个RMISaveArmyBackObjectImpl对象实例到对象池
  • 注册64个RMIGGetRoleBriefInfoBackObjectImpl对象实例到对象池
  • 注册64个RMIGCrossGetRoleBriefInfoBackObjectImpl对象实例到对象池
  • 注册64个RMIGSetRoleOnlineBackObjectImpl对象实例到对象池
  • 注册64个RMIGOfflineGetRoleInfoBackObjectImpl对象实例到对象池
  • 注册64个PersonalRankItem对象实例到对象池
  • 注册64个ArmyRankItem对象实例到对象池
rmibackobjdef
  • RMI类对象RMIGGetRoleInfoBackObjectImpl声明
  • RMI类对象RMIGGetRoleInfoByNameBackObjectImpl声明
  • RMI类对象RMIGGetRoleInfoUpdateFriendBackObjectImpl声明
  • RMI类对象RMIGGetRoleBriefInfoBackObjectImpl声明
  • RMI类对象RMIGCrossGetRoleBriefInfoBackObjectImpl声明
  • RMI类对象RMIGOfflineGetRoleInfoBackObjectImpl声明
  • RMI类对象RMIGSetRoleOnlineBackObjectImpl声明
  • RMI类对象RMIGetPublicNoticeBackObjectImpl声明
  • RMI类对象RMIQueryMailBackObjectImpl声明
  • RMI类对象RMICreateArmyBackObjectImpl声明
  • RMI类对象RMIInitArmyBackObjectImpl声明
  • RMI类对象RMISaveArmyBackObjectImpl声明
  • RMI类对象RMIDestroyArmyBackObjectImpl声明
  • RMI类对象RMIDestroyErrorArmyBackObjectImpl声明
/army
  • **army:**定义Army类,提供army相关属性和对属性的操作的方法。持有m_army_manager。
  • **armyapplyfor:**定义结构体ApplyItem,主要内容是头像,vip等级,用户名等;定义类ArmyApplyFor,持有ApplyItemList,主要方法对这个ApplyItemList做操作,增删改查,同步信息到客户端等。
  • **armyauthority:**定义类ArmyAuthority,内有枚举AUTHORITY,用于检查权限。
  • **armychallenge:**空。
  • **armycontendmanager:**定义类ArmyContendManager,持有Army对象,持有ArmyFieldMap、ChallengeRankList、ChallengeResultList、ResultRewardGetMap,主要是排名与奖励;提供方法查询这些信息,以及发送奖励邮件等方法。
  • **armygoaldef:**定义枚举ARMY_TARGET_INDEX。
  • **armyhuntingmanager:**定义类ArmyHuntingManager,持有m_role_damage_map,m_diff_list;提供方法开启hunting活动,同步活动中玩家伤害等信息给客户端。
  • **armylogic:**定义类ArmyLogic,持有Army,ArmyLogicItemList。主要是对ArmyLogicItemList进行Init,Save,OnZero,update的操作。
  • **armylogicitem:**定义类ArmyLogicItem,持有Army。
  • **armymanager:**定义类ArmyManager,持有ArmyList,一系列方法是对ArmyList的增删改查;持有FbDamageRecordRank,记录伤害排行;持有ArmyFbInfoMap,记录副本信息;一系列onxxx方法是收到网络请求后触发的回调方法;一系列sendxxx方法用于向客户端/其他server同步信息。
  • **armymembermanager:**定义类ArmyMember;定义类ArmyMemberManager,持有ArmyMemberList,方法主要对list增删改查。
  • **armyredpaper:**定义类ArmyRedPaper,持有Army,代表该红包属于哪个公会;持有RedPaperInfoMap、RedPaperRecordDeq,表示红包信息(是否领取之类)。
  • **armyuserindex:**定义类ArmyUserIndex,持有ArmyManager;持有ArmyUserIndexMap,一些增删改查的方法围绕ArmyUserIndexMap进行操作,这个map的value是ArmyUser(内容是Army和ArmyMember),这个map代表登陆army的army成员。
  • **armywarehousemanager:**定义类ArmyWarehouseItem,有售出时间,存储时间,是否可合并,锁定时间等属性和对属性进行操作的方法;定义类ArmyWarehouseLog,有用户id,物品id,物品数量和操作时间等属性;定义类ArmyWarehouseManager,持有Army,持有ArmyWarehouseItemList,一系列方法对这个list增删改查,持有ArmyWarehouseLogList,记录操作物品的日志。
/globalothter
  • **globalotherdata:**定义类GlobalOtherData,继承自JsonData,实现Serialize/Unserialize,对数据进行序列化和反序列化。
  • **globalothermgr:**空。
/globalvalue
  • **globalvaluedata:**定义类GlobalValueData,继承自JsonData,实现Serialize/Unserialize,对数据进行序列化和反序列化。
  • **globalvaluemgr:**定义类GlobalValueManager,提供方法设置从json读取到的变量的数据。
/logic
activitycontroller

定义类TimerActivity,继承自IActivity。

提供虚函数 StartActivity;OnWaitKaifuDayEnd;OnZero;SetActivityOpenStatus;SetActivityHeraldStatus;SetActivityCloseStatus;OnUserLogin;OnUserLogout;OnUserLoginGameWorld;ReloadActivityConfig;OnActivityEnterReq;OnConfigReload。

提供方法 CreateACTimer;GetActivityType;IsActivityOpen/IsActivityOpening/GetActivityOpenNextInterval;。

iactivity

定义类IActivity。

提供虚函数 OnUserLogin;OnUserLogout;OnUserLoginGameWorld;OnZero;OnUpdate;ReloadActivityConfig。

ilogicmanager

定义类ILogicManager。

提供虚函数 OnUserLogin;OnUserLogout;OnUserLoginGameWorld;OnZero;OnUpdate。

timerlogicmanager

定义类TimerLogicManager,继承自ILogicManager。

提供虚函数 OnUserLogin;OnUserLogout;OnUserLoginGameWorld;OnZero;OnUpdate。

提供方法 RegisterActivity。主要操作的是m_activity_map(key是活动名,value是TimerActivity)。

/armboss
  • **armybossmgr:**定义类ArmyBossMgr,继承自TimerActivity。持有FightArmyInfoMap记录army的score;持有FightRoleInfoMap,记录army的每个战斗对象的score等信息。提供方法获取/更新army的score排行榜。
/armycontend

空。

/battlevideo
  • **battlevideomgr:**定义类BattleVideoMgr,持有VideoList、BattleVideoMap,提供方法增删改查添加VideoInfo到BattleVideoMap中。
/challengearena
  • **challengearenamgr:**定义类ChallengeArenaMgr,持有ChallengeRecordVec,主要方法是往vec增删改查;还有一系列score等的list,记录排行榜信息。
  • **championracemgr:**定义类ChampionRaceMgr,持有ArenaBetInfoList,ReportKey等,提供方法match匹配/更新/同步match结果等。
/deepbattlefield
  • **deepbattlefieldmgr:**定义类DeepBattleFieldMgr,持有DamageRecordMap,DamageRecordDeque,提供方法对这两个增删改查,以及同步信息到客户端。
/dimen
  • **dimenmgr:**定义类DimenMgr,提供方法GetUserAverageStar获取平均星级,提供方法OnOtherUserInfoReq,请求信息时,同步所有匹配战斗list数据给gameserver。
/endlessroad
  • **endlessroadmgr:**定义类EndlessRoadMgr,持有HireHeroMap,HireRewardRecord,提供方法对这两个map进行增删改查,就是上/下阵英雄。
/firstthreestar
  • **firstthreestarmgr:**定义类FirstThreeStarMgr,提供方法读取/保存UserDataRecordList数据到xml。
/friendoffline
  • **friendofflinemgr:**定义类FriendOfflineMgr,持有AddOfflineRecordMap,AddFriendAckRecordMap,OfflineSendSpritMap,DelFriendRecordMap提供方法对其增删改查。
/globaldailyactivity
  • **glo_dailyactivity:**定义类GloDailyActivity,持有DailyActivityItemList,里面存着所有global活动,提供方法更新/检查活动状态,提供方法通知单个活动状态改变。
/globalherotrain
  • **globalherotrainmgr:**定义类GlobalHeroTrainMgr,持有UserIDSet,里面是参与活动的用户,当活动结束,通过这个set获取用户并发送奖励邮件。
/globalshenyulogic
  • **globalshenyulogicmgr:**定义类GlobalShenYuLogicMgr,持有ShenYuLogicSquadsInfoMap存的是排行信息,提供方法请求/发送信息同步。提供方法将数据读取/存储到xml中。
/leaderboard
  • **leaderboardmgr:**定义类LeaderBoardMgr,持有FightInfoList,UserFailedRecordMap,提供方法进入战斗(将数据存入FightInfoList),同步战斗信息等。
/onlinenotice
  • **onlinereactor:**定义类OnlineReactor,持有ReactorUserList,提供方法 Register/Unregister/ReactionOnline/ReactionOffLine/GetReactiveUserID/UnregisterAll操作这个list。
/other
  • **developrankmanager:**定义类DevelopRankManager,持有UserRecordlist,提供方法增删改查。提供方法读取/存储数据到xml。
  • **kaifurewardmanager:**定义类KaifuRewardManager,持有kaifulevelrewardnumlist,提供方法获取奖励列表,同步信息等。
  • **teammanager:**定义类TeamManager,持有TeamList,提供方法 CreateTeam;RemoveTeamMember;ChangeTeamLeader;ChangeVip;ChangeLevel;IsTeamFull;IsTeamLeader;SendTeamInfo;SendTeamListToUser等。
  • **wishmakermanager:**定义类WishMakerManager,持有UserIDList,里面是参与活动的用户,提供方法 OnRecordUserId;IsWishMakerOpen;UpdateActivityType;ResetActivityData;InitActivityType;SendActivityEndRankReward等。
/protocal
  • **msgarmy:**提供army相关的SCxxx和CSxxx通信数据结构。
  • **msgcpp:**消息结构体的MessageHeader的定义(先定义enum的一个值,然后以这个值作为MessageHeader的值)。
  • **msgglonewfestival:**提供glonewfestival相关的SCxxx和CSxxx通信数据结构。
  • **msgother:**提供SCxxx和CSxxx通信数据结构。
  • **msgserver:**提供server相关的SCxxx和CSxxx通信数据结构。
  • **msgteam:**提供team相关的SCxxx和CSxxx通信数据结构。
  • **msgtimerlogic:**提供timerlogic相关的SCxxx和CSxxx通信数据结构。
/rank
  • **armyrank:**定义类ArmyRankItem,重定义 operator<使得可以在map容器中自动排序;定义类ArmyRank,持有ArmyRankItemMap。
  • **personalrank:**定义类PersonalRankItem,重定义 operator<使得可以在map容器中自动排序;定义类PersonalRank,持有PersonalRankItemMap。
  • **rankitem:**定义类RankItem。
  • **rankmanager:**定义类RankManager,持有PersonalRank、ArmyRank;提供方法刷新/获取排行榜。
/user
  • **globaluser:**定义类GlobalUser,一系列get/set方法针对用户属性值操作。
  • **globalusermanager:**定义类GlobalUserManager,持有GlobalUserList,针对list的增删改查,提供方法访问某个GlobalUser,根据GlobalUser发送邮件,同步信息给客户端等。

gameserver

exceptdump

window平台下开启/关闭dump捕捉。

serverconfig.xml

定义模块的一些变量,如jobqueuelength指工作队列长度,maxpackagesize指最大网络包长。

serverlogic

– ① 注册回调方法,**`<font style="color:#DF2A3F;">`收到客户端网络连接后(ServerNetworkCallback)`</font>`**

m_network_callback = new ServerNetworkCallback(this);
m_network->RegisterCallback(m_network_callback);

class ServerNetworkCallback : public IEngineNetCallback
{
public:
ServerNetworkCallback(ServerLogic *server):m_server(server), m_world(0){}
virtual ~ServerNetworkCallback(){}
void SetWorld(World *world) { m_world = world; }
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:`m_world->OnAccept`即 `m_gateway_set.insert(netid)`在一个set里插入与gameserver连接的gateway。
* **OnRecv()**:`m_world->OnRecv`即根据协议决定是 `OnRecvMsg`还是 `OnNetDisconnect`,如果是 `OnRecvMsg`最后会调用到 `(this->*m_msg_handler_list[msg_type].func)(netid, scene, role, obj_id, (void*)msg)`也就是最后会根据协议调用预先注册在这个list的某个回调函数。
* **OnDisconnect()**:`m_world->OnDisconnect`即 `m_scene_manager.OnGateWayDisconnect(netid); m_gateway_set.erase(netid);`就是gateway与gameserver断开连接。
* **OnConnect()**:空。
– ② 注册回调方法,**`<font style="color:#DF2A3F;">`收到内部网络连接后(ServerInternalNetCallback)`</font>`**

m_internal_network_callback = new ServerInternalNetCallback(this);
m_internal_network->RegisterCallback(m_internal_network_callback);

class ServerInternalNetCallback : public IEngineNetCallback
{
public:
ServerInternalNetCallback(ServerLogic *server):m_server(server), m_world(0) {}
virtual ~ServerInternalNetCallback(){}
void SetWorld(World *world) { m_world = world; }
void SetAllowIpPrefix(const std::string &allow_ip_prefix) { m_allow_ip_prefix = allow_ip_prefix; }
virtual void OnAccept(Port listen_port, NetID netid, IP ip, Port port){}
virtual void OnRecv(NetID netid, const char *data, int length){}
virtual void OnDisconnect(NetID netid){}
virtual void OnConnect(bool result, int handle, NetID netid, IP ip, Port port){}
};

***OnAccept()**:`m_world->OnInternalAccept`。
* **OnRecv()**:`m_world->OnInternalRecv`即根据协议决定是 `OnLGRegisterGS`(`m_scene_manager.AddGS`添加gameserver到一个容器管理)、`OnLGUnRegisterGS`(`m_scene_manager.DeleteGS`删除对gameserver的管理)、`OnLGCmd`(收到来自loginserver的命令,根据命令执行如重新加载配置等操作)。
* **OnDisconnect()**:`m_world->OnInternalDisconnect`即如果断开连接的是loginserver,赋值 `InternalComm::Instance().m_login_server_id = -1`然后打印log。
* **OnConnect()**:`m_world->RegisterToLogin`即往loginserver注册自己的存在。

/crosslogagent

  • **crosslogagent:**定义类CrossLogAgent,持有LogAgent,利用LogAgent封装方法 printf/print;buff_printf/buff_print/commit_buff/clear_buff打印log到指定的文件。
  • **crosslogagentmanager:**定义类CrossLogAgentManager,持有CrossLogAgentList,根据不同目录将CrossLogAgent注册进一个list中,封装方法 Print将不同目录的日志打印到不同的输出;封装方法 SendToLocalServer将log内容发送到globalserver。

/rmiclient

  • **rmicenterclient:**定义类RMICenterClient,主要是往center发送RMI请求的方法;定义RMI回调类RMIMarketQueryTotalNumBackObject;RMIMarketNewTradeBackObject;RMIMarketQueryInfoBackObject;RMIMarketDeleteInfoBackObject;RMIMarketTradeReqBackObject;
  • **rmiloginclient:**定义类RMILoginClient,主要是往loginserver发送RMI请求的方法;定义RMI回调类RMIGetGoldBackObject;RMIChangeGoldBackObject;RMIGetNewChargePlanBackObject;RMIGetChargePlanErrBackObject;RMIQueryNameExistBackObject;RMIResetNameBackObject;RMINameByRoleIDBackObject;
  • **rmiroleclient:**定义类RMIRoleClient,主要是往dataserver发送RMI请求的方法;定义RMI回调类RMIRoleInitBackObject;RMIRoleSaveBackObject;RMIGetRoleBriefInfoBackObject;RMIQueryPresentBackObject;RMIGetPresentBackObject;RMISetPresentHasGetBackObject;RMIRemovePresentBackObject;RMIReadPresentBackObject;RMIQueryRoleInfoOfflineBackObject;RMINewPresentBackObject;RMIMarriageQueryUserInfo;RMIGetRoleAllInfoBackObject;

/gameworld

engineadapter
  • 使用封装模块IConfigModule;IGameModule;INetworkModule;IClockModule;ILogModule;IRMIModule;ITimerModule;IConfigModule提供的方法。
  • 上述封装模块提供的方法再次封装并且提供接口方法给外部使用
    • NetSend/NetSendAll/NetMulSend/NetDisconnect/NetHasCheck;
    • GetGameTime/DayID/Time/LocalTime/AscTime;
    • NextMinuteInterval/NextHourInterval/NextDayInterval/NextWeekInterval/NextMouthInterval;
    • GetDifDay/IsSameDay;
    • GetWorkPath;StopGame;ConfigSyncValue;
    • IsThisWeek/IsThisMonth;
    • GetSeverStartDifDayNumUntilNow/GetDifDayNumUntilNow;
    • IsTargetPlatform/IsCurDNYPlatform;
    • RMIObjRegister/RMICreateSession/RMICloseSession;
    • CreateTimer/CreateTimerSecond。
gamecommon

define了一系列工具函数,用于bit级别数据的判断和操作。

gamedef

定义了一些方向的枚举,坐标的变量,一些游戏颜色、技能常量等。

gamelog

extern了一系列LogAgent对象和CrossLogAgent对象。

gamemempool

REGISTER_MEMPOOL注册了一系列64个对象放到对象池。

主要有:

  • effect对象(技能效果)。
  • NPC对象
  • RMI对象
  • Monster对象
  • Role、RoleLogic、GatherObj、SentryObj、GodCityGiftObj对象等
  • Scene、MonsterGenerater、GatherGenerater、ChangeSceneDelayer、SpecialLogicDefault对象等
gamenotice

定义类GameNoticeManager

定义了一系列通知函数LotteryFiveStarNotice;LotteryRandomGiftNotice;LotteryChooseGiftNotice;LotteryGiftNoticeElite;KaifuLevelRewardNotice;LotterySoulNoticeElite;LotterySeerNoticeElite;LotteryNaionNoticeElite;LotteryFightPetNotice;HappyLotteryNotice;LotteryGiftNoticeRare;WishRewardNotice;HeroUpStarNotice;TriggerGiftBagNotice;ChallengeArenaRankNotice;ChallengeArenaWinNotice;CrossArenaNotice;

internalcomm

主要工作是内部服务间的网络接口封装。NetListen/NetConnect/NetConnectAsyn/NetSend/NetDisconnect,实际用到的是m_internal_network里面的方法。

SetDBSession/GetDBSession,实际用到的是rmi::Session。

rmibackobjdef

一系列RMI类对象的声明。

world
worldinit
/activity
/ai
/challengearena
/checkpoint
/config
/configjson
/effect
/friend
/globalconfig
/globalserver
/heropool
/item
/log
/lotterysystem
/monster
/npc
/obj
/other
/protocal
/roleother
/scene
/shop
/trade
/turnbasefight

crossserver

engineadapter

单例。时间函数,创建定时器函数。

使用 IConfigModule,IClockModule,ILogModule,ITimerModule。

crossmodule

持有Cross对象。

ListenForGlobal监听globalserver的连接

CrossNetworkCallback回调

corssmanagermodule

ListenForCrossServer监听其他corssserver

ListenForGlobalServer监听其他globalserver

CrossManagerNetworkCallback回调

crosslog

跨服log

/cross

持有GlobalList

收到来自globalserver的消息,根据协议内容转发:

//内部协议转发请求(gglobalprotocal)
CrossInnerTransmitReq
// clinet发到gameworld[跨服]的消息,通过Client->gateway[本服]->global[本服]->cross->global[跨服]->gameworld[跨服]
CrossUserTransmitCTSReq
// gameworld[跨服]发到clinet的消息,通过gameworld[跨服]->global[跨服]->cross->global[本服]->gateway[本服]->Client
CrossUserTransmitSTCReq
CrossUserTransmitReqMultSTC
// 本服通知gameworld[跨服]clinet连接断开,通过gateway[本服]->global[本服]->cross->global[跨服]->gameworld[跨服]
CrossUserDisconnectNotify
// gameworld[跨服]断开clinet连接,通过gameworld[跨服]->global[跨服]->cross->global[本服]->gateway[本服]
CrossUserDisconnectReq
//从global[跨服]->cross->global[本服]->gateway[本服]->Client
CrossUserTransmitByUserIdSTCReq

/crossmanager

持有GlobalList,CrossList。

提供方法:

  • SendToGlobal:发送信息给指定globalserver
  • SendToAllGlobal:发送信息给所有globalserver
  • SendToAllAreaUserByPsId:根据area_type发送信息给指定的所有globalserver下的user

HeartBeatTimer定时器与所有crossserver和globalserver进行心跳确认。

/corsslogic

crosslogic

持有CrossLogicManager,CrossSceneActivityMgr。

持有 HandlerItem m_msg_handler_list[MAX_MSG_TYPE]。

持有 HandlerGameItem m_game_msg_handler_list[MAX_MSG_TYPE]。

一系列sendxxx方法,调用crossmanager的方法发送消息内容给指定globalserver/其他crossserver。

一系列systemxxx方法,调用crossmanager的方法发送消息内容给指定globalserver/其他crossserver。

一系列onxxx方法,注册在m_msg_handler_list,m_game_msg_handler_list作为回调函数。

MoveRoleToScene:跨服角色移动协议,跨服时需要将消息同步给所有其他globalserver的gameserver。

crossmempool

创建对象池:CrossPersonalRankItem,CrossWeddingRankItem,CrossTeamArenaRankItem,CrossTeam。

/activity
  • **crossdailyactivitymgr:**持有m_activity_id_list维护从配置读取的所有活动id,持有m_activity_end_type_list保存已经结束的活动。
/config
/configjson
/crossarmy
  • **crossarmy:**一系列变量,描述army。
  • **corssarmymanager:**维护CrossArmyList,CrossArmyInfoMap。
/crossdicegame
/crossrankmanager
  • **crossrankmanager:**维护CrossPersonalRank[],CrossWeddingRank[],CrossTeamArenaRank[]。
  • **crosspersonalrank:**排名存在一个链表里,以及维护一个map用于快速索引具体用户。坏处是获取排名的用户的时候就需要遍历链表,好处是插入和删除,或者交换排名,操作链表比较方便。
  • **crossteamarenarank:**同crosspersonalrank。
  • **crossweddingrank:**同crosspersonalrank。
/crossrighttouch
/crosshake
/crossteam
/crossteamfb
/crossuser
/protocal
/logic
crosslogicmanager
icrossactivity
/cross3v3
/cross3v3arena
/crossarena
/crossarena1v1
/crossarena2v4
/crossarmy
/crossboss
/crossdragoncity
/crossfightcity
/crossgrabboss
/crossmaintown
/crossmelee
/crossoiran
/crosspubg
/crosshenmobattle
/crossxiuluotower
/sceneactivity
赞(0)
未经允许不得转载:网硕互联帮助中心 » 【游戏框架】多进程服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!