原创内容,转载请注明原文网址: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#观察者模式和委托联合使用




