228 lines
6.5 KiB
C++
228 lines
6.5 KiB
C++
#pragma once
|
|
|
|
#include "Define.h"
|
|
#include "ServiceInfo.h"
|
|
#include "CriticalSection.hpp"
|
|
#include "ControlDialog.h"
|
|
#include "BasePartitionView.h"
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
class CSubMonitorFrameView;
|
|
|
|
// SERVERDRAW
|
|
|
|
typedef struct SERVERDRAW : public SERVERINFO
|
|
{
|
|
|
|
public:
|
|
typedef SERVERINFO TP_SUPER;
|
|
|
|
public:
|
|
SERVERDRAW(const SERVERINFO& pServerInfo);
|
|
|
|
VOID Reset(BOOL pIsAll = TRUE);
|
|
|
|
public:
|
|
CRect m_Area; // 위치 영역
|
|
BOOL m_IsPick; // 선택 여부
|
|
EF_SERVERSTATE m_OldServerState; // 서버 상태
|
|
|
|
} *LPSERVERDRAW, * const LPCSERVERDRAW;
|
|
|
|
|
|
// SERVERTYPEPICK
|
|
|
|
typedef struct SERVERTYPEPICK
|
|
{
|
|
|
|
public:
|
|
SERVERTYPEPICK();
|
|
|
|
VOID Reset();
|
|
|
|
public:
|
|
CRect m_Area; // 위치 영역
|
|
BOOL m_IsPick; // 선택 여부
|
|
|
|
} *LPSERVERTYPEPICK, * const LPCSERVERTYPEPICK;
|
|
|
|
|
|
// CSubMonitorWorldView 뷰입니다.
|
|
|
|
class CSubMonitorWorldView : public CScrollView
|
|
{
|
|
DECLARE_DYNCREATE(CSubMonitorWorldView)
|
|
|
|
public:
|
|
enum EF_UI_SIZE // UI 크기 정의
|
|
{
|
|
EV_UIS_NOSERVERLIST_HGT = 60, // '서버 목록 없음' 표시 너비
|
|
};
|
|
|
|
public:
|
|
|
|
// P.S.> 화면 표시와 정보 관리의 기준은 서버임 (TP_LISTSVTP)
|
|
|
|
// WORLD
|
|
typedef std::map<INT, WORLDINFO> TP_LISTWRLD;
|
|
typedef TP_LISTWRLD::iterator TP_LISTWRLD_ITR;
|
|
typedef TP_LISTWRLD::const_iterator TP_LISTWRLD_CTR;
|
|
typedef std::vector<WORLDINFO> TP_LISTWRLDAUTO;
|
|
typedef TP_LISTWRLDAUTO::iterator TP_LISTWRLDAUTO_ITR;
|
|
typedef TP_LISTWRLDAUTO::const_iterator TP_LISTWRLDAUTO_CTR;
|
|
|
|
// SERVER
|
|
typedef std::map<INT, SERVERDRAW> TP_LISTSERV;
|
|
typedef TP_LISTSERV::iterator TP_LISTSERV_ITR;
|
|
typedef TP_LISTSERV::const_iterator TP_LISTSERV_CTR;
|
|
typedef std::vector<SERVERDRAW> TP_LISTSERVAUTO;
|
|
typedef TP_LISTSERVAUTO::iterator TP_LISTSERVAUTO_ITR;
|
|
typedef TP_LISTSERVAUTO::const_iterator TP_LISTSERVAUTO_CTR;
|
|
|
|
typedef std::vector<EF_SERVERTYPE> TP_LISTSVTP;
|
|
typedef TP_LISTSVTP::iterator TP_LISTSVTP_ITR;
|
|
typedef TP_LISTSVTP::const_iterator TP_LISTSVTP_CTR;
|
|
|
|
// CHANNEL (VI)
|
|
typedef std::map<DWORD64, CHANNELINFO> TP_LISTCHNL;
|
|
typedef TP_LISTCHNL::iterator TP_LISTCHNL_ITR;
|
|
typedef TP_LISTCHNL::const_iterator TP_LISTCHNL_CTR;
|
|
typedef std::vector<CHANNELINFO> TP_LISTCHNLAUTO;
|
|
typedef TP_LISTCHNLAUTO::iterator TP_LISTCHNLAUTO_ITR;
|
|
typedef TP_LISTCHNLAUTO::const_iterator TP_LISTCHNLAUTO_CTR;
|
|
|
|
protected:
|
|
CSubMonitorWorldView(); // 동적 만들기에 사용되는 protected 생성자입니다.
|
|
virtual ~CSubMonitorWorldView();
|
|
|
|
public:
|
|
#ifdef _DEBUG
|
|
virtual void AssertValid() const;
|
|
#ifndef _WIN32_WCE
|
|
virtual void Dump(CDumpContext& dc) const;
|
|
#endif
|
|
#endif
|
|
|
|
void Set(INT nWorldID, INT pPageIndex);
|
|
|
|
BOOL IsAlert() const { return m_DoAlert; }
|
|
|
|
INT GetWorldID() const { return m_WorldID; }
|
|
INT GetPageIndex() const { return m_PageIndex; }
|
|
LONG64 GetServiceInfoUpdateNo() const { return m_ServiceInfoUpdateNo; }
|
|
void SetServiceInfoUpdateNo(LONG64 pServiceInfoUpdateNo) { m_ServiceInfoUpdateNo = pServiceInfoUpdateNo; }
|
|
INT GetWorldUserCount() const { return m_WorldUserCount; }
|
|
|
|
// WORLD
|
|
WORLDINFO* AtWorld(INT nWorldID);
|
|
const WORLDINFO* AtWorld(INT nWorldID) const;
|
|
void GetWorldList(TP_LISTWRLDAUTO& pListWrld);
|
|
BOOL IsWorldEmpty() const { return(m_ListWrld.empty()); }
|
|
|
|
// SERVER
|
|
SERVERDRAW* AtServer(INT pServerID);
|
|
const SERVERDRAW* AtServer(INT pServerID) const;
|
|
void GetServerList(TP_LISTSERVAUTO& pListServ, EF_SERVERTYPE pServerType /*= EV_SVT_NONE*/, BOOL pIsPick /*= FALSE*/);
|
|
BOOL IsServerEmpty() const { return(m_ListServ.empty()); }
|
|
|
|
// CHANNEL (VI)
|
|
CHANNELINFO* AtChannel(INT pServerID, INT pChannelID);
|
|
const CHANNELINFO* AtChannel(INT pServerID, INT pChannelID) const;
|
|
void GetChannelList(TP_LISTCHNLAUTO& pListChnl, INT pServerID /*= EV_SERVERID_DEF*/);
|
|
BOOL IsChannelEmpty() const { return(m_ListChnl.empty()); }
|
|
|
|
void PickServerAll(BOOL pDoPick);
|
|
|
|
void SetBaseInfo (CBasePartitionView* pMainView, CSubMonitorFrameView* pSubView, CServiceInfo* pInfo);
|
|
|
|
private:
|
|
void RebuildServiceInfo();
|
|
void RefreshServiceInfo();
|
|
|
|
// WORLD
|
|
void AddWorldInfo(const WORLDINFO* pWorldInfo);
|
|
void SetWorldInfo(const WORLDINFO* pWorldInfo);
|
|
void ClearWorldInfoList();
|
|
|
|
// SERVER
|
|
void AddServerInfo(const SERVERINFO* pServerInfo);
|
|
void SetServerInfo(const SERVERINFO* pServerInfo);
|
|
void ClearServerInfoList();
|
|
|
|
// CHANNEL (VI)
|
|
void AddChannelInfo(const CHANNELINFO* pChannelInfo);
|
|
void SetChannelInfo(const CHANNELINFO* pChannelInfo);
|
|
void ClearChannelInfoList();
|
|
|
|
void DrawView(CDC* pDC, const CRect& pRect, CPoint& pStartPoint, int* pHeight = NULL);
|
|
|
|
void DoPopupMenu();
|
|
|
|
void DisplayServerState(INT pServerID, BOOL pIsNew = FALSE);
|
|
|
|
void UpdateControlDialog(class CControlDialog* pControlDialog);
|
|
|
|
private:
|
|
BOOL m_IsInitialized; // CView 에는 다이얼로그의 WM_INITDIALOG 메시지가 오지 않으므로 OnUpdate() 에서 관리
|
|
|
|
INT m_WorldID;
|
|
LONG64 m_ServiceInfoUpdateNo;
|
|
INT m_WorldUserCount; // 월드 내의 현재 전체 동시 접속자 수
|
|
|
|
INT m_LastPickServerID; // 사용자가 가장 최근 선택한 서버 ID
|
|
|
|
class CServerDrawBaseFilter* m_ServerDrawFilter[EV_SVT_CNT];
|
|
|
|
TP_LISTWRLD m_ListWrld;
|
|
TP_LISTSERV m_ListServ;
|
|
TP_LISTCHNL m_ListChnl;
|
|
// mutable TP_LOCK m_Lock; // 동기화 불필요 ?
|
|
|
|
SERVERTYPEPICK m_ServerTypePick[EV_SVT_CNT];
|
|
|
|
INT m_PageIndex;
|
|
|
|
int m_TabIconTick;
|
|
BOOL m_DoAlert;
|
|
// BOOL m_PlayAlert;
|
|
|
|
CServiceInfo* m_pServiceInfo;
|
|
CBasePartitionView* m_pPartitionView;
|
|
CSubMonitorFrameView* m_pSubMoniterFrameView;
|
|
|
|
COX3DTabViewContainer m_TestTabView;
|
|
|
|
|
|
protected:
|
|
virtual void OnDraw(CDC* pDC); // 이 뷰를 그리기 위해 재정의되었습니다.
|
|
virtual void OnInitialUpdate(); // 생성된 후 처음입니다.
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
|
|
virtual void OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/);
|
|
public:
|
|
virtual BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE);
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
afx_msg void OnPaint();
|
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
|
afx_msg void OnDestroy();
|
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
|
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg void OnWorldViewSelectAll();
|
|
afx_msg void OnPopupProcOnOff();
|
|
afx_msg void OnPopupWorldUserLimit();
|
|
afx_msg void OnPopupViChnlShowHide();
|
|
afx_msg void OnPopupViChnlMerit();
|
|
afx_msg void OnPopupGaShowHide();
|
|
afx_msg void OnPopupGaMerit();
|
|
afx_msg void OnPopupProcMakeDump();
|
|
};
|
|
|
|
|