- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章补充——具体程序代码 - search read.pudn.com
第十二章补充——具体程序
// 因为DBS是运行于linux环境下的,所以main函数是console的形式CGWSMgr g_GWSMgr; // 定义一个全局GameWorldServer管理类实例int main(int argc, char* argv[])
{
LOG(LV_M, DBServer Start ...);
if(!g_GWSMgr.Init()) // 执行CGWSMgr的Init函数来初始化有关数据,建立监听socket等
{
return 0;
}
int bRun = 1;
while(bRun) // 执行CGWSMgr的Run函数来进行DBS的主体循环处理 {
bRun = g_GWSMgr.Run();
}
LOG(LV_M , DBServer Exit !);
return 0;
}
// 下面定义游戏用到的数据表名static const char CHARACTER_TB[] = cha_tb; // 角色表
static const char ITEM_TB[] = item_tb; // 道具表
static const char MAIL_TB[] = mail_tb; // 邮件表……
// DBS自身基于来自Packet消息的调用, 这里的packet只是数据存放使用,并不一定来自网络消息//之所以这样存放,是为了解析此类消息的时候,与解析网络消息的形式以及格式保持一致enum DBS_MSG
{
_DBS_MSG_BASE = 5000,
DBS_FACTION_CAL_EXP // 计算帮派总经验值的消息,是定时触发的
};// 代表单个GWS的类CGWS
class CGWS
{
private:
int _nID; // 预先分配好的ID, 在GWS登录DBS以后会赋值
int _nState;
mapint , CGamePlayer* _PlayerIdx; // 玩家ID到数据指针的映射,方便查找
public:
CGWS();
~CGWS();
CMFTCPSession *m_Link; // 用来保持和GWS连接的socket
// 下面是一些对Player数据的操作函数
void SetID(int nID);
int GetID();
void SetState(int nState);
void AddPlayer(CGamePlayer *pPlayer);
bool RemovePlayer(int nID);
void ClearPlayerList();
CGamePlayer* CheckPlayerOnline(int nID);
CGamePlayer* GetPlayer(int nID);
};
// 处理来自GWS的命令的统一的函数定义, 参数固定为2个, 1是GWS的指针, 标识消息来自于谁
// 2是数据包的packet指针,内含数据实际内容, 对于数据库服务器这样的应用程序,很适合使用类// 似的函数定义方法来统一处理消息, 可以使代码结构清晰, 功能明确, 还可以方便的统计函数的// 执行时间以评估对数据库操作的性能
typedef void (*GWS2DBSPROC)(CGWS *pGWS, CMFCmdPacket *pPacket);
// 管理所有连接上DBS的GWS的类CGWSMgr// 也是最大,最关键的一个类,它控制了整个程序的运行流程// 此类里面包含了很多static的变量和函数, 主要是基于用消息触发回调函数的需要, // 因为回调函数只能是全局的,如果想包含在类里面,就必须是static类型,它能存取// 的变量也必须是static类型
class CGWSMgr
{
private:
static CLog* _pL;
static CDBMySql _DB; // 这是负责存取数据库的一个MySql接口类的实例
// 下面定义一些字符串数组, 作为生成以及存放sql语句字段,条件等等的公用内存static string _strSQL;
static char _szSQL[32768];
static char _szCon[256];
static char
文档评论(0)