Bool HawkLogServer::Init(const AString& sSvrAddr, const HawkDBConn& sConn, Int32 iCacheSize, Int32 iCacheTime) { m_iCacheTime = iCacheTime; HawkAssert(iCacheSize > 0); if(!m_sSocket.Create(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) { HawkPrint("LogServer Init Socket Error."); return false; } m_sSocket.SetNoDelay(true); m_sSocket.SetBlocking(false); if(!m_sSocket.Bind(SocketAddr(sSvrAddr))) { HawkPrint("LogServer Bind Socket Error."); return false; } m_pLogDB = P_DBManager->OpenDatabase("LogDB", sConn); if (!m_pLogDB) { HawkPrint("LogServer Open LogDB Error."); return false; } if (!m_pLogCache) m_pLogCache = new HawkOctets(iCacheSize); return true; }
Bool HawkProfiler::Start(const AString& sAddr) { if (!m_bRunning) { if (sAddr.size()) m_sAddr = sAddr; GetProcessorNumber(); GetTotalMem(); GetCpuUsage(); GetMemUsage(); if(!m_sSocket.Create(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) { HawkPrint("Profiler Init Socket Error."); return false; } m_sSocket.SetNoDelay(true); m_sSocket.SetBlocking(false); if(!m_sSocket.Bind(SocketAddr(m_sAddr))) { HawkPrint("Profiler Bind Socket Error."); return false; } m_bRunning = true; m_pThread = new HawkThread(hawk_ProfilerRoutine); m_pThread->Start(this); return true; } return false; }
Bool HawkLogServer::Init(const AString& sSvrAddr, const AString& sLogFile, Int32 iCacheSize, Int32 iCacheTime) { m_iCacheTime = iCacheTime; HawkAssert(iCacheSize > 0); if(!m_sSocket.Create(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) { HawkPrint("LogServer Init Socket Error."); return false; } m_sSocket.SetNoDelay(true); m_sSocket.SetBlocking(false); if(!m_sSocket.Bind(SocketAddr(sSvrAddr))) { HawkPrint("LogServer Bind Socket Error."); return false; } m_pLogFile = new HawkDiskFile; if (!m_pLogFile->Open(sLogFile, HawkFile::OPEN_APPEND)) { HawkPrint("LogServer Open LogFile Error."); return false; } if (!m_pLogCache) m_pLogCache = new HawkOctets(iCacheSize); return true; }
Bool HawkGateThread::Init(UInt32 iBaseId) { HawkAssert(!m_pThread && !m_pBase && !m_pZmq); m_iBaseSid = iBaseId; //创建通用缓冲 if (!m_pOctets) m_pOctets = new OctetsStream(m_pGateway->GetBufSize()); //创建线程 if (!m_pThread) m_pThread = new HawkThread(hawk_GateThreadRoutine); //创建事件基础对象 if (!m_pBase) { event_config* pCfg = event_config_new(); if (!pCfg) { HawkPrint("Create EventConfig Failed."); return false; } #ifdef PLATFORM_LINUX event_config_require_features(pCfg, EV_FEATURE_ET); #endif event_config_set_flag(pCfg, EVENT_BASE_FLAG_NOLOCK); m_pBase = (void*)event_base_new_with_config(pCfg); event_config_free(pCfg); if (!m_pBase) { HawkPrint("Create EventBase Failed."); return false; } if (m_iBaseSid == 1) { const Char* pszMethod = event_base_get_method((event_base*)m_pBase); if (pszMethod && strlen(pszMethod)) { HawkFmtPrint("Kernel Event Notification Mechanism: %s", pszMethod); } } } //创建ZMQ对象 if (!m_pZmq) { m_pZmq = P_ZmqManager->CreateZmq(HawkZmq::HZMQ_DEALER); m_pZmq->SetIdentity(&m_iBaseSid, sizeof(m_iBaseSid)); m_pZmq->Connect(m_pGateway->GetThreadZmqAddr()); } return true; }
Bool HsLogger::Init(const AString& sCfg) { if (!m_bRunning) { HawkXmlFile xmlCfg; HawkXmlDocument<AString> xmlDoc; if (!xmlCfg.Open(sCfg, xmlDoc)) { HawkPrint("LogServer Open Config Error."); return false; } AXmlElement* pRoot = xmlDoc.GetRoot(); AXmlElement* pCfg = pRoot->GetChildren("LgCfg"); AXmlElement* pDbCfg = pRoot->GetChildren("DbCfg"); if(!pCfg || !pDbCfg || !pCfg->GetAttribute("Addr")) { HawkPrint("LogServer Config Tag Error."); return false; } AString sAddr = pCfg->GetAttribute("Addr")->StringValue(); if (pRoot->GetAttribute("Console")) EnableConsole(pRoot->GetAttribute("Console")->BoolValue()); HawkDatabase::DBConn sConn(HawkDatabase::HDB_MYSQL); if (pDbCfg->GetAttribute("Host")) sConn.SetHost(pDbCfg->GetAttribute("Host")->StringValue()); if (pDbCfg->GetAttribute("Port")) sConn.SetPort(pDbCfg->GetAttribute("Port")->IntValue()); if (pDbCfg->GetAttribute("User")) sConn.SetUser(pDbCfg->GetAttribute("User")->StringValue()); if (pDbCfg->GetAttribute("Pwd")) sConn.SetPwd(pDbCfg->GetAttribute("Pwd")->StringValue()); sConn.SetDBName(pDbCfg->GetAttribute("DB")->StringValue()); return HawkLogServer::Init(sAddr, sConn); } return false; }
int main(int argc, Char* argv[]) { HawkUtil::Init(); if (argc >= 2) { HawkOSOperator::ClearConsole(); HawkOSOperator::Gotoxy(0, 0); HawkPrint("=============================================================="); HawkPrint("==================Gateway, Author: Daijunhua=================="); HawkPrint("=============================================================="); HawkGateway* pGateway = new HawkGateway; AString sGwCfg = argv[1]; AString sGwSecurity = ""; if (argc >= 3) sGwSecurity = argv[2]; if (pGateway->InitCfg(sGwCfg, sGwSecurity)) { #ifdef _DEBUG g_DbgThread = new HawkThread(DoKeyDownExit); if (g_DbgThread) g_DbgThread->Start(pGateway); #endif pGateway->Run(); } HAWK_RELEASE(g_DbgThread); HAWK_RELEASE(pGateway); } else { printf("usage: gateserver <gw.cfg> <gw-security.cfg>.\r\n"); HawkOSOperator::WaitKeyboardInput(); return -1; } HawkUtil::Stop(); HawkUtil::Release(); return 0; }
AString HawkOSOperator::ConsoleInput() { #ifdef PLATFORM_WINDOWS HawkPrint("Please Input: "); Char sInput[1024] = {0}; scanf_s("%s",sInput,1000); return sInput; #else return ""; #endif }
int main(int argc, Char* argv[]) { HawkUtil::Init(); AString sAddr = "192.168.0.109:8000"; if (argc >= 2) sAddr = argv[1]; HawkSocket sSocket; if (sSocket.InitTcpClient(sAddr)) { while (true) { HawkPrint("input send command: ", false); Char szCmd[DEFAULT_SIZE] = {0}; scanf("%s", szCmd); Size_t iSize = strlen(szCmd) + 1; if (iSize) { sSocket.Send(szCmd, iSize); HawkPrint("send ok."); } if (sSocket.UpdateEvent(HEVENT_READ, 1000)) { Char szRecv[DEFAULT_SIZE] = {0}; iSize = DEFAULT_SIZE; if (sSocket.Receive(szRecv, iSize)) { HawkFmtPrint("recv cmd: %s", szRecv); } } } } HawkUtil::Stop(); HawkUtil::Release(); return 0; }
: std::exception() #endif { //计算除路径外的文件名 Size_t iPos = sFile.find_last_of('\\'); if (iPos == AString::npos) iPos = sFile.find_last_of('/'); AString sFileName = ""; if (iPos != AString::npos) sFileName = sFile.substr(iPos+1,sFile.size()-iPos-1); ostringstream oas; oas << "Exception(" << sMsg << ") : "; oas << "File(" << sFileName << ")---Function(" << sFunc << ")---Line(" << iLine << ")\r\n"; HawkPrint(oas.str()); }
Bool HsRobot::Init(const AString& sCfg) { HawkXmlFile xmlCfg; HawkXmlDocument<AString> xmlDoc; if (!xmlCfg.Open(sCfg, xmlDoc)) { HawkPrint("Robot Open Config Error."); return false; } AXmlElement* pRoot = xmlDoc.GetRoot(); if (pRoot->GetChildAttribute("Robot", "Addr")) m_sSvrAddr = pRoot->GetChildAttribute("Robot", "Addr")->StringValue(); if (pRoot->GetChildAttribute("Robot", "Count")) m_iCount = pRoot->GetChildAttribute("Robot", "Count")->IntValue(); return true; }
Bool HawkSession::DecodeProtocol(Protocol*& pProto) { try { pProto = P_ProtocolManager->Decode(*m_pInputBuf); } catch (HawkException& rhsExcep) { //异常退出 HawkPrint(rhsExcep.GetMsg()); //释放协议 P_ProtocolManager->ReleaseProto(pProto); return false; } //移除输入缓冲的前段空白 m_pInputBuf->RemoveBlank(); return true; }
int main(int argc, Char* argv[]) { HawkUtil::Init(); #ifndef _DEBUG Bool bLoop = true; #else Bool bLoop = false; #endif Char sHash[PAGE_SIZE] = {0}; //提示输入 if (argc >= 2) { //读取参数 memcpy(sHash, argv[1], strlen(argv[1])); bLoop = false; } do { if (bLoop) { memset(sHash, 0, PAGE_SIZE); HawkPrint("Utf8 String: ", false); scanf("%s", sHash); } UInt32 iHash = HawkStringUtil::HashString<UString>(_Utf8(sHash)); HawkFmtPrint("Hash: %u", iHash); } while (bLoop); HawkUtil::Stop(); HawkUtil::Release(); return 0; }
Bool HawkLogServer::CacheLogs(Int32 iLogId, Int32 iType, const UString& sKey, const UString& sMsg) { memset(m_pFmtBuf, 0, PAGE_SIZE); if (!sKey.size() || !sMsg.size()) return false; if (m_pLogFile) { //格式化日志信息 sprintf((Char*)m_pFmtBuf, "LogId: %d, Type: %d, Time: %s, Key: %s, Msg: %s", iLogId, iType, HawkOSOperator::GetTimeString().c_str(), sKey.c_str(), sMsg.c_str()); UInt32 iSize = (UInt32)strlen((Char*)m_pFmtBuf); if (iSize + m_pLogCache->Size() >= m_pLogCache->Capacity() - 2) { //日志落地 FlushLogs(); } //屏幕输出 if (m_bConsole) HawkPrint(HawkStringUtil::ToString(m_pFmtBuf)); //写入缓存 m_pLogCache->Append(m_pFmtBuf, iSize); return true; } else if (m_pLogDB) { //格式化日志信息 if(m_pLogCache->Size()) { sprintf((Char*)m_pFmtBuf, ",(%d, %d, '%s', '%s', '%s')", iLogId, iType, HawkOSOperator::GetTimeString().c_str(), sKey.c_str(), sMsg.c_str()); } else { sprintf((Char*)m_pFmtBuf, "INSERT INTO logs(LogId, LogType, LogTime, LogKey, LogMsg) VALUES(%d, %d, '%s', '%s', '%s')", iLogId, iType, HawkOSOperator::GetTimeString().c_str(), sKey.c_str(), sMsg.c_str()); } UInt32 iSize = (UInt32)strlen((Char*)m_pFmtBuf); if (iSize + m_pLogCache->Size() >= m_pLogCache->Capacity() - 2) { //日志落地 FlushLogs(); //重新Format日志格式 sprintf((Char*)m_pFmtBuf, "INSERT INTO logs(LogId, LogType, LogTime, LogKey, LogMsg) VALUES(%d, %d, '%s', '%s', '%s')", iLogId, iType, HawkOSOperator::GetTimeString().c_str(), sKey.c_str(), sMsg.c_str()); iSize = (UInt32)strlen((Char*)m_pFmtBuf); } //屏幕输出 if (m_bConsole) HawkPrint(HawkStringUtil::ToString(m_pFmtBuf)); //写入缓存 m_pLogCache->Append(m_pFmtBuf, iSize); return true; } return false; }
int main(int argc, Char* argv[]) { HawkUtil::Init(); Char sFile[256] = {0}; AString sArgs = "cpp"; //默认协议文件 if (HawkOSOperator::ExistFile("Protocol.xml")) { strcpy(sFile, "Protocol.xml"); } else if (HawkOSOperator::ExistFile("HawkProtocol.xml")) { strcpy(sFile, "HawkProtocol.xml"); } else if (HawkOSOperator::ExistFile("HsProtocol.xml")) { strcpy(sFile, "HsProtocol.xml"); } else if (HawkOSOperator::ExistFile("HawkSysProtocol.xml")) { strcpy(sFile, "HawkSysProtocol.xml"); } if (!strlen(sFile)) { //提示输入 if (argc < 2) { HawkPrint("Input Protocol XmlFile: ", false); scanf("%s",sFile); } else { //读取协议文件 memcpy(sFile, argv[1], strlen(argv[1])); //读取生成模式参数 for (Int32 i=2;i< argc;i++) { sArgs += " "; sArgs += argv[i]; } } } else { //读取生成模式参数 for (Int32 i=1;i<argc;i++) { sArgs += " "; sArgs += argv[i]; } } if(!P_ProtocolManager->GenProtocols(sFile, sArgs)) { HawkPrint("\r\nGen Protocols Failed."); } else { HawkPrint("\r\nGen Protocols Success."); #ifdef PLATFORM_WINDOWS if (argc != 2) { HawkOSOperator::WaitKeyboardInput(); } #endif } HawkUtil::Stop(); HawkUtil::Release(); return 0; }
Bool HsGame::Init(const AString& sCfgFile) { //初始化配置文件读取 AppCfg sAppCfg; HawkKVFile cfgFile; AString sValue = ""; if (cfgFile.Open(sCfgFile, HawkFile::OPEN_READ)) { //初始化游戏全局对象 if(!InitGameObj()) { HawkPrint("GameServer Init GameObj Error."); return false; } //服务器id if (cfgFile.QueryValue("SvrId", sValue)) { sAppCfg.SvrId = HawkStringUtil::StringToUInt<AString>(sValue); HawkFmtPrint("HsGame Init, SvrId: %s", sValue.c_str()); } else { HawkFmtPrint("HsGame Init Error, SvrId: %s", sValue.c_str()); return false; } //逻辑线程数 if (cfgFile.QueryValue("ThreadNum", sValue)) { sAppCfg.Threads = HawkStringUtil::StringToUInt<AString>(sValue); HawkFmtPrint("HsGame Init, ThreadNum: %s", sValue.c_str()); } else { HawkFmtPrint("HsGame Init Error, ThreadNum: %s", sValue.c_str()); return false; } //是否开启控制台打印 if (cfgFile.QueryValue("Console", sValue)) { sAppCfg.Console = HawkStringUtil::StringToBool<AString>(sValue); HawkFmtPrint("HsGame Init, Console: %s", sValue.c_str()); } //网关服务器地址 if (cfgFile.QueryValue("GateAddr", sValue)) { sAppCfg.Gateproxy.Address = sValue; HawkStringUtil::Replace<AString>(sAppCfg.Gateproxy.Address, "*", "127.0.0.1"); HawkFmtPrint("HsGame Init, GateAddr: %s", sValue.c_str()); } else { HawkFmtPrint("HsGame Init Error, GateAddr: %s", sValue.c_str()); return false; } //连接数限制 if (cfgFile.QueryValue("ConnLimit", sValue)) { sAppCfg.Gateproxy.ConnLimit = HawkStringUtil::StringToUInt<AString>(sValue); HawkFmtPrint("HsGame Init, ConnLimit: %s", sValue.c_str()); } //日志服务器地址 if (cfgFile.QueryValue("LogAddr", sValue)) { sAppCfg.LogAddr = sValue; HawkFmtPrint("HsGame Init, LogAddr: %s", sValue.c_str()); } //开启内置网关模式 if (cfgFile.QueryValue("InnerGate", sValue) && HawkStringUtil::StringToBool<AString>(sValue) == true) { cfgFile.QueryValue("GateCfg", sAppCfg.Gateway.GwCfg); cfgFile.QueryValue("GwSecurity", sAppCfg.Gateway.GwSecurity); HawkFmtPrint("HsGame Init, GateCfg: %s", sAppCfg.Gateway.GwCfg.c_str()); HawkFmtPrint("HsGame Init, GwSecurity: %s", sAppCfg.Gateway.GwSecurity.c_str()); } //初始化数据库配置 if (cfgFile.QueryValue("DbEnable", sValue)) { HawkFmtPrint("HsGame Init, DbEnable: %s", sValue.c_str()); if (HawkStringUtil::StringToBool(sValue) == true) { //host cfgFile.QueryValue("DbHost", sValue); sAppCfg.DBConn.SetHost(sValue); HawkFmtPrint("HsGame Init, DbHost: %s", sValue.c_str()); //type cfgFile.QueryValue("DbType", sValue); sAppCfg.DBConn.SetType(HawkStringUtil::StringToUInt<AString>(sValue)); HawkFmtPrint("HsGame Init, DbType: %s", sValue.c_str()); //port cfgFile.QueryValue("DbPort", sValue); sAppCfg.DBConn.SetPort(HawkStringUtil::StringToInt(sValue)); HawkFmtPrint("HsGame Init, DbPort: %s", sValue.c_str()); //user cfgFile.QueryValue("DbUser", sValue); sAppCfg.DBConn.SetUser(sValue); HawkFmtPrint("HsGame Init, DbUser: %s", sValue.c_str()); //pwd cfgFile.QueryValue("DbPwd", sValue); sAppCfg.DBConn.SetPwd(sValue); HawkFmtPrint("HsGame Init, DbPwd: %s", sValue.c_str()); //db cfgFile.QueryValue("DbName", sValue); sAppCfg.DBConn.SetDBName(sValue); HawkFmtPrint("HsGame Init, DbName: %s", sValue.c_str()); } } return HawkAppFrame::Init(sAppCfg); } return false; }
Bool HsGateway::Init(const AString& sCfg) { if (!m_bRunning) { HawkXmlFile xmlCfg; HawkXmlDocument<AString> xmlDoc; if (!xmlCfg.Open(sCfg, xmlDoc)) { HawkPrint("Gateway Open Config Error."); return false; } AXmlElement* pRoot = xmlDoc.GetRoot(); AXmlElement* pCfg = pRoot->GetChildren("GwCfg"); if(!pCfg || !pCfg->GetAttribute("Frontend") || !pCfg->GetAttribute("Backend")) { HawkPrint("Gateway Config Tag Error."); return false; } AString sFrontend = pCfg->GetAttribute("Frontend")->StringValue(); AString sBackend = pCfg->GetAttribute("Backend")->StringValue(); HawkStringUtil::Replace<AString>(sBackend, "*", "127.0.0.1"); Int32 iThread = 4; if (pCfg->GetAttribute("Threads")) iThread = pCfg->GetAttribute("Threads")->IntValue(); Bool bCrossDomain = false; if (pCfg->GetAttribute("CrossDomain")) bCrossDomain = pCfg->GetAttribute("CrossDomain")->BoolValue(); if (pCfg->GetAttribute("Platform")) m_iPlatform = pCfg->GetAttribute("Platform")->IntValue(); AString sProfiler = ""; if (pCfg->GetAttribute("Profiler")) sProfiler = pCfg->GetAttribute("Profiler")->StringValue(); Int32 iKeepAlive = 0; if (pCfg->GetAttribute("KeepAlive")) iKeepAlive = pCfg->GetAttribute("KeepAlive")->IntValue(); if (HawkGateway::Init(sFrontend, sBackend, iThread)) { P_ProtocolManager->SetSizeLimit(PAGE_SIZE); if (iKeepAlive > 0) SetSessionTimeout(iKeepAlive); if (bCrossDomain) TurnOnCrossDomain(); if (sProfiler.size()) TurnOnProfiler(sProfiler); return true; } } return false; }