//------------------------------------------------------------------------------ // ServerSelectionDialog.cpp // (C) 2005 ckbang //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "SceneBase.h" #include "BattleScene.h" #include "InterfaceManager.h" #include ".\ServerSelectionDialog.h" #include "LoginScene.h" WzID ServerSelectionDialog::m_wzId[DIALOG_MAX] = { StrToWzID("B000"), StrToWzID("L000"), }; //------------------------------------------------------------------------------ /** */ ServerSelectionDialog::ServerSelectionDialog() { ParseServerListFile(); m_curServerCounts = 0; } //------------------------------------------------------------------------------ /** */ ServerSelectionDialog::~ServerSelectionDialog() { } //------------------------------------------------------------------------------ /** */ void ServerSelectionDialog::Init( CDrawBase * pDrawBase ) { MoveWindowWZ( -1.0f, -1.0f ); } //------------------------------------------------------------------------------ /** */ void ServerSelectionDialog::showWindow( BOOL val ) { if (val) { MoveWindowWZ( -1.0f, -1.0f ); } else { _asm nop; } } //------------------------------------------------------------------------------ /** */ void ServerSelectionDialog::ServerSelected() { CCtrlListWZ * pLCtrl = (CCtrlListWZ *)getControl( DIALOG_SERVER_LIST ); int CurSelection = pLCtrl->GetCurSel(); if (CurSelection < 0) { // ¼±ÅÃÇØ¼­ ¹ÝÀü½ÃŲ ¸ñ·ÏÀÌ ¾ø´Ù. // ¸ñ·Ï¿¡¼­ Çϳª¸¦ °í¸£½Ê½Ã¿À WzColor color=0xFFFFFFFF; TCHAR szMessage[MAX_MESSAGE_LENGTH]; g_InterfaceManager.GetInterfaceString( eST_SELECT_SERVER_LIST, szMessage, MAX_MESSAGE_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, 10000, &color ); return; } _ServerInfo *psvinfo = NULL; for (UINT i=0; ivSvLists[i].curPos == CurSelection) { psvinfo = &this->vSvLists[i]; break; } if (psvinfo && (CurSelection < m_curServerCounts)) { // // --> ¼­¹ö ¼±Åà // MSG_C2S_ASK_SVRSELECT SendPacket; SendPacket.m_byCategory = CL_AUTH; SendPacket.m_byProtocol = CL_AUTH_C2S_ASK_SVRSELECT; SendPacket.bySelectIndex = psvinfo->altIndex; //¼±ÅÃÇÑ ¼­¹ö¿ùµåÀÇ À妽º g_LoginScene.checkSendPacket(sizeof(MSG_C2S_ASK_SVRSELECT), (char *)&SendPacket); g_InterfaceManager.ShowDialog( InterfaceManager::DIALOG_SERVER_SELECTION, FALSE ); } } //------------------------------------------------------------------------------ /** */ void ServerSelectionDialog::MessageProc( SI_MESSAGE * pMessage ) { switch( pMessage->eResultMsg ) { case RT_MSG_LBUTTONCLICK: { switch( getCtrlIDToPos( pMessage->dwCtrlID ) ) { case DIALOG_SERVER_SELECTED: { this->ServerSelected(); } break; } } break; case RT_MSG_LBUTTONDCLICK: { this->ServerSelected(); } break; //case RT_MSG_EDIT_ENTERKEYDOWN: // { // CCtrlListWZ * pLCtrl = (CCtrlListWZ *)getControl( DIALOG_SERVER_LIST ); // int CurSelection = pLCtrl->GetCurSel(); // unsigned int i; // for (i=0; ivSvLists[i].curPos == CurSelection) // break; // if (i ¼­¹ö ¼±Åà // // // MSG_C2S_ASK_SVRSELECT SendPacket; // SendPacket.m_byCategory = CL_AUTH; // SendPacket.m_byProtocol = CL_AUTH_C2S_ASK_SVRSELECT; // SendPacket.bySelectIndex = this->vSvLists[i].altIndex; //¼±ÅÃÇÑ ¼­¹ö¿ùµåÀÇ À妽º // g_LoginScene.checkSendPacket(sizeof(MSG_C2S_ASK_SVRSELECT), (char *)&SendPacket); // g_InterfaceManager.ShowDialog( InterfaceManager::DIALOG_SERVER_SELECTION, FALSE ); // } // } // break; } } //------------------------------------------------------------------------------ /** */ const char serverListFileName[] = "GameServerList_Dev.ini"; const char serverListFileName_public[] = "GameServerList_Public.ini"; void ServerSelectionDialog::ParseServerListFile() { DWORD dwError = GetCurrentDirectory( 512, m_szFullPath ); if(0 == dwError) { ASSERT(0); } strcat(m_szFullPath, "\\"); if (GENERALPARAM->GetPublic()) { strcat(m_szFullPath, serverListFileName_public); // ÁÖ¾îÁö´Â ÆÄÀÏ À̸§¿¡ ´ëÇÑ Ç® ÆÐ½º¸¦ ¼³Á¤ÇÔ } else { strcat(m_szFullPath, serverListFileName); // ÁÖ¾îÁö´Â ÆÄÀÏ À̸§¿¡ ´ëÇÑ Ç® ÆÐ½º¸¦ ¼³Á¤ÇÔ } FILE *fp; fp = fopen (m_szFullPath, "r"); if (fp == NULL) { ASSERT( !"¼­¹ö ¸ñ·ÏÆÄÀÏ Àоî¿À±â ½ÇÆÐÀÔ´Ï´Ù" ); return; } unsigned int i; char buf[1024]; while (!feof(fp)) { fgets(buf, 100, fp); if (!strncmp (buf, "[GROUP]", 5)) { while (1) { fgets(buf, 100, fp); if (buf[0] == ' ' || buf[0] == '\n') break; _ServerGroup svGroup; std::string strToken; std::string strConv; strToken = strtok( buf, "="); for (i=0; ivSvLists.push_back(svInfo); } } } if (vSvLists.size()) { std::string compName = "[GAME_INFO]"; int compLen = strlen(compName.c_str()); if (!strncmp (buf, compName.c_str(), compLen)) { while (1) { fgets(buf, 100, fp); if (buf[0] == ' ' || buf[0] == '\n') break; if (buf[0] == ';') continue; std::string strToken; std::string strConv; strToken = strtok( buf, "="); for (i=0; ivSvLists.size(); ++i) if (vSvLists[i].Index == index) vSvLists[i].altIndex = altIndex; } } } } fclose (fp); } //------------------------------------------------------------------------------ /** */ void ServerSelectionDialog::update() { CCtrlListWZ * pLCtrl = (CCtrlListWZ *)getControl( DIALOG_SERVER_LIST ); pLCtrl->DeleteItemAll(); pLCtrl->SetBeginDrawIndex(0); char buf[4096]; //sprintf (buf, "¼­¹ö ¼ö: %d", g_LoginScene.GetServerCounts()); //pLCtrl->SetItemText(pLCtrl->InsertItemBack(),buf); WORD* pwServerStatusLists = g_LoginScene.GetServerStatusLists(); int sell = 0; m_curServerCounts = 0; for (unsigned int i=0; ivSvLists[i].altIndex; if (this->vSvLists[i].altIndex == -1) continue; int svStat = pwServerStatusLists[i]; pLCtrl->SetColorText(WzColor_RGBA( 0, 0, 0, 255 )); if (svStat != 65535) { this->vSvLists[i].curPos = sell++; sprintf (buf, "(%d) No. %02d | %s", this->vSvLists[i].curPos, this->vSvLists[i].altIndex, (char *)this->vSvLists[i].strName.c_str()); pLCtrl->SetItemText(pLCtrl->InsertItemBack(),buf); m_curServerCounts++; } } pLCtrl->SetUnuseSelBar(TRUE); } //------------------------------------------------------------------------------ /** */ POSTYPE ServerSelectionDialog::getCtrlIDToPos( WzID wzId ) { for( POSTYPE i = 0 ; i < DIALOG_MAX ; ++i ) { if( m_wzId[i] == wzId ) { return i; } } return DIALOG_MAX; } //------------------------------------------------------------------------------ /** */ CControlWZ * ServerSelectionDialog::getControl( POSTYPE AtPos ) { ASSERT( AtPos < DIALOG_MAX ); return GetControlWZ( m_wzId[AtPos] ); }