void ExitInstance( void ) { g_dpCoreSrvr.DeleteDPObject(); g_DPCacheSrvr.DeleteDPObject(); g_dpLoginSrvr.DeleteDPObject(); g_dpDatabaseClient.DeleteDPObject(); g_PartyMng.Clear(); g_PlayerMng.Free(); SAFE_DELETE( CParty::m_pPool ); SAFE_DELETE( CPlayer::m_pPool ); g_GuildMng.m_AddRemoveLock.Enter( theLineFile ); g_GuildWarMng.Clear(); g_GuildMng.m_AddRemoveLock.Leave( theLineFile ); g_GuildMng.Clear(); SAFE_DELETE( CGuildMember::sm_pPool ); SAFE_DELETE( CGuild::sm_pPool ); UninitializeNetLib(); }
void CRunObject::Run( void ) { HANDLE hHeartbeat; if( !( hHeartbeat = CreateEvent( NULL, FALSE, FALSE, g_sHeartbeat ) ) ) hHeartbeat = OpenEvent( EVENT_MODIFY_STATE, FALSE, g_sHeartbeat ); if( NULL == hHeartbeat ) Error( "MAPI_E_NOT_ENOUGH_RESOURCES" ); DWORD dwTickHearbeat = timeGetTime() + SEC( 2 ); CTimeout timeoutObject( 67, 0 ); CTimeout timeoutReadAgent( 67, 20 ); CTimeout timeoutReadCore( 67, 40 ); CTimeout timeoutReadTrans( 67, 50 ); CTimeout timeoutReadAccount( 67, 60 ); CTimeout timeoutRespawn( 1000, 200 ); CTimeout timeout( 1000, 600 ); #ifdef __EVENT_1101 CTimeout timeoutCallTheRoll( MIN( 1 ), 70 ); #endif // __EVENT_1101 DWORD dwCur, dwOld; while( WaitForSingleObject( m_hClose, 1 ) != WAIT_OBJECT_0 ) { { _PROFILE( "CRunObject::Run()" ); g_tmCurrent = timeGetTime(); g_tCurrent = time( NULL ); dwCur = g_tmCurrent; dwOld = dwCur; if( timeoutObject.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "CWorldMng::Process()" ); g_WorldMng.Process(); if( g_tmCurrent > dwTickHearbeat ) { SetEvent( hHeartbeat ); dwTickHearbeat = g_tmCurrent + SEC( 2 ); } } PROFILE_RUN( r1 ); if( timeoutReadAgent.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "g_DPSrvr.ReceiveMessage()" ); g_DPSrvr.ReceiveMessage(); } PROFILE_RUN( r2 ); if( timeoutReadCore.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "g_DPCoreClient.ReceiveMessage()" ); g_DPCoreClient.ReceiveMessage(); } PROFILE_RUN( r3 ); if( timeoutReadTrans.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "g_dpDBClient.ReceiveMessage()" ); g_dpDBClient.ReceiveMessage(); } PROFILE_RUN( r4 ); /* #ifdef __GIFTBOX0213 if( timeoutReadAccount.TimeoutReset( g_tmCurrent ) ) CDPAccountClient::GetInstance()->ReceiveMessage(); #endif // __GIFTBOX0213 */ #ifdef __EVENTLUA_KEEPCONNECT if( timeoutReadAccount.TimeoutReset( g_tmCurrent ) ) prj.m_EventLua.KeepConnectEventProcess(); #endif // __EVENTLUA_KEEPCONNECT PROFILE_RUN( r5 ); if( timeoutRespawn.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "g_WorldMng.Respawn()" ); u_long uRespawned = g_WorldMng.Respawn(); // if( uRespawned > 0 ) SetLogInfo( LOGTYPE_RESPAWN, "Respawn:%d Object:%d", uRespawned, g_WorldMng.GetObjCount() ); } PROFILE_RUN( r6 ); if( timeout.TimeoutReset( g_tmCurrent ) ) { _PROFILE( "1SEC_Process" ); g_GameTimer.Compute(); CGuildQuestProcessor::GetInstance()->Process(); CPartyQuestProcessor::GetInstance()->Process(); PROFILE_RUN( r7 ); if( g_eLocal.GetState( EVE_GUILDCOMBAT ) ) g_GuildCombatMng.Process(); #if __VER >= 11 // __GUILD_COMBAT_1TO1 if( g_eLocal.GetState( EVE_GUILDCOMBAT1TO1 ) ) g_GuildCombat1to1Mng.Process(); #endif // __GUILD_COMBAT_1TO1 #if __VER >= 12 // __SECRET_ROOM if( g_eLocal.GetState( EVE_SECRETROOM ) ) { _PROFILE( "CSecretRoomMng::Process()" ); CSecretRoomMng::GetInstance()->Process(); } #endif // __SECRET_ROOM #if __VER >= 13 // __RAINBOW_RACE if( g_eLocal.GetState( EVE_RAINBOWRACE ) ) { _PROFILE( "CRainbowRaceMng::Process()" ); CRainbowRaceMng::GetInstance()->Process(); } #endif // __RAINBOW_RACE #if __VER >= 14 // __PCBANG { _PROFILE( "CPCBang::ProcessPCBang()" ); CPCBang::GetInstance()->ProcessPCBang(); } #endif // __PCBANG #if __VER >= 14 // __INSTANCE_DUNGEON { CInstanceDungeonParty::GetInstance()->Process(); } #endif // __INSTANCE_DUNGEON #ifdef __QUIZ { if( CQuiz::GetInstance()->IsAutoMode() && CQuiz::GetInstance()->IsRun() ) CQuiz::GetInstance()->Process(); } #endif // __QUIZ PROFILE_RUN( r8 ); if( g_eLocal.GetState( ENABLE_GUILD_INVENTORY ) ) g_GuildMng.Process(); PROFILE_RUN( r9 ); if( g_eLocal.GetState( EVE_GUILDWAR ) ) g_GuildWarMng.Process(); g_PartyMng.PartyMapInfo(); PROFILE_RUN( r10 ); #if __VER >= 12 // __RANGDA_0521 // 랜덤 이벤트 몬스터 초당 1회 틱 CRangdaController::Instance()->OnTimer(); #endif // __RANGDA_0521 #ifdef __EVENTLUA_SPAWN prj.m_EventLua.EventSpawnProcess(); #endif // __EVENTLUA_SPAWN } #ifdef __EVENT_1101 if( timeoutCallTheRoll.TimeoutReset( g_tmCurrent ) ) // 1분당 { CEventGeneric::GetInstance()->CallTheRoll(); #if __VER >= 12 // __NEW_ITEMCREATEMON_SERVER CCreateMonster::GetInstance()->ProcessRemoveMonster(); #endif // __NEW_ITEMCREATEMON_SERVER } #endif // __EVENT_1101 PROFILE_RUN( r11 ); #ifdef __EVENT_0117 CEventGeneric::GetInstance()->Spawn(); #endif // __EVENT_0117 PROFILE_RUN( r12 ); } LogPerformance( timeGetTime() ); } CLOSE_HANDLE( m_hClose ); CLOSE_HANDLE( hHeartbeat ); }
void ExitInstance( void ) { CRunObject::GetInstance()->Close(); /* #ifdef __GIFTBOX0213 CDPAccountClient::GetInstance()->DeleteDPObject(); #endif // __GIFTBOX0213 */ g_DPSrvr.DeleteDPObject(); g_DPCoreClient.DeleteDPObject(); g_dpDBClient.DeleteDPObject(); g_WorldMng.Free(); #ifndef __VM_0820 #ifndef __MEM_TRACE SAFE_DELETE( CUser::m_pPool ); SAFE_DELETE( CMover::m_pPool ); SAFE_DELETE( CActionMover::m_pPool ); SAFE_DELETE( CAIMonster::m_pPool ); SAFE_DELETE( CItem::m_pPool ); #endif // __MEM_TRACE #endif // __VM_0820 g_PartyMng.Clear(); #ifndef __VM_0820 #ifndef __MEM_TRACE SAFE_DELETE( CParty::m_pPool ); #endif // __MEM_TRACE #endif // __VM_0820 g_ChattingMng.Clear(); #ifndef __VM_0820 #ifndef __MEM_TRACE SAFE_DELETE( CChatting::m_pPool ); #endif // __MEM_TRACE #endif // __VM_0820 g_GuildWarMng.Clear(); g_GuildMng.Clear(); #if __VER >= 13 // __HOUSING CHousingMng::GetInstance()->Clear(); #endif // __HOUSING #ifndef __VM_0820 #ifndef __MEM_TRACE SAFE_DELETE( CGuildMember::sm_pPool ); SAFE_DELETE( CGuild::sm_pPool ); SAFE_DELETE( CAIPet::m_pPool ); SAFE_DELETE( CAIKrrr::m_pPool ); SAFE_DELETE( CAIGuard::m_pPool ); SAFE_DELETE( CAIClockWorks::m_pPool ); SAFE_DELETE( CAIBigMuscle::m_pPool ); SAFE_DELETE( CAIBear::m_pPool ); #endif // __MEM_TRACE #endif // __VM_0820 UninitializeNetLib(); UninitializeScriptLib(); #ifndef __VM_0820 #ifndef __MEM_TRACE SAFE_DELETE( CAIPet::m_pPool ); #endif // __MEM_TRACE #endif // __VM_0820 g_Object3DMng.Destroy(); prj.m_modelMng.DeleteDeviceObjects(); #if __VER >= 12 // __LORD CSLord::Instance()->DestroyColleagues(); #endif // __LORD }