DragonNest/Server/ServiceMonitorEx/Source/MainFrm.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

487 lines
12 KiB
C++

// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "ServiceMonitor.h"
#include "MainFrm.h"
#include "BasePartitionView.h"
#include "BaseMonitorView.h"
#include "BaseInformationView.h"
#include "BaseErrorLogView.h"
#include "ConfigMngr.h"
#include "NetConnection.h"
#define DNPRJSAFE // DNPrjSafe.h Á¦¿Ü
#include "CriticalSection.h"
#include "DNPacket.h"
#include "DNServerDef.h"
#include "DNServerPacket.h"
#include "ConnectionInfoMngr.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_POPUP_RESTORE, &CMainFrame::OnPopupRestore)
ON_COMMAND(ID_POPUP_MINIMIZE, &CMainFrame::OnPopupMinimize)
ON_COMMAND(ID_POPUP_EXIT, &CMainFrame::OnPopupExit)
ON_COMMAND(ID_POPUP_ABOUT, &CMainFrame::OnPopupAbout)
ON_WM_CLOSE()
ON_COMMAND(ID_VIEW_TOTALSTATUSBAR, &CMainFrame::OnViewTotalStatusBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOTALSTATUSBAR, &CMainFrame::OnUpdateViewTotalStatusBar)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_COMMAND(ID_SETTING_CONNECTION, &CMainFrame::OnSettingConnection)
ON_UPDATE_COMMAND_UI(ID_SETTING_CONNECTION, &CMainFrame::OnUpdateSettingConnection)
ON_COMMAND(ID_CONTROL_CONNECTIONFROMFILE, &CMainFrame::OnConnectionFromFile)
ON_COMMAND(ID_SETTING_CONFIG, &CMainFrame::OnSettingConfig)
ON_UPDATE_COMMAND_UI(ID_SETTING_CONFIG, &CMainFrame::OnUpdateSettingConfig)
ON_COMMAND(IDC_MDB_ERRORLOGBUTTON, &CMainFrame::OnButtonErrorLog)
ON_UPDATE_COMMAND_UI(IDC_MDB_ERRORLOGBUTTON, &CMainFrame::OnUpdateButtonErrorLog)
ON_COMMAND(IDC_MDB_REFRESHWORLDINFO, &CMainFrame::OnButtonRefreshWorldInfo)
ON_UPDATE_COMMAND_UI(IDC_MDB_REFRESHWORLDINFO, &CMainFrame::OnUpdateButtonRefreshWorldInfo)
ON_WM_WINDOWPOSCHANGED()
ON_WM_GETMINMAXINFO()
END_MESSAGE_MAP()
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
CServiceMonitorApp* aWinApp = static_cast<CServiceMonitorApp*>(::AfxGetApp());
ASSERT(NULL != aWinApp);
aWinApp->SetMainFrame(this);
m_DoAlert = FALSE;
for (int aIndex = 0 ; EV_SBT_CNT > aIndex ; ++aIndex) {
m_TabIconTick[aIndex] = 0;
}
}
CMainFrame::~CMainFrame()
{
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE; // ÇöÀç ºä¿Í ¿¬°áµÈ µµÅ¥¸àÆ® À̸§À» ÇÁ·¹ÀÓ Å¸ÀÌÆ²¹Ù¿¡ Ãâ·ÂÇÏÁö ¾ÊÀ½
cs.style &= ~(WS_HSCROLL | WS_VSCROLL);
return TRUE;
}
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
void CMainFrame::ToggleConnectionDialog()
{
if (!::IsWindow(m_ConnectionDialog.GetSafeHwnd())) {
m_ConnectionDialog.Create(IDD_CNNTDLG, this);
}
m_ConnectionDialog.ShowWindow((!m_ConnectionDialog.IsWindowVisible())?(SW_NORMAL):(SW_HIDE));
}
void CMainFrame::ShowConnectionDialog(int nCmdShow)
{
if (!::IsWindow(m_ConnectionDialog.GetSafeHwnd())) {
m_ConnectionDialog.Create(IDD_CNNTDLG, this);
}
m_ConnectionDialog.ShowWindow(nCmdShow);
}
void CMainFrame::ShowControlDialog(int nCmdShow)
{
}
DWORD CMainFrame::GetTickTerm(DWORD dwOldTick, DWORD dwCurTick)
{
return((dwCurTick >= dwOldTick)?(dwCurTick - dwOldTick):(ULONG_MAX - dwOldTick + dwCurTick));
}
int CMainFrame::GetActivePageIndex() const
{
return(m_PartitionTabView.GetActivePageIndex());
}
void CMainFrame::SetPageImageIndex(int pPageIndex, int pImageIndex)
{
m_PartitionTabView.SetPageImageIndex(pPageIndex, pImageIndex);
}
void CMainFrame::ForceAllTabViewActivate()
{
if (m_PartitionTabView.GetPageCount() > 0)
{
// COX3DTabViewContainer Àá±è ¹æÁö
int aActivePageIndex = m_PartitionTabView.GetActivePageIndex();
for (int aIndex = 0 ; m_PartitionTabView.GetPageCount() > aIndex ; ++aIndex)
m_PartitionTabView.SetActivePageIndex(aIndex);
m_PartitionTabView.SetActivePageIndex((0 <= aActivePageIndex)?(aActivePageIndex):(0));
}
}
// CMainFrame message handlers
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: ¿©±â¿¡ Ư¼öÈ­µÈ ÀÛ¼º Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
CCreateContext *aCreateContext = static_cast<CCreateContext*>(lpCreateStruct->lpCreateParams);
ASSERT(NULL != aCreateContext);
CRect aRect;
GetClientRect(&aRect);
// ÃßÈÄ À©µµ¿ì À§Ä¡»óÅ ÀúÀåÀÌ µé¾î°¡°Ô µÇ¸é ¿©±â¿¡¼­ ó¸®
CenterWindow();
// ¾ÆÀÌÄÜ ¼³Á¤
{
SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), TRUE); // Å« ¾ÆÀÌÄÜ
SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), FALSE); // ÀÛÀº ¾ÆÀÌÄÜ
}
// Window Position
{
/*
SetWindowPlacement()
- flags
> WPF_ASYNCWINDOWPLACEMENT :
> WPF_SETMINPOSITION : ¾ÆÀÌÄÜÈ­µÈ âÀÇ x, y ÁÂÇ¥°¡ ptMaxPosition ¸â¹ö¿¡ ÁöÁ¤µÇ¾î ÀÖÀ½.
> WPF_RESTORETOMAXIMIZED : ¾ÆÀÌÄÜÈ­µÇ±â Àü »óÅ¿¡ °ü°è¾øÀÌ È­¸éº¹±Í ½Ã ÃÖ´ëÈ­ µÇ¾î¾ß ÇÔ.
- UINT showCmd
> SW_HIDE : âÀ» ¼û±â°í ´Ù¸¥ âÀ» Ȱ¼ºÈ­½ÃŲ´Ù.
> SW_MINIMIZE : âÀ» ¾ÆÀÌÄÜÈ­ ½ÃŲ´Ù. ÀÌ ¶§ ´Ù¸¥ âÀÌ È°¼ºÈ­ µÈ´Ù.
> SW_RESTORE : âÀ» Ȱ¼ºÈ­½ÃŲ´Ù. ±× Àü¿¡ ¾ÆÀÌÄÜ ¶Ç´Â ÃÖ´ë »óÅ¿´´Ù¸é ¿ø·¡ »óÅ´ë·Î º¹¿øµÈ´Ù.
> SW_SHOW : ÀÌÀü À§Ä¡, Å©±â´ë·Î º¸ÀÌ°Ô Çϰí Ȱ¼ºÈ­ ½ÃŲ´Ù.
> SW_SHOWMAXIMIZED : Ȱ¼ºÈ­Çϰí ÃÖ´ëÈ­ ½ÃŲ´Ù.
> SW_SHOWMINIMIZED : Ȱ¼ºÈ­Çϰí ÃÖ¼ÒÈ­ ½ÃŲ´Ù.
> SW_SHOWNA : âÀ» ÇöÀç »óÅ´ë·Î Ȱ¼ºÈ­ ½ÃŲ´Ù.
> SW_SHOWNOACTIVATE : âÀ» °¡Àå ÃÖ±Ù »óÅ·ΠȰ¼ºÈ­ ½ÃŲ´Ù.
> SW_SHOWNORMAL : ÀÌ´Â SW_RESTORE¿Í °°À½.
*/
if (0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.top ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.left ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.bottom ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.right
)
{
SetWindowPlacement(&CConfigMngr::GetInstancePtr()->m_WindowPlacement);
}
if (SW_MINIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_SHOWMINIMIZED == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_FORCEMINIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd
)
{
ShowWindow(SW_RESTORE);
}
if (SW_MAXIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_SHOWMAXIMIZED == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd
)
{
ShowWindow(SW_SHOWMAXIMIZED);
// CFrameWnd::ActivateFrame(SW_SHOWMAXIMIZED);
}
}
// Open Connection Dialog
OnSettingConnection();
return 0;
}
CBasePartitionView* CMainFrame::AddPartition (CNetConnection* pConnection, ULONG uIpAddress)
{
CCreateContext aCreateContext;
::memset(&aCreateContext, 0, sizeof(aCreateContext));
aCreateContext.m_pNewViewClass = RUNTIME_CLASS(CMainFrame);
SOCKADDR_IN stSockAddrIn;
stSockAddrIn.sin_family = AF_INET;
stSockAddrIn.sin_addr.s_addr = uIpAddress;
WCHAR wszAddress[20];
_swprintf(wszAddress, L"%S", inet_ntoa(stSockAddrIn.sin_addr));
if (!m_PartitionTabView.AddPage(RUNTIME_CLASS(CBasePartitionView), &aCreateContext, wszAddress, EV_IML_PARTITION))
{
TRACE0("Failed to add page m_MainTabView ¡çCBasePartitionView\n");
return NULL; // fail to create
}
INT nIndex = m_PartitionTabView.GetPageCount();
if(nIndex <= 0) return NULL;
CBasePartitionView* pPartitionView = static_cast<CBasePartitionView*>(m_PartitionTabView.GetPage(nIndex - 1));
ASSERT(NULL != pPartitionView);
pPartitionView->Set(nIndex - 1);
pPartitionView->Start (pConnection);
// App¿¡ ÆÄƼ¼Ç°ú ¼¼¼Ç µî·Ï
CServiceMonitorApp* aWinApp = static_cast<CServiceMonitorApp*>(::AfxGetApp());
aWinApp->SetPartitionView(uIpAddress, pPartitionView);
return pPartitionView;
}
void CMainFrame::RemovePartition (CBasePartitionView* pPartition)
{
ULONG nConID = pPartition->GetConnectionID();
CNetConnectionMgr::GetInstancePtr()->RemoveConnection(nConID);
pPartition->Close ();
// ÆäÀÌÁö À妽º°¡ ÀÚµ¿Á¤·ÄµÇÁö ¾Ê¾Æ ÀÏ´Ü ¸·´Â´Ù.
m_PartitionTabView.DeletePage (pPartition->GetPageIndex());
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpCreateStruct, CCreateContext* /*pContext*/)
{
// º» ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵ù ÇÏ¸é ±âº» ºä (CMainView) ¸¦ »ý¼º ¾ÊÇÔ
CCreateContext *aCreateContext = static_cast<CCreateContext*>(lpCreateStruct->lpCreateParams);
ASSERT(NULL != aCreateContext);
CRect aRect;
GetClientRect(&aRect);
if (!m_PartitionTabView.Create(this, aRect,
WS_VISIBLE | WS_CHILD | TCS_FOCUSNEVER | TCS_MULTILINE | TCS_FIXEDWIDTH | TCS_HOTTRACK,
AFX_IDW_PANE_FIRST
))
{
TRACE0("Failed to create tabview container m_MainTabView\n");
return -1; // fail to create
}
m_PartitionTabView.SetOffsetExternal(0); // ÅÇ ºä¿Í ºÎ¸ð ÇÁ·¹ÀÓ »çÀÌÀÇ °£°Ý
m_PartitionTabView.SetOffsetInternal(0); // ÅÇ ºä¿Í ÀÚ½Ä ºä¿Í »çÀÌÀÇ °£°Ý
m_PartitionTabView.SetActivePageIndex(0);
return TRUE;
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
if(SIZE_MINIMIZED == nType)
ShowWindow(SW_MINIMIZE);
}
void CMainFrame::OnPopupRestore()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
SetForegroundWindow();
PostMessage(WM_SYSCOMMAND, SC_RESTORE);
ShowWindow(SW_SHOW);
}
void CMainFrame::OnPopupMinimize()
{
ShowWindow(SW_SHOWMINIMIZED);
}
void CMainFrame::OnPopupExit()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
PostMessage(WM_CLOSE);
}
void CMainFrame::OnPopupAbout()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
PostMessage(WM_COMMAND, ID_APP_ABOUT);
}
void CMainFrame::OnClose()
{
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù.
if (IDYES != ::AfxMessageBox(_T("Are you sure to quit ?"), MB_ICONQUESTION | MB_YESNO)) {
return;
}
// Save Config
{
{
}
// Window Position
{
GetWindowPlacement(&CConfigMngr::GetInstancePtr()->m_WindowPlacement);
CConfigMngr::GetInstancePtr()->Flush();
}
}
CFrameWnd::OnClose();
}
void CMainFrame::OnViewTotalStatusBar()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}
void CMainFrame::OnUpdateViewTotalStatusBar(CCmdUI *pCmdUI)
{
// TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}
void CMainFrame::OnSettingConnection()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
ToggleConnectionDialog();
}
void CMainFrame::OnConnectionFromFile()
{
CConnectionInfoMngr::GetInstancePtr()->ConnectToServerManager();
}
void CMainFrame::OnUpdateSettingConnection(CCmdUI *pCmdUI)
{
// TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
pCmdUI->SetCheck(::IsWindow(m_ConnectionDialog.GetSafeHwnd()) && m_ConnectionDialog.IsWindowVisible());
}
void CMainFrame::OnSettingConfig()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}
void CMainFrame::OnUpdateSettingConfig(CCmdUI *pCmdUI)
{
// TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
pCmdUI->Enable(FALSE); // ÇöÀç ¹ÌÁö¿ø
// pCmdUI->SetCheck(::IsWindow(m_ControlDialog.GetSafeHwnd()) && m_ControlDialog.IsWindowVisible()); // Å×½ºÆ® - »èÁ¦µÇ¾î¾ß ÇÔ !!!
}
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù.
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnDestroy()
{
CFrameWnd::OnDestroy();
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
KillTimer(EV_TMD_REFRESHSERVICESTATUS);
}
void CMainFrame::OnWindowPosChanged(WINDOWPOS* lpwndpos)
{
CFrameWnd::OnWindowPosChanged(lpwndpos);
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
if (lpwndpos->flags & SWP_SHOWWINDOW) {
// À©µµ¿ì º¸ÀÓ ½Ã ÅëÁö
ForceAllTabViewActivate(); // COX3DTabViewContainer Àá±è ¹æÁö
}
if (lpwndpos->flags & SWP_HIDEWINDOW) {
// À©µµ¿ì ¼û±è ½Ã ÅëÁö
}
}
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù.
return CFrameWnd::PreTranslateMessage(pMsg);
}
void CMainFrame::OnButtonErrorLog()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}
void CMainFrame::OnUpdateButtonErrorLog(CCmdUI *pCmdUI)
{
// TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
pCmdUI->Enable(TRUE);
}
void CMainFrame::OnButtonRefreshWorldInfo()
{
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}
void CMainFrame::OnUpdateButtonRefreshWorldInfo(CCmdUI *pCmdUI)
{
// TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
}