Exemplo n.º 1
0
	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;
	}
Exemplo n.º 2
0
	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;
	}
Exemplo n.º 3
0
	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;
	}
Exemplo n.º 4
0
	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;
	}
Exemplo n.º 5
0
	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;
	}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
	AString HawkOSOperator::ConsoleInput()
	{
#ifdef PLATFORM_WINDOWS
		HawkPrint("Please Input: ");
		Char sInput[1024] = {0};
		scanf_s("%s",sInput,1000);
		return sInput;
#else
		return "";
#endif
	}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
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());
	}
Exemplo n.º 10
0
	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;
	}
Exemplo n.º 11
0
	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;
	}	
Exemplo n.º 12
0
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;
}
Exemplo n.º 13
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;
	}
Exemplo n.º 14
0
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;
}
Exemplo n.º 15
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;
	}
Exemplo n.º 16
0
	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;
	}