原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0126/359.html
常州手机游戏-C++游戏服务器编程-LogServer
本篇文章给大家介绍下游戏服务器编程LogServer的使用,程序的入口还是从main函数开始,首先执行的当然是游戏的初始化了,让我们进入到LogHandle.h去看看都初始化了哪些内容。
代码如下:
// LogServer.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Net/LogNetSessionMgr.h"
#include "LogHandler.h"
int main()
{
auto res = CLogHandler::GetInstance().Init();
if (res){
while(true){
INetSessionMgr::GetInstance()->Update();
Sleep(1);
}
}
return 0;
}
#include "StdAfx.h"
#include "LogHandler.h"
#include "DBMgr.h"
#include "CSDataSource.h"
#include "Net/LogNetSessionMgr.h"
CLogHandler* CLogHandler::m_pCLogHandler = nullptr;
CLogHandler::CLogHandler(void):m_pDBActiveWrapper(NULL)
{
}
CLogHandler::~CLogHandler(void)
{
}
CLogHandler& CLogHandler::GetInstance(){
if (NULL == m_pCLogHandler){
m_pCLogHandler = new CLogHandler;
}
return *m_pCLogHandler;
}
void CLogHandler::HandleLogMsg(const char* pMsg, int n32MsgLength){
ELOG(LOG_DBBUG, "常州网站开发培训");
ToLog::WriteLog sMsg;
if (!ParseProtoMsg(pMsg, n32MsgLength, sMsg)){
return;
}
m_pDBActiveWrapper->EncodeAndSendToDBThread(sMsg, sMsg.msgid());
}
void CLogHandler::AsynHanlder(Buffer*& pBuffer){
if (pBuffer->m_LogLevel == ToLog::eMsgToLog_WriteLog){
ToLog::WriteLog sMsg;
if (!ParseProtoMsg(pBuffer->GetDataHeader(), pBuffer->GetDataLength(), sMsg)){
return;
}
/*MysqlDWrapper::*/IDBConnector *pConn = m_pDBActiveWrapper->GetDBConnector();
if (NULL == pConn){
ELOG(LOG_ERROR, "");
return;
}
INT32 nRet = pConn->ExecQuery(sMsg.log_str() );
if (nRet == eNormal)
{
pConn->CloseQuery();
}
}
}
bool CLogHandler::Init(){
const char * szDBCfg = "./LGCfg/DBConfig.xml";
TiXmlDocument doc(szDBCfg);
if(doc.LoadFile())
{
TiXmlHandle dochandle(&doc);
TiXmlElement *father = dochandle.FirstChild("DBCfg").FirstChild("DB").ToElement();
auto port = atoi(dochandle.FirstChild("DBCfg").FirstChildElement("port").ToElement()->GetText());
CLogNetSessionMgr* pSessionMgr = new CLogNetSessionMgr;
INetSessionMgr::GetInstance()->CreateListener(port, 102400, 102400, 0, &gClientSessionFactory);
SetDBData(father, m_DbCfg);
m_pDBActiveWrapper = new DBActiveWrapper(std::bind(&CLogHandler::AsynHanlder, this, std::placeholders::_1), m_DbCfg);
m_pDBActiveWrapper->Start();
ELOG(LOG_INFO, "Init Success!");
}
else{
ELOG(LOG_ERROR, "Init Failed!");
return false;
}
return true;
}
void CLogHandler::SetDBData(TiXmlElement * father, SDBCfg &sDBCfg){
TiXmlElement *ip = father->FirstChildElement("ip")->ToElement();
strcpy(sDBCfg.aszDBHostIP , ip->GetText() );
TiXmlElement *port = father->FirstChildElement("Port")->ToElement();
sDBCfg.un32DBHostPort = atoi(port->GetText());
TiXmlElement *user = father->FirstChildElement("user")->ToElement();
strcpy(sDBCfg.aszDBUserName , user->GetText());
TiXmlElement *pwd = father->FirstChildElement("pwd")->ToElement();
strcpy(sDBCfg.aszDBUserPwd , pwd->GetText());
TiXmlElement *dbname = father->FirstChildElement("dbname")->ToElement();
strcpy(sDBCfg.aszDBName , dbname->GetText());
}
在常州企业培训初始化的时候,首先去读取DBConfig.xml这个配置文件,获取到IP,Port,user,pwd,dbname等。初始化成功之后服务器程序进入到一个死循环,等待网络消息。
上篇:上一篇:常州微信小程序开发-u3d WrapContent与ScrollBar
下篇:下一篇:常州微信小程序-C#观察者模式和委托联合使用