#include "stdafx.h" #include "ServerStage.h" #include "ServerUIManager.h" #include "StageManager.h" #include "GameResourceManager.h" #include "IntroStage.h" #include "ServerWindow.h" #include "Application.h" cServerStage::cServerStage() : mpServerUIManager(0) , mLoadComplete( false ) , mCheckServerComplete( false ) { } cServerStage::~cServerStage() { } void cServerStage::Init( cStageManager* pStageManager ) { mpStageManager = pStageManager; } void cServerStage::InitStage() { if( mInit ) return; if( GAMERESOURCEMAN->InitServer() == false ) { assert(0); } /// UI mpServerUIManager = new cServerUIManager; mpServerUIManager->Init(); mInit = true; } void cServerStage::Exit() { if( GAMERESOURCEMAN ) GAMERESOURCEMAN->LoadEnd(); SAFE_DELETE( mpServerUIManager ); mpStageManager = 0; } void cServerStage::Open() { /// ui mpServerUIManager->Open(); mLoadComplete = false; mCheckServerComplete = false; /// 070404 Ãß°¡ - °ûöÁß [¼­¹ö¸®½ºÆ® ¿äû] if ( NETWORK->IsConnected( ) == true ) ReqServerList(); #ifdef NOCONNECT_SERVER mpStageManager->ChangeStage( eStage_Intro ); #endif cIntroStage* stage = (cIntroStage*)mpStageManager->GetStage( eStage_Intro ); if( stage ) stage->ClearBackImage(); if( GAMERESOURCEMAN->LoadInitData3() == false ) { assert(0); } } void cServerStage::Close() { if( GAMERESOURCEMAN ) GAMERESOURCEMAN->LoadEnd(); /// UI mpServerUIManager->Close(); } void cServerStage::Process( unsigned long /*deltaTime*/, unsigned long accumTime ) { unsigned int flag = GAMERESOURCEMAN->CheckInitData(); if( flag == eData_Error ) { assert(0); NiMessageBox( "Failed load gameData. Please reinstall client or patch.", "GameData Error" ); ::SendMessage( THEAPP->GetHWND(), WM_CLOSE, 0, 0 ); ::PostQuitMessage(0); return; } else if( flag == eData_End ) { mLoadComplete = true; GAMERESOURCEMAN->LoadEnd(); } if( mLoadComplete == true && mCheckServerComplete == true ) { /// ¸ð´Þ ó¸® UIMAN->SendEventTopMsgBox( true ); /// ½ºÅ×ÀÌÁö º¯°æ STAGEMAN->ChangeStage( eStage_Select ); } /// UI mpServerUIManager->Process( accumTime ); } void cServerStage::ReqServerList() { MSGROOT msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_USER; msg.Protocol = NM_USER_SERVER_LIST_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); /// Msgbox Ãâ·Â UIMAN->CreateMsgBox( eStage_Server, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 9 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); mpServerUIManager->SetEnableConnectBtn( false ); } void cServerStage::NetworkMsgParser( unsigned long , char* pMsg, unsigned long /*length*/ ) { /// 070404 Ãß°¡ - °ûöÁß [¼­¹ö¸®½ºÆ® & ä³Î¸®½ºÆ® & °ÔÀÓÁ¢¼Ó ÀÀ´ä] MSGROOT* pMsgRoot = (MSGROOT*)pMsg; switch( pMsgRoot->Category ) { case NM_USER: { switch( pMsgRoot->Protocol ) { case NM_USER_SERVER_LIST_RES: { /// ¼­¹ö¸®½ºÆ® ÀÀ´ä - ¼º°ø½Ã ¼­¹ö¸®½ºÆ® / ½ÇÆÐ½Ã ÀÀ´ä ¾øÀ½ MSG_RES_SERVERLIST* pMsgResServerlist = (MSG_RES_SERVERLIST*)pMsg; cServerWindow* pSrvWindow = (cServerWindow*)UIMAN->FindNodeByID( eUIID_SERVER_WINDOW ); /// ¼­¹ö¸®½ºÆ® »èÁ¦. if( pSrvWindow ) { pSrvWindow->Clear(); for ( unsigned int i = 0; i < pMsgResServerlist->RowCount; i++ ) { pSrvWindow->AddServer( pMsgResServerlist->Servers[ i ].NumOfServer, pMsgResServerlist->Servers[ i ].Status, pMsgResServerlist->Servers[ i ].Name, pMsgResServerlist->Servers[ i ].Age ); } pSrvWindow->UpdateServer( pMsgResServerlist->ServerNo ); pSrvWindow->UpdateButton(); } else assert(0); /// ¸ð´Þ Á¤º¸ °»½Å UIMAN->SendEventTopMsgBox( true ); /// À©µµ¿ì Ȱ¼ºÈ­ mpServerUIManager->Visible(); /// ºñȰ¼ºÈ­ bool enable = ( pMsgResServerlist->RowCount == 0 ) ? false : true; mpServerUIManager->SetEnableConnectBtn( enable ); } break; case NM_USER_COME_IN_GAME_RES: { /// °ÔÀÓÁ¢¼Ó½ÂÀÎ ÀÀ´ä - 0¼º°ø½Ã / 1½ÇÆÐ½Ã MSG_RES_COMEIN_GAME* msg = (MSG_RES_COMEIN_GAME*)pMsg; mpServerUIManager->SetEnableWindow( true ); if ( msg->ErrorCode == ERROR_COMEIN_GAME_SUCCESS ) { /// } else { /// ½ÇÆÐ½Ã ó¸® UIMAN->DestroyMsgBox( eMBEVENT_CONNECT_GAMESRV ); // ¼ºÀÎ ¼­¹ö STAGEMAN->SetAdultServer( false ); switch( msg->ErrorCode ) { case ERROR_COMEIN_GAME_FAIL: { UIMAN->CreateMsgBox( eStage_Server, eMSGBOX_MODAL, eMBEVENT_SERVER_REFRESH, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 190 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } break; case ERROR_COMEIN_GAME_DB: case ERROR_COMEIN_GAME_SYSTEM: { UIMAN->CreateMsgBox( eStage_Server, eMSGBOX_MODAL, eMBEVENT_SERVER_REFRESH, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 188 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } break; case ERROR_COMEIN_GAME_AGE: { UIMAN->CreateMsgBox( eStage_Server, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 189 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } break; } } } break; case NM_USER_GAMESRV_RES: { /// °ÔÀÓ¼­¹öÀÎÁõ ÀÀ´ä - 0¼º°ø½Ã / 1½ÇÆÐ½Ã MSG_RES_GAMESRV* msg = (MSG_RES_GAMESRV*)pMsg; mpServerUIManager->SetEnableConnectBtn( true ); if ( msg->ErrorCode == 0 ) { mCheckServerComplete = true; if( mLoadComplete == true ) { /// ¸ð´Þ ó¸® UIMAN->SendEventTopMsgBox( true ); /// ½ºÅ×ÀÌÁö º¯°æ STAGEMAN->ChangeStage( eStage_Select ); } } else { UIMAN->SendEventTopMsgBox( false ); UIMAN->CreateMsgBox( eStage_Server, eMSGBOX_MODAL, eMBEVENT_CONNECT_DEAD, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 161 ), GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } } break; } } break; } } void cServerStage::MsgBoxEventParser( unsigned int event, unsigned int result, void* /*exData*/ ) { switch( event ) { case eMBEVENT_CONNECT_DEAD: { ::SendMessage( THEAPP->GetHWND(), WM_CLOSE, 0, 0 ); ::PostQuitMessage(0); } break; case eMBEVENT_SERVER_REFRESH: { /// ¼­¹ö ¸ñ·Ï Àç¿äû ReqServerList(); } break; } }