#include "stdafx.h" #include #include #include #include "DBProxyServerEx.h" #include "ServerGlobal.h" //================================================================================================== // @desc ¸Þ¸ð¸® ´©¼ö ¸®Æ÷ÅÍ »ç¿ë ¿©ºÎ #define MEMORY_LEAK_REPORT_FILE "memory_leak_DBProxy.txt" // @desc °øÀ¯µÈ ¸Þ¸ð¸® ´©¼ö Ãâ·Â ÆÄÀϸí #define MEMORY_LEAK_REPORT_FILE_FOR_SHARED "./memory_leak_DBProxy_shared.txt" #include "./SharedMemoryLeakReporter.hxx" //================================================================================================== // Global SolarSimpleConsole g_Console; extern "C" { int WinMainCRTStartup(); } static VOID ErrorHandler_new() { printf( "Can't Alloc Memory\n" ); if( g_pSunLog ) { MessageOut( eCRITICAL_LOG, _T("Can't Alloc Memory\n") ); g_pSunLog->Flush( CSunLog::cOUTPUT_BOTH ); } __debugbreak(); } int SunEntryPoint() { SharedMemoryPool::CreateInstance(); return WinMainCRTStartup(); } static SolarDump solarDUMP("."); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { __UNUSED((hInstance, hPrevInstance, nCmdShow)); //SolarDump dp( ".", MiniDumpWithFullMemory ); // ÄܼÖâ ÃʱâÈ­ CONSOLE_DESC cdesc; ZeroMemory( &cdesc, sizeof(cdesc) ); cdesc.bUsingConsoleInput = FALSE; cdesc.bUsingRedirect = TRUE; g_Console.Init( &cdesc ); std::set_new_handler( ErrorHandler_new ); // ¸í·É Àμö ÆÄ½Ì if( !ParseArguments( (LPTSTR)lpCmdLine ) ) { DISPMSG( "Invalid arguments!\n" ); system( "pause" ); return 0; } const CHAR* cstr_ConfigFile = #if DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_ACCOUNT "./ADBPServer.ini"; #elif DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_DEFAULT "./DBPServer.ini"; #elif DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT "./DBPUnit.ini"; #endif // g_DBProxyServer.DoInit( (CHAR*)cstr_ConfigFile, DBProxyServerEx::DoAllocServerSession, DBProxyServerEx::DoFreeServerSession, DBProxyServerEx::DoFreeConnectSession, DBProxyServerEx::DoAllocClient_NotUsed, DBProxyServerEx::DoFreeClient_NotUsed, DBProxyServerEx::DoFreeConnect_NotUsed ); g_DBProxyServer.DoProcess(); g_DBProxyServer.DoRelease(); // ÄܼÖâ Á¾·á g_Console.Release(); return 0; } #if (0) #include #include #include "DBProxyServerEx.h" #include #include #include "ServiceApp.h" #include "ServerGlobal.h" SUNConsole g_SUNConsole; ISolarConsole * g_pIConsole = NULL; class DBProxyServiceApp : public ServiceApp { public : DBProxyServiceApp(const char* pServiceName) : ServiceApp(pServiceName) { } virtual VOID Update() { g_DBProxyServer.Run(); g_DBProxyServer.Release(); // ¼­¹ö Á¾·á DISPMSG( "·þÎñÆ÷ÒÑÖÕÖ¹...\n" ); g_SUNConsole.Release(); } virtual VOID OnStop() { g_DBProxyServer.Shutdown(); } }; #ifdef _DEBUG __DECLARE_SERVICE( DBProxyServiceApp, "DBProxyServer_d" ); #else __DECLARE_SERVICE( DBProxyServiceApp, "DBProxyServer" ); #endif extern "C" { int WinMainCRTStartup(); } static int SunAllocHook(int nAllocType, void *pvData, size_t nSize, int nBlockUse, long lRequest, const unsigned char * szFileName, int nLine ) { __UNUSED(nAllocType); __UNUSED(pvData); __UNUSED(nBlockUse); __UNUSED(szFileName); __UNUSED(nLine); if (lRequest >= 31475) // 389862 { //if (nSize == 118) { __asm int 3; } } return TRUE; } int SunEntryPoint() { //_CrtSetAllocHook(SunAllocHook); return WinMainCRTStartup(); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { StartMemoryLeakCheck(); //BreakPointOnMemoryLeak(148); SolarDump dp; BOOL bConsoleMode = (strstr( lpCmdLine, "service" ) == NULL); /* SolarDatabaseDesc desc_; //desc.DataBaseModuleType = DBCInterfaceType_OLEDB; desc_.DataBaseModuleType = DBCInterfaceType_ODBC; desc_.dwQueryPoolSize = 2000; desc_.wQueryProcessorNum = 1; desc_.pszDatabaseIP = "10.1.48.38"; desc_.pszDatabaseName = "SUNOnline"; desc_.pszUserName = "sa"; desc_.pszUserPassword = "xodidtjqjd"; desc_.fnErrorMessage = NULL; desc_.fnQueryResult = NULL; SolarDatabaseInDBP* db = new SolarDatabaseInDBP; db->Initialize( desc_ ); db->Release(); delete db;*/ #ifdef _USING_SIMPLE_CONSOLE if( !g_SUNConsole.Init( eSIMPLE_CONSOLE ) ) #else if( !g_SUNConsole.Init( eCOMPLEX_CONSOLE ) ) #endif { ASSERT( !"Solar console Initialization failed!" ); return 0; } //¼­ºñ½º ¸ðµå½Ã ÇöÀç °æ·Î¸¦ ¼³Á¤ÇØÁÖ±â À§ÇØ InitÀü¿¡ ¹Ýµå½Ã »ç¿ë.. // ServiceApp::SetApplicationDirectory(); // ¸í·É Àμö ÆÄ½Ì if( !ParseArguments( (LPTSTR)lpCmdLine ) ) { DISPMSG( "ÎÞЧ²ÎÊý!\n" ); system( "pause" ); return 0; } // ¼­¹ö ÃʱâÈ­ if( !g_DBProxyServer.Init() ) { DISPMSG( "·þÎñ³õʼ»¯Ê§°Ü!\n" ); system( "pause" ); return 0; } SERVER_ENV* pServerEnv = g_DBProxyServer.GetFileParser()->GetServerEnv(); DISPMSG( "====================================================\n" ); DISPMSG( " SUN Online DB ´úÀí·þÎñ³õʼ»¯Íê³É.\n" ); DISPMSG( "====================================================\n" ); // ¼­¹ö ½ÃÀÛ if( eCONSOLE_MODE == pServerEnv->byServiceMode ) { g_DBProxyServer.Run(); g_DBProxyServer.Release(); // ¼­¹ö Á¾·á DISPMSG( "·þÎñÆ÷ÒÑÖÕÖ¹...\n" ); g_SUNConsole.Release(); } else if( eSERVICE_MODE == pServerEnv->byServiceMode ) { DISPMSG( "<<<<< ·þÎñģʽ >>>>>\n" ); __START_SERVICE( DBProxyServiceApp ); } #ifdef _DEBUG //DeInitAllocCheck();//Memory Leak Check End #endif return 0; } #endif