📄 serverstatus.cpp
字号:
// ServerStatus.cpp : implementation file
//
#include "stdafx.h"
#include "MainFrm.h"
#include "rmtool.h"
#include "ServerStatus.h"
#include "ServerView.h"
#include "Packet.h"
//#include <Lmshare.h>
//#include <lmaccess.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CServerStatus dialog
CServerStatus::CServerStatus(CWnd* pParent /*=NULL*/)
: CDialog(CServerStatus::IDD, pParent)
{
//{{AFX_DATA_INIT(CServerStatus)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CServerStatus::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CServerStatus)
DDX_Control(pDX, IDC_LISTENER_LIST, c_ListenerStatusList);
DDX_Control(pDX, IDC_SERVER_LIST, c_MainStatusList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CServerStatus, CDialog)
//{{AFX_MSG_MAP(CServerStatus)
ON_WM_PAINT()
ON_NOTIFY(LVN_COLUMNCLICK, IDC_SERVER_LIST, OnColumnclickServerList)
ON_BN_CLICKED(IDC_REFRESH, OnRefresh)
ON_WM_SHOWWINDOW()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_REFRESH_LISTENER, OnRefreshListener)
ON_BN_CLICKED(IDC_CONNECT_LISTENER, OnConnectListener)
ON_BN_CLICKED(IDC_SELECT_PROXY, OnSelectProxy)
ON_BN_CLICKED(IDC_SELECT_AGENT, OnSelectAgent)
ON_BN_CLICKED(IDC_SELECT_DBDEMON, OnSelectDbdemon)
ON_BN_CLICKED(IDC_SELECT_MAP, OnSelectMap)
ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LISTENER_LIST, OnColumnclickListenerList)
ON_BN_CLICKED(IDC_SELECT_X, OnSelectX)
ON_BN_CLICKED(IDC_SELECT_O, OnSelectO)
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SERVER_LIST, OnCustomDraw)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LISTENER_LIST, OnCustomDrawListenerList)
//ON_MESSAGE(UM_FT_SYNC_PACKET, OnReceiveSyncPacket)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServerStatus message handlers
/*
LONG CServerStatus::OnReceiveSyncPacket(WPARAM WParam, LPARAM lParam)
{
return TRUE;
}
*/
void CServerStatus::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
//促捞倔肺弊 硅版阑 弧埃祸栏肺 磨秦 徘 牧飘费苞 备盒窍磊~~
// CRect rect;
// GetClientRect(rect);
// dc.FillSolidRect(rect, RGB(255,0,255));
// Do not call CDialog::OnPaint() for painting messages
}
BOOL CServerStatus::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_pApp = (CRMToolApp*)AfxGetApp(); //App努贰胶 器牢磐 悸泼
CServerView* pView; pView = (CServerView*)GetParent();
//泅犁 急琶等 辑滚悸狼 Index 锅龋甫 啊瘤绊 乐磊..
//捞吧 咯扁辑 窍绰 捞蜡绰.. View狼 OnInitialUpdate焊促 捞镑捞 歹 刚历 龋免登扁 锭巩捞促.
/* if(pView->m_nCurServerSet != 0)
{
if(m_pApp->m_nNewServersetIndex)
pView->m_nCurServerSet = m_pApp->m_nNewServersetIndex - 1;
else
pView->m_nCurServerSet = m_pApp->m_DefaultServerSetIndex - 1;
}
else
pView->m_nCurServerSet = -1;
*/
//府胶飘 冠胶俊 傈眉 急琶苞, CheckBox 笼绢持绰 Option, 吝埃俊 捞固瘤 火涝 Option 悸泼
c_MainStatusList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_SUBITEMIMAGES);
c_ListenerStatusList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES);
char *Column[7] = {"ServerName", "Port", "States", "Connection num", "Server IP","System","Type"};
int ColumnSize[7] = {100, 50, 40, 55, 100, 70, 80};
LV_COLUMN col;
for(int i=0 ; i<7 ; i++)
{
//ListView 牧飘费 檬扁拳.. 漠烦汲沥
col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
col.fmt = LVCFMT_LEFT;
col.cx = ColumnSize[i];
col.pszText = Column[i];
col.cchTextMax = 100;
col.iSubItem = i;
c_MainStatusList.InsertColumn(i, &col);
}
char *Column2[2] = {"System", "States"};
int ColumnSize2[2] = {80, 40};
for(i=0 ; i<2 ; i++)
{
//ListView 牧飘费 檬扁拳.. 漠烦汲沥
col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
col.fmt = LVCFMT_LEFT;
col.cx = ColumnSize2[i];
col.pszText = Column2[i];
col.cchTextMax = 100;
col.iSubItem = i;
c_ListenerStatusList.InsertColumn(i, &col);
}
/*
if(GetConnection())
{
if(pView->m_bReceivedServerStatus) //罐疽栏搁..
RefreshServerStatus();
}
*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int g_ServerStatusMainSort[8] = {0,}; //8篮 漠烦 肮荐促.
void CServerStatus::OnColumnclickServerList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(g_ServerStatusMainSort[ pNMListView->iSubItem ] == ASC)
g_ServerStatusMainSort[ pNMListView->iSubItem ] = DESC;
else
g_ServerStatusMainSort[ pNMListView->iSubItem ] = ASC;
ListValue value;
value.iSubItem = pNMListView->iSubItem;
value.pListCtrl = &c_MainStatusList;
value.iListCtrl = 1; //1锅捞 MainServerStatusList..
ListView_SortItems(c_MainStatusList.m_hWnd, pfnCompare, &value);
*pResult = 0;
}
extern int g_SelectServerListSort[5];
extern int g_AllServerListSort[5];
extern int g_SelectServerListSort2[5];
extern int g_AllServerListSort2[5];
extern int g_ListenerListSort[2];
int CALLBACK pfnCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
static LV_FINDINFO fi;
static int nItem1,nItem2;
static char szBuf1[101],szBuf2[101];
int iList;
ListValue* pValue = (ListValue*)lParamSort;
HWND hList = pValue->pListCtrl->m_hWnd;
int iSub = pValue->iSubItem; //漠烦(SubItem)狼 Index
// switch(iSub) //漠烦疙喊(SubItem)
// {
// default: //巩磊 沥纺
// {
fi.flags = LVFI_PARAM;
fi.lParam = lParam1; //Find Parameter蔼阑 罐酒客辑 弊 蔼栏肺 Subitem 闺幅甫 茫酒辑 沥纺窍磊.
nItem1 = ListView_FindItem( hList, -1,&fi);
fi.lParam = lParam2;
nItem2 = ListView_FindItem( hList,-1,&fi);
ListView_GetItemText( hList, nItem1, iSub, szBuf1,sizeof(szBuf1));
ListView_GetItemText( hList, nItem2, iSub, szBuf2,sizeof(szBuf2));
int kk = 0;
switch(iList = pValue->iListCtrl)
{
//MainServerStatus 府胶飘 牧飘费
case 1:
{
kk = g_ServerStatusMainSort[ iSub ];
if(iSub == 3)
{ //箭磊沥纺
if(kk == ASC )
return( atoi(szBuf1) < atoi(szBuf2) ? -1 : atoi(szBuf1) > atoi(szBuf2) ? 1 : 0);
else
return( atoi(szBuf1) > atoi(szBuf2) ? -1 : atoi(szBuf1) < atoi(szBuf2) ? 1 : 0);
}
}
break;
case 2: kk = g_SelectServerListSort[ iSub ]; break;
case 3: kk = g_AllServerListSort[ iSub ]; break;
case 4: kk = g_SelectServerListSort2[ iSub ]; break;
case 5: kk = g_AllServerListSort2[ iSub ]; break;
case 6: kk = g_ListenerListSort[ iSub ]; break;
}
if(kk == ASC)
{
return( strcmp( szBuf1,szBuf2) );
}
else
{
return( strcmp( szBuf1,szBuf2) * -1);
}
// }
// break;
// }
return 0;
}
void CServerStatus::RefreshServerStatus()
{
//return;
c_MainStatusList.DeleteAllItems();
//::SendMessage(c_MainStatusList.m_hWnd, LVM_DELETEALLITEMS, 0, 0L);
//m_pApp = (CRMToolApp*)AfxGetApp(); //App努贰胶 器牢磐 悸泼
CServerView* pView = (CServerView*)GetParent();
LVITEM item;
char temp[ 0xff ];
//pView->m_nCurServerSet = 0; //泅犁 急琶等 辑滚甫 烙矫肺 惑侩栏肺 悸泼窍磊.
int si = pView->m_nCurServerSet; //ServerIndex(si)
if(si < 0)
return;
ServerInfo *pInfo = NULL;
CString str;
for(int i=0; i< m_pApp->m_ServerSetInfo[ si ].nServerNum ; i++)
{
pInfo = &m_pApp->m_ServerInfo[si][i];
//辑滚疙
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = pInfo->MapName;
item.iItem = i; //青锅龋
item.iSubItem = 0; //凯锅龋
item.lParam = pInfo->Port;
c_MainStatusList.InsertItem(&item);
//Port 锅龋
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = _itoa(pInfo->Port, temp, 10);
c_MainStatusList.SetItem(&item);
//泅犁 惑怕
sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
item.mask = LVIF_TEXT;
item.iSubItem = 2;
item.pszText = temp;
c_MainStatusList.SetItem(&item);
/* if( pInfo->dwStatus == 10 )
c_MainStatusList.SetItemData(i,RGB(0,0,0));
else if( pInfo->dwStatus == 0)
c_MainStatusList.SetItemData(i,RGB(255,0,0));
else
c_MainStatusList.SetItemData(i,RGB(0,0,255));
*/
//立加蜡历荐
sprintf(temp,"%d",pInfo->dwNumOfUser);
item.mask = LVIF_TEXT;
item.iSubItem = 3;
item.pszText = temp;
c_MainStatusList.SetItem(&item);
//ServerIP
item.mask = LVIF_TEXT;
item.iSubItem = 4;
item.pszText = pInfo->Ip;
c_MainStatusList.SetItem(&item);
//System
item.mask = LVIF_TEXT;
item.iSubItem = 5;
item.pszText = pInfo->MachineName;
c_MainStatusList.SetItem(&item);
//辑滚鸥涝
item.mask = LVIF_TEXT;
item.iSubItem = 6;
switch(pInfo->ServerType)
{
case SERVER_TYPE_PROXY: item.pszText = "PROXY"; break;
case SERVER_TYPE_AGENT: item.pszText = "AGENT"; break;
case SERVER_TYPE_DBDEMON: item.pszText = "DBDEMON"; break;
case SERVER_TYPE_MAP: item.pszText = "MAP"; break;
}
c_MainStatusList.SetItem(&item);
if(CheckSameServer(pInfo->Port)) //急琶等 辑滚啊 乐栏搁 AllServerList俊辑 猾促.
{
c_MainStatusList.SetCheck(i);
}
}
}
void CServerStatus::OnRefresh()
{
// TODO: Add your control notification handler code here
/*
//傍蜡 弃歹 父甸扁
SHARE_INFO_2 si2;
::ZeroMemory(&si2, sizeof(SHARE_INFO_2));
si2.shi2_netname = (char *)(L"Dlls");
si2.shi2_type = STYPE_DISKTREE;
si2.shi2_remark = NULL;
si2.shi2_permissions = ACCESS_ALL;
si2.shi2_max_uses = SHI_USES_UNLIMITED;
si2.shi2_current_uses = 0;
si2.shi2_path = (char *)(L"D:\\Dlls");
si2.shi2_passwd = NULL;
NET_API_STATUS netStat = NetShareAdd(0, 2, (LPBYTE)(&si2),NULL);
if(netStat != 0)
{
char str[0xff];
sprintf(str,"Error: %u", netStat);
MessageBox(str);
}
*/
if( !RIGHT(MASK_6) ) return;
c_MainStatusList.DeleteAllItems();
// c_ListenerStatusList.DeleteAllItems();
RequestCurrentServersetInfo();
//<! BBD 040105 怕惫,富饭捞 辑滚惑怕 瘤盔侩
((CMainFrame *)m_pApp->m_pMainWnd)->RefreshRMServerStatus();
//> BBD 040105 怕惫,富饭捞 辑滚惑怕 瘤盔侩
}
void CServerStatus::RequestCurrentServersetInfo()
{
CServerView* pView = (CServerView*)GetParent();
CChildFrame *pFrame = (CChildFrame*)pView->GetParent(); //览翠 皋技瘤 罐阑 橇饭烙狼 林家蔼
PACKET_REQUEST_ALL_SUBSERVER_INFO packet(FALSE, pFrame->m_nFrameID);
g_pNet->Send(m_pApp->m_nCI[ pView->m_nCurServerSet ], (char*)&packet, packet.GetPacketSize());
PACKET_REQUEST_ALL_LISTENER_INFO packet3(pFrame->m_nFrameID);
g_pNet->Send(m_pApp->m_nCI[ pView->m_nCurServerSet ], (char*)&packet3, packet3.GetPacketSize());
}
/*
void CServerStatus::OnMoveToControl()
{
// TODO: Add your control notification handler code here
CServerView *pView = (CServerView*)GetParent();
pView->ChangeView(1); //辑滚 Control;
pView->m_nCurView = 1;
}
*/
void CServerStatus::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
if(bShow)
{
CServerView* pView; pView = (CServerView*)GetParent();
//pView->m_TempSelected.RemoveAll(); //急琶等芭 历厘家 瘤快绊..
SetForegroundWindow();
RefreshServerStatus();
Invalidate();
}
else
{
//List俊 眉农 等芭 扁撅矫虐磊 ...
CServerView *pView = (CServerView*)GetParent();
pView->m_TempSelected.RemoveAll();
char str[ 10 ]; DWORD dwPort;
int count = c_MainStatusList.GetItemCount();
for(int i=0; i<count; i++)
{
if(c_MainStatusList.GetCheck(i)) //Check Box 急琶登菌栏搁
{
c_MainStatusList.GetItemText(i,1,str,10);
dwPort = atoi(str);
pView->m_TempSelected.Add(dwPort);
}
}
}
}
void CServerStatus::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMTVCUSTOMDRAW * pcd = (NMTVCUSTOMDRAW*) pNMHDR;
switch(pcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
{
char str[16];
c_MainStatusList.GetItemText(pcd->nmcd.dwItemSpec,2,str,16);
if(!strcmp(str,"O"))
{
pcd->clrText = (COLORREF)RGB(0,0,0);
}
else if(!strcmp(str,"X"))
{
pcd->clrText = (COLORREF)RGB(255,0,0);
pcd->clrTextBk = (COLORREF)RGB(255,255,0);
}
else
{
pcd->clrText = (COLORREF)RGB(0,0,255);
}
*pResult = CDRF_DODEFAULT;
}
break;
/*
COLORREF rgb = (COLORREF)c_MainStatusList.GetItemData(pcd->nmcd.dwItemSpec);
if(rgb == RGB(255,0,0))
{
pcd->clrText = (COLORREF)rgb;
pcd->clrTextBk = (COLORREF)RGB(255,255,0);
}
else if(rgb == RGB(0,0,255))
{
pcd->clrText = (COLORREF)rgb;
}
*pResult = CDRF_DODEFAULT;
break;
*/
}
}
void CServerStatus::OnCustomDrawListenerList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMTVCUSTOMDRAW * pcd = (NMTVCUSTOMDRAW*) pNMHDR;
switch(pcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
{
char str[16];
c_ListenerStatusList.GetItemText(pcd->nmcd.dwItemSpec,1,str,16);
if(!strcmp(str,"O"))
{
pcd->clrText = (COLORREF)RGB(0,0,0);
}
else if(!strcmp(str,"X"))
{
pcd->clrText = (COLORREF)RGB(255,0,0);
pcd->clrTextBk = (COLORREF)RGB(255,255,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -