#include "stdafx.h" #include "ServiceMonitor.h" #include "PartitionDialog.h" #include "ConnectionDialog.h" #include "NetConnection.h" #include "MainFrm.h" #include "BasePartitionView.h" #define DNPRJSAFE // DNPrjSafe.h Á¦¿Ü #include "DNPacket.h" #include "DNServerDef.h" #include "DNServerPacket.h" CPartitionDlg::CPartitionDlg(CWnd* pParent /*=NULL*/) : CDialog(CPartitionDlg::IDD, pParent) { m_pSession = NULL; } void CPartitionDlg::OnOK() { // ´ÙÀ̾ó·Î±×°¡ ESC¸¦ ´­·¶À»¶§ ²¨ÁöÁö ¾Êµµ·Ï ó¸®ÇÑ´Ù. } void CPartitionDlg::OnCancel() { // ´ÙÀ̾ó·Î±×°¡ ESC¸¦ ´­·¶À»¶§ ²¨ÁöÁö ¾Êµµ·Ï ó¸®ÇÑ´Ù. } void CPartitionDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_LOGDAYS, m_LogDays); } BEGIN_MESSAGE_MAP(CPartitionDlg, CDialog) ON_BN_CLICKED(IDC_MDB_CONNECTBUTTON, &CPartitionDlg::OnBnClickedMdbConnectbutton) ON_BN_CLICKED(IDC_MDB_EXIT, &CPartitionDlg::OnBnClickedMdbExit) ON_BN_CLICKED(IDC_MDB_ERRORLOGBUTTON, &CPartitionDlg::OnBnClickedMdbErrorlogbutton) ON_BN_CLICKED(IDC_MDB_REFRESHWORLDINFO, &CPartitionDlg::OnBnClickedMdbRefreshworldinfo) ON_BN_CLICKED(IDC_START_PROCESS, &CPartitionDlg::OnBnClickedStartProcess) ON_BN_CLICKED(IDC_STOP_PROCESS, &CPartitionDlg::OnBnClickedStopProcess) ON_BN_CLICKED(IDC_STOPFORCE_PROCESS, &CPartitionDlg::OnBnClickedStopForceProcess) ON_BN_CLICKED(IDC_EXCEPT_REPORT, &CPartitionDlg::OnBnClickedExceptReport) ON_BN_CLICKED(IDC_MDB_RESETDELAYCOUNT, &CPartitionDlg::OnBnClickedMdbResetdelaycount) ON_BN_CLICKED(IDC_MDB_CHANGEPW, &CPartitionDlg::OnBnClickedMdbChangepw) END_MESSAGE_MAP() BOOL CPartitionDlg::Create(const RECT &rect, CWnd *pParentWnd) { if(!CDialog::Create(IDD_PARDLG, pParentWnd)) return FALSE; MoveWindow(rect.left, rect.top, (rect.right-rect.left), (rect.bottom-rect.top),TRUE); ModifyStyle(0,WS_VISIBLE,0); InvalidateRect(NULL, TRUE); m_pParentWnd = pParentWnd; if (!::IsWindow(m_ChangePasswordDialog.GetSafeHwnd())) { m_ChangePasswordDialog.Create(IDD_CHGPWDLG, this); } return TRUE; } void CPartitionDlg::AddProcessType(int nWorldID) { TCHAR szProcessType[MAX_PATH] = { _T('\0'), }; if (EV_WORLDID_ALL == nWorldID) _sntprintf_s(szProcessType, _countof(szProcessType), _T("All Servers")); else _sntprintf_s(szProcessType, _countof(szProcessType), _T("World %d"), nWorldID); CComboBox* pCombox = static_cast(GetDlgItem(IDC_COMBO_PROCESSTYPE)); if (!pCombox) return; for (int i=0; i<(int)m_ProcessType.size(); i++) { if (nWorldID == m_ProcessType[i].nWorldID) return; } ComboBoxProcess process; process.nSelect = pCombox->GetCount(); process.nWorldID = nWorldID; m_ProcessType.push_back(process); pCombox->AddString(szProcessType); pCombox->SetCurSel(0); } void CPartitionDlg::SetSession(CNetSession* pSession) { m_pSession = pSession; m_ChangePasswordDialog.SetSession (pSession); } void CPartitionDlg::OnBnClickedMdbConnectbutton() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CConnectionDialog& ConnectionDialog = static_cast(::AfxGetApp())->GetConnectionDialog(); if (::IsWindow(ConnectionDialog.GetSafeHwnd())) ConnectionDialog.ShowWindow((!ConnectionDialog.IsWindowVisible())?(SW_NORMAL):(SW_HIDE)); } void CPartitionDlg::OnBnClickedMdbExit() { return; // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CMainFrame* pMainFrame = static_cast(::AfxGetApp())->GetMainFrame(); CBasePartitionView* pPartitionView = reinterpret_cast(m_pParentWnd); pMainFrame->RemovePartition (pPartitionView); } void CPartitionDlg::OnBnClickedMdbErrorlogbutton() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CBasePartitionView* pPartitionView = reinterpret_cast(m_pParentWnd); if (pPartitionView) pPartitionView->SetActiveErrorLog(); } void CPartitionDlg::OnBnClickedMdbRefreshworldinfo() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CBasePartitionView* pPartitionView = reinterpret_cast(m_pParentWnd); pPartitionView->Refreshworldinfo(); /* // test code if (!m_pSession || !m_pSession->IsConnect()) { ::AfxMessageBox(_T("Session is not connected !"), MB_ICONINFORMATION); return; } TMSServerDealyReq TxPacket; TxPacket.nType = SERVERTYPE_GAME; TxPacket.nSID = 1004; m_pSession->SendData(MANAGER2MONITOR_SERVER_DEALYINFO_REQ, 0, reinterpret_cast(&TxPacket), sizeof(TxPacket)); TMSServerDealyReq TxPacket2; TxPacket2.nType = SERVERTYPE_DB; TxPacket2.nSID = 1000; m_pSession->SendData(MANAGER2MONITOR_SERVER_DEALYINFO_REQ, 0, reinterpret_cast(&TxPacket2), sizeof(TxPacket2)); */ } void CPartitionDlg::OnBnClickedStartProcess() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // ¼¼¼Ç if (!m_pSession || !m_pSession->IsConnect()) { ::AfxMessageBox(_T("Session is not connected !"), MB_ICONINFORMATION); return; } // ÄÁÆ®·Ñ CComboBox* pCombox = static_cast(GetDlgItem(IDC_COMBO_PROCESSTYPE)); if (!pCombox) { ::AfxMessageBox(_T("Process Control Error !"), MB_ICONERROR); return; } // ±ÇÇÑ if (SERVERMONITOR_LEVEL_ADMIN > m_pSession->GetMonitorLevel()) { ::AfxMessageBox(_T("You have no authority to request"), MB_ICONWARNING); return; } int nWorldID = -1; int nSelect = pCombox->GetCurSel(); for (int i=0; i<(int)m_ProcessType.size(); i++) { if (nSelect == m_ProcessType[i].nSelect) { nWorldID = m_ProcessType[i].nWorldID; break; } } if (nWorldID == -1) { ::AfxMessageBox(_T("Process is not selected"), MB_ICONERROR); return; } CServiceInfo::TP_LISTSERVAUTO ServerList; if (m_pSession->GetServiceInfo()->GetRecvMode(EV_SRT_STRUCT)) m_pSession->GetServiceInfo()->GetServerList(EV_SMT_REAL, ServerList, nWorldID, TRUE); else { ::AfxMessageBox(_T("Now loading, please try again for a while"), MB_ICONINFORMATION); return; } if (ServerList.size() <= 0) { ::AfxMessageBox(_T("None Process!"), MB_ICONWARNING); return; } // Confirm if (IDOK != ::AfxMessageBox(_T("Are you sure to request ?"), MB_ICONQUESTION | MB_OKCANCEL)) return; TSMServiceStart TxPacket; memset (&TxPacket, 0x00, sizeof(TxPacket)); // START ALL if (nWorldID == EV_WORLDID_ALL) { ::AfxMessageBox(_T("Start All Process"), MB_ICONINFORMATION); TxPacket.nStartType = _SERVICE_START_ALL; m_pSession->SendData(MONITOR2MANAGER_STARTSERVICE, 0, reinterpret_cast(&TxPacket), (static_cast((sizeof(TxPacket) - (sizeof(TxPacket.nIDs[0]) * (_countof(TxPacket.nIDs) - TxPacket.cCount)))&ULONG_MAX))); return; } // START EACH TxPacket.nStartType = _SERVICE_START_EACH; for (int i=0; i<(int)ServerList.size(); i++) { TxPacket.nIDs[TxPacket.cCount++] = ServerList[i].m_ServerID; if (_countof(TxPacket.nIDs) <= TxPacket.cCount) { ::AfxMessageBox(CVarArg(_T("Item count you requested is over %d.\n\novered item will be ignored."), _countof(TxPacket.nIDs)), MB_ICONWARNING | MB_OK); break; } } if (TxPacket.cCount <= 0) ASSERT(0); ::AfxMessageBox(CVarArg(_T("Start Process[WorldID:%d]"), nWorldID), MB_ICONINFORMATION); m_pSession->SendData(MONITOR2MANAGER_STARTSERVICE, 0, reinterpret_cast(&TxPacket), (static_cast((sizeof(TxPacket) - (sizeof(TxPacket.nIDs[0]) * (_countof(TxPacket.nIDs) - TxPacket.cCount)))&ULONG_MAX))); } void CPartitionDlg::OnBnClickedStopProcess() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // ¼¼¼Ç if (!m_pSession || !m_pSession->IsConnect()) { ::AfxMessageBox(_T("Session is not connected !"), MB_ICONINFORMATION); return; } // ÄÁÆ®·Ñ CComboBox* pCombox = static_cast(GetDlgItem(IDC_COMBO_PROCESSTYPE)); if (!pCombox) { ::AfxMessageBox(_T("Process Control Error !"), MB_ICONERROR); return; } // ±ÇÇÑ if (SERVERMONITOR_LEVEL_SUPERADMIN > m_pSession->GetMonitorLevel()) { ::AfxMessageBox(_T("You have no authority to request"), MB_ICONWARNING); return; } int nWorldID = -1; int nSelect = pCombox->GetCurSel(); for (int i=0; i<(int)m_ProcessType.size(); i++) { if (nSelect == m_ProcessType[i].nSelect) { nWorldID = m_ProcessType[i].nWorldID; break; } } if (nWorldID == -1) { ::AfxMessageBox(_T("Process is not selected"), MB_ICONERROR); return; } CServiceInfo::TP_LISTSERVAUTO ServerList; if (m_pSession->GetServiceInfo()->GetRecvMode(EV_SRT_STRUCT)) m_pSession->GetServiceInfo()->GetServerList(EV_SMT_REAL, ServerList, nWorldID, TRUE); else { ::AfxMessageBox(_T("Now loading, please try again for a while"), MB_ICONINFORMATION); return; } if (ServerList.size() <= 0) { ::AfxMessageBox(_T("None Process!"), MB_ICONWARNING); return; } // Confirm if (IDOK != ::AfxMessageBox(_T("Are you sure to request ?"), MB_ICONQUESTION | MB_OKCANCEL)) return; TSMServiceStart TxPacket; memset (&TxPacket, 0x00, sizeof(TxPacket)); // STOP ALL if (nWorldID == EV_WORLDID_ALL) { ::AfxMessageBox(_T("Stop All Process (without db, village, game) for 5minutes"), MB_ICONINFORMATION); TxPacket.nStartType = _SERVICE_STOP_ALL; m_pSession->SendData(MONITOR2MANAGER_STOPSERVICE, 0, reinterpret_cast(&TxPacket), (static_cast((sizeof(TxPacket) - (sizeof(TxPacket.nIDs[0]) * (_countof(TxPacket.nIDs) - TxPacket.cCount)))&ULONG_MAX))); return; } // STOP EACH TxPacket.nStartType = _SERVICE_STOP_EACH; for (int i=0; i<(int)ServerList.size(); i++) { switch (ServerList[i].m_ServerType) { case EV_SVT_LG: case EV_SVT_DB: case EV_SVT_MA: continue; } if (ServerList[i].m_ServerState != EV_SVS_CNNT) { ::AfxMessageBox(CVarArg(_T("Terminate Process Busy[SID:%d]"), ServerList[i].m_ServerID), MB_ICONINFORMATION); continue; } TxPacket.nIDs[TxPacket.cCount++] = ServerList[i].m_ServerID; if (_countof(TxPacket.nIDs) <= TxPacket.cCount) { ::AfxMessageBox(CVarArg(_T("Item count you requested is over %d.\n\novered item will be ignored."), _countof(TxPacket.nIDs)), MB_ICONWARNING | MB_OK); break; } } if (TxPacket.cCount <= 0) return; ::AfxMessageBox(CVarArg(_T("Stop All[WorldID:%d] (without db, village, game) for 5minutes"), nWorldID), MB_ICONINFORMATION); m_pSession->SendData(MONITOR2MANAGER_STOPSERVICE, 0, reinterpret_cast(&TxPacket), (static_cast((sizeof(TxPacket) - (sizeof(TxPacket.nIDs[0]) * (_countof(TxPacket.nIDs) - TxPacket.cCount)))&ULONG_MAX))); } void CPartitionDlg::OnBnClickedStopForceProcess() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. // ¼¼¼Ç if (!m_pSession || !m_pSession->IsConnect()) { ::AfxMessageBox(_T("Session is not connected !"), MB_ICONINFORMATION); return; } // ÄÁÆ®·Ñ CComboBox* pCombox = static_cast(GetDlgItem(IDC_COMBO_PROCESSTYPE)); if (!pCombox) { ::AfxMessageBox(_T("Process Control Error !"), MB_ICONERROR); return; } // ±ÇÇÑ if (SERVERMONITOR_LEVEL_SUPERADMIN > m_pSession->GetMonitorLevel()) { ::AfxMessageBox(_T("You have no authority to request"), MB_ICONWARNING); return; } int nWorldID = -1; int nSelect = pCombox->GetCurSel(); for (int i=0; i<(int)m_ProcessType.size(); i++) { if (nSelect == m_ProcessType[i].nSelect) { nWorldID = m_ProcessType[i].nWorldID; break; } } if (nWorldID == -1) { ::AfxMessageBox(_T("Process is not selected"), MB_ICONERROR); return; } CServiceInfo::TP_LISTSERVAUTO ServerList; if (m_pSession->GetServiceInfo()->GetRecvMode(EV_SRT_STRUCT)) m_pSession->GetServiceInfo()->GetServerList(EV_SMT_REAL, ServerList, nWorldID, TRUE); else { ::AfxMessageBox(_T("Now loading, please try again for a while"), MB_ICONINFORMATION); return; } if (ServerList.size() <= 0) { ::AfxMessageBox(_T("None Process!"), MB_ICONWARNING); return; } // Confirm if (IDOK != ::AfxMessageBox(_T("Are you sure to request ?"), MB_ICONQUESTION | MB_OKCANCEL)) return; CServiceInfo::TP_LISTWRLDAUTO WorldList; m_pSession->GetServiceInfo()->GetWorldList(EV_SMT_REAL, WorldList, TRUE); for (int i=0; i<(int)WorldList.size(); i++) { if (nWorldID != EV_WORLDID_ALL && nWorldID != WorldList[i].m_WorldID) continue; TSMServiceStart TxPacket; memset (&TxPacket, 0x00, sizeof(TxPacket)); TxPacket.nStartType = _SERVICE_STOP_EACH_FORCE; m_pSession->GetServiceInfo()->GetServerList(EV_SMT_REAL, ServerList, WorldList[i].m_WorldID, TRUE); for (int i=0; i<(int)ServerList.size(); i++) { switch (ServerList[i].m_ServerType) { case EV_SVT_DB: case EV_SVT_LG: case EV_SVT_MA: { if (TxPacket.cCount < SERVERCONTROLMAX) TxPacket.nIDs[TxPacket.cCount++] = ServerList[i].m_ServerID; } break; } } if (TxPacket.cCount <= 0) return; m_pSession->SendData(MONITOR2MANAGER_STOPSERVICE, 0, reinterpret_cast(&TxPacket), (static_cast((sizeof(TxPacket) - (sizeof(TxPacket.nIDs[0]) * (_countof(TxPacket.nIDs) - TxPacket.cCount)))&ULONG_MAX))); } } void CPartitionDlg::OnBnClickedExceptReport() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. TCHAR szLogDays[SMIDLENMAX+1] = { _T('\0'), }; m_LogDays.GetWindowText(szLogDays, _countof(szLogDays)); int nLogDays = static_cast(_ttoi(szLogDays)); if (nLogDays > 255) return; TSMReportReq TxPacket; TxPacket.bBuild = true; TxPacket.cDays = (BYTE)nLogDays; TxPacket.nPage = 1; m_pSession->SendData(MONITOR2MANAGER_REPORT_REQ, 0, reinterpret_cast(&TxPacket), sizeof(TxPacket)); } void CPartitionDlg::OnBnClickedMdbResetdelaycount() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if (!m_pSession || !m_pSession->IsConnect()) { ::AfxMessageBox(_T("Session is not connected !"), MB_ICONINFORMATION); return; } m_pSession->GetServiceInfo()->ResetDelayCount(EV_SMT_REAL); } void CPartitionDlg::OnBnClickedMdbChangepw() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if (::IsWindow(m_ChangePasswordDialog.GetSafeHwnd())) m_ChangePasswordDialog.ShowWindow((!m_ChangePasswordDialog.IsWindowVisible())?(SW_NORMAL):(SW_HIDE)); }