// RylServerRunSetupDlg.cpp : ±¸Çö ÆÄÀÏ // #include "stdafx.h" #include "RylServerRunSetup.h" #include "RylServerRunSetupDlg.h" #include "./Misc/GlobalFunc.h" #include #include #include #include #include #include #ifdef _DEBUG #define new DEBUG_NEW #endif class CRemoveEmptyRunID { public: typedef std::vector DeleteRunID; CRemoveEmptyRunID(DeleteRunID& deleteRunID) : m_DeleteRunID(deleteRunID) { } bool operator() (unsigned long dwRunID, unsigned long dwServerID) { if(!CManageClientManager::GetInstance().HasRunInfo(dwRunID)) { m_DeleteRunID.push_back(dwRunID); } return true; } private: DeleteRunID& m_DeleteRunID; }; // ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. class CAboutDlg : public CDialog { public: CAboutDlg(); // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍ enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿ø // ±¸Çö protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CRylServerRunSetupDlg ´ëÈ­ »óÀÚ CRylServerRunSetupDlg::CRylServerRunSetupDlg(CWnd* pParent /*=NULL*/) : CDialog(CRylServerRunSetupDlg::IDD, pParent) , m_strServerID(_T("")) , m_dwServerID(0) , m_strSelServerID(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CRylServerRunSetupDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_SERVERGROUP_CB, m_ctrlServerGroupCb); DDX_Control(pDX, IDC_SERVERTYPE_CB, m_ctrlServerTypeCb); DDX_Control(pDX, IDC_ZONE_CB, m_ctrlZoneCb); DDX_Control(pDX, IDC_CHANNEL_CB, m_ctrlChannelCb); DDX_Control(pDX, IDC_RUNINFO_LIST, m_ctrlRunInfoList); DDX_Text(pDX, IDC_SERVERID_EDIT, m_strServerID); DDX_Text(pDX, IDC_SELSERVERID_EDIT, m_strSelServerID); } BEGIN_MESSAGE_MAP(CRylServerRunSetupDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_SERVERGROUP_CB, OnCbnSelchangeServergroupCb) ON_CBN_SELCHANGE(IDC_SERVERTYPE_CB, OnCbnSelchangeServertypeCb) ON_CBN_SELCHANGE(IDC_ZONE_CB, OnCbnSelchangeZoneCb) ON_CBN_SELCHANGE(IDC_CHANNEL_CB, OnCbnSelchangeChannelCb) ON_BN_CLICKED(IDC_MATCH_BTN, OnBnClickedMatchBtn) ON_NOTIFY(LVN_ITEMCHANGED, IDC_RUNINFO_LIST, OnLvnItemchangedRuninfoList) END_MESSAGE_MAP() class CSetServerStringToComboBox { public: CSetServerStringToComboBox(CComboBox& comboBox) : m_ComboBox(comboBox) { } bool operator() (unsigned long dwKey, const char* szString) { int nInsertPos = m_ComboBox.GetCount(); m_ComboBox.InsertString(nInsertPos, szString); m_ComboBox.SetItemData(nInsertPos, dwKey); return true; } private: CComboBox& m_ComboBox; }; // CRylServerRunSetupDlg ¸Þ½ÃÁö 󸮱â BOOL CRylServerRunSetupDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. CRylServerGroupSetup::GetInstance().EnumSetup( CRylServerGroupSetup::SERVER_GROUP, CSetServerStringToComboBox(m_ctrlServerGroupCb)); CRylServerGroupSetup::GetInstance().EnumSetup( CRylServerGroupSetup::SERVER_TYPE, CSetServerStringToComboBox(m_ctrlServerTypeCb)); CRylServerGroupSetup::GetInstance().EnumSetup( CRylServerGroupSetup::SERVER_ZONE, CSetServerStringToComboBox(m_ctrlZoneCb)); CRylServerGroupSetup::GetInstance().EnumSetup( CRylServerGroupSetup::SERVER_CHANNEL, CSetServerStringToComboBox(m_ctrlChannelCb)); m_ctrlServerGroupCb.SetCurSel(0); m_ctrlServerTypeCb.SetCurSel(0); m_ctrlZoneCb.SetCurSel(0); m_ctrlChannelCb.SetCurSel(0); m_ctrlRunInfoList.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB ); m_ctrlRunInfoList.SetBkColor ( COLORREF RGB( 255, 255, 215) ); m_ctrlRunInfoList.SetTextBkColor ( COLORREF RGB( 255, 255, 215) ); m_ctrlRunInfoList.InsertColumn ( 0, _T("RunID"), LVCFMT_LEFT, 45 ); m_ctrlRunInfoList.InsertColumn ( 1, _T("ServerID"), LVCFMT_LEFT, 100 ); m_ctrlRunInfoList.InsertColumn ( 2, _T("IP"), LVCFMT_LEFT, 105 ); m_ctrlRunInfoList.InsertColumn ( 3, _T("Name"), LVCFMT_LEFT, 100 ); m_ctrlRunInfoList.InsertColumn ( 4, _T("Path"), LVCFMT_LEFT, 390 ); m_ctrlRunInfoList.InsertColumn ( 5, _T("Option"), LVCFMT_LEFT, 140 ); CRylServerBindRunID::GetInstance().Load(); CRemoveEmptyRunID::DeleteRunID deleteRunID; CRylServerBindRunID::GetInstance().EnumID(CRemoveEmptyRunID(deleteRunID)); CRemoveEmptyRunID::DeleteRunID::iterator pos = deleteRunID.begin(); CRemoveEmptyRunID::DeleteRunID::iterator end = deleteRunID.end(); for(; pos != end; ++pos) { CRylServerBindRunID::GetInstance().RemoveFromRunID(*pos); } RunInfoListSet(); return TRUE; // ÄÁÆ®·Ñ¿¡ ´ëÇÑ Æ÷Ä¿½º¸¦ ¼³Á¤ÇÏÁö ¾ÊÀ» °æ¿ì TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. } void CRylServerRunSetupDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é // ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. void CRylServerRunSetupDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ // ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. HCURSOR CRylServerRunSetupDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } // ------------------------------------------------------------------------------ // ÄÞº¸ ¹Ú½º ¼±Åà º¯°æ À̺¥Æ® ó¸® void CRylServerRunSetupDlg::OnCbnSelchangeServergroupCb() { ServerIDSet(); } void CRylServerRunSetupDlg::OnCbnSelchangeServertypeCb() { // ¼­¹ö ŸÀÔ ÄÞº¸ º¯°æ ½Ã¿¡´Â Ȱ¼ºÈ­, ºñȰ¼ºÈ­ ½ÃÄÑ¾ß ÇÒ Ç׸ñÀÌ ÀÖÀ½ ServerIDSet(); SERVER_ID serverID; serverID.dwID = m_dwServerID; m_ctrlServerGroupCb.EnableWindow(false); m_ctrlZoneCb.EnableWindow(false); m_ctrlChannelCb.EnableWindow(false); switch( serverID.GetType() ){ case CServerSetup::LoginServer: m_ctrlChannelCb.EnableWindow(true); break; case CServerSetup::UIDServer: m_ctrlServerGroupCb.EnableWindow(true); break; case CServerSetup::AuthServer: m_ctrlServerGroupCb.EnableWindow(true); break; case CServerSetup::AgentServer: m_ctrlServerGroupCb.EnableWindow(true); break; case CServerSetup::GameServer: m_ctrlServerGroupCb.EnableWindow(true); m_ctrlZoneCb.EnableWindow(true); m_ctrlChannelCb.EnableWindow(true); break; case CServerSetup::ChatServer: m_ctrlServerGroupCb.EnableWindow(true); m_ctrlChannelCb.EnableWindow(true); break; }; } void CRylServerRunSetupDlg::OnCbnSelchangeZoneCb() { ServerIDSet(); } void CRylServerRunSetupDlg::OnCbnSelchangeChannelCb() { ServerIDSet(); } // ------------------------------------------------------------------------------ void CRylServerRunSetupDlg::ServerIDSet() { SERVER_ID ServerID; ServerID.dwID = 0; ServerID.sID.Group = static_cast(m_ctrlServerGroupCb.GetItemData(m_ctrlServerGroupCb.GetCurSel())); ServerID.sID.Type = static_cast(m_ctrlServerTypeCb.GetItemData(m_ctrlServerTypeCb.GetCurSel())); ServerID.sID.ID = static_cast(m_ctrlZoneCb.GetItemData(m_ctrlZoneCb.GetCurSel())); ServerID.sID.Channel = static_cast(m_ctrlChannelCb.GetItemData(m_ctrlChannelCb.GetCurSel())); if( ServerID.GetType() != CServerSetup::GameServer ) { ServerID.sID.ID = 0; } if( ServerID.GetType() == CServerSetup::LoginServer ) { ServerID.sID.Group = 0; } if( ServerID.GetType() == CServerSetup::UIDServer ) { // ServerID.sID.Group = 0; ServerID.sID.Channel = 0; } m_strServerID.Format( "0x%08X", ServerID.dwID ); m_dwServerID = ServerID.dwID; UpdateData(false); } class CRefreshRunInfoList { public: CRefreshRunInfoList(CListCtrl& ctrlList) : m_ctrlList(ctrlList) { } bool operator() (const ServerManage::RunInfo& runInfo) { const int MIN_BUFFER = 64; char szRunID[MIN_BUFFER]; char szServerID[MIN_BUFFER]; in_addr addr; addr.S_un.S_addr = runInfo.m_dwServerIP; _snprintf(szRunID, MIN_BUFFER - 1, "%u", runInfo.m_dwRunID); szRunID[MIN_BUFFER - 1] = 0; int nItemCount = m_ctrlList.GetItemCount(); m_ctrlList.InsertItem(nItemCount, ""); m_ctrlList.SetItemText(nItemCount, 0, szRunID); unsigned long dwServerID = 0; if(CRylServerBindRunID::GetInstance().GetServerID(runInfo.m_dwRunID, &dwServerID)) { _snprintf(szServerID, MIN_BUFFER - 1, "0x%08X", dwServerID); szServerID[MIN_BUFFER - 1] = 0; m_ctrlList.SetItemText(nItemCount, 1, szServerID); } else { m_ctrlList.SetItemText(nItemCount, 1, "not matched"); } m_ctrlList.SetItemText(nItemCount, 2, inet_ntoa(addr)); m_ctrlList.SetItemText(nItemCount, 3, runInfo.m_szServerName); m_ctrlList.SetItemText(nItemCount, 4, runInfo.m_szPath); m_ctrlList.SetItemText(nItemCount, 5, runInfo.m_szOption); return true; } private: CListCtrl& m_ctrlList; }; void CRylServerRunSetupDlg::RunInfoListSet() { // ½ÇÇà Á¤º¸ ¸®½ºÆ® ÄÁÆ®·Ñ °»½Å m_ctrlRunInfoList.DeleteAllItems(); CManageClientManager::GetInstance().EnumRunInfo(CRefreshRunInfoList(m_ctrlRunInfoList)); } void CRylServerRunSetupDlg::OnBnClickedMatchBtn() { UpdateData(true); int nSelIndex = m_ctrlRunInfoList.GetNextItem( -1, LVNI_SELECTED ); if(-1 != nSelIndex) { unsigned long dwRunID = atol(m_ctrlRunInfoList.GetItemText(nSelIndex, 0)); if( "not matched" != m_ctrlRunInfoList.GetItemText(nSelIndex, 1) ) // ÀÌ¹Ì ¸ÅĪµÇ¾îÀÖ´Â °æ¿ì { CRylServerBindRunID::GetInstance().RemoveFromRunID( dwRunID ); CRylServerBindRunID::GetInstance().Save(); } if(!CRylServerBindRunID::GetInstance().SetID(dwRunID, m_dwServerID)) { AfxMessageBox("Binding Error!"); } else { CRylServerBindRunID::GetInstance().Save(); RunInfoListSet(); } } else { AfxMessageBox("Select bindinfo. then match~"); } } void CRylServerRunSetupDlg::OnLvnItemchangedRuninfoList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); char szSelServerID[MAX_PATH] = ""; int nSelIndex = m_ctrlRunInfoList.GetNextItem( -1, LVNI_SELECTED ); if(-1 != nSelIndex) { unsigned long dwRunID = atol(m_ctrlRunInfoList.GetItemText(nSelIndex, 0)); m_ctrlRunInfoList.GetItemText( nSelIndex, 1, szSelServerID, sizeof(szSelServerID) ); m_strSelServerID.Format( "%s", szSelServerID ); SERVER_ID serverID; CRylServerBindRunID::GetInstance().GetServerID( dwRunID, &serverID.dwID ); /* m_ctrlServerGroupCb.SetCurSel ( serverID.GetGroup() ); m_ctrlServerTypeCb.SetCurSel ( serverID.GetType() ); m_ctrlZoneCb.SetCurSel ( serverID.GetZone() ); m_ctrlChannelCb.SetCurSel ( serverID.GetChannel() ); m_ctrlServerGroupCb.EnableWindow(false); m_ctrlZoneCb.EnableWindow(false); m_ctrlChannelCb.EnableWindow(false); switch( serverID.GetType() ){ case CServerSetup::AuthServer: m_ctrlServerGroupCb.EnableWindow(true); break; case CServerSetup::AgentServer: m_ctrlServerGroupCb.EnableWindow(true); break; case CServerSetup::GameServer: m_ctrlServerGroupCb.EnableWindow(true); m_ctrlZoneCb.EnableWindow(true); m_ctrlChannelCb.EnableWindow(true); break; case CServerSetup::ChatServer: m_ctrlServerGroupCb.EnableWindow(true); m_ctrlChannelCb.EnableWindow(true); break; }; */ } UpdateData( false ); *pResult = 0; }