📄 servercontrol.cpp
字号:
// ServerControl.cpp : implementation file
//
#include "stdafx.h"
#include "MainFrm.h"
#include "rmtool.h"
#include "ServerControl.h"
#include "ServerView.h"
#include "packet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CServerControl dialog
CServerControl::CServerControl(CWnd* pParent /*=NULL*/)
: CDialog(CServerControl::IDD, pParent)
{
//{{AFX_DATA_INIT(CServerControl)
m_CheckDBDemon = FALSE;
m_CheckMap = FALSE;
m_CheckAgent = FALSE;
m_TryToConnect = 0;
m_MaxUser = 0;
m_UserAccept = FALSE;
m_CheckNotice = FALSE;
m_NoticeSec = 0;
m_szNotice = _T("");
m_RadioWeather = -1;
m_WeatherAmount = 0;
m_CheckStopWeather = FALSE;
//}}AFX_DATA_INIT
m_bCloseBatch = 0;
}
void CServerControl::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CServerControl)
DDX_Control(pDX, IDC_NOTICE, c_NoticeMsg);
DDX_Control(pDX, IDC_WEATHER_AMOUNT, c_WeatherAmount);
DDX_Control(pDX, IDC_SPIN_WEATHER, c_Weather);
DDX_Control(pDX, IDC_SPIN_NOTICE, c_Notice);
DDX_Control(pDX, IDC_SPIN_MAX_USER, c_MaxUser);
DDX_Control(pDX, IDC_SPIN_TRY_TO_CONNECT, c_TryToConnect);
DDX_Control(pDX, IDC_ALL_SERVER_LIST, c_AllList);
DDX_Control(pDX, IDC_SELECT_SERVER_LIST, c_SelectList);
DDX_Check(pDX, IDC_CHECK_DBDEMON, m_CheckDBDemon);
DDX_Check(pDX, IDC_CHECK_MAP, m_CheckMap);
DDX_Check(pDX, IDC_CHECK_AGENT, m_CheckAgent);
DDX_Text(pDX, IDC_TRY_TO_CONNECT, m_TryToConnect);
DDV_MinMaxUInt(pDX, m_TryToConnect, 0, 30);
DDX_Text(pDX, IDC_MAX_USER, m_MaxUser);
DDV_MinMaxUInt(pDX, m_MaxUser, 0, 10000);
DDX_Check(pDX, IDC_USER_ACCEPT, m_UserAccept);
DDX_Check(pDX, IDC_CHECK_NOTICE, m_CheckNotice);
DDX_Text(pDX, IDC_NOTICE_SEC, m_NoticeSec);
DDV_MinMaxUInt(pDX, m_NoticeSec, 1, 36000);
DDX_Text(pDX, IDC_NOTICE, m_szNotice);
DDV_MaxChars(pDX, m_szNotice, 1024);
DDX_Radio(pDX, IDC_RADIO_WEATHER, m_RadioWeather);
DDX_Text(pDX, IDC_WEATHER_AMOUNT, m_WeatherAmount);
DDV_MinMaxUInt(pDX, m_WeatherAmount, 10, 2000);
DDX_Check(pDX, IDC_STOP_WEATHER, m_CheckStopWeather);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CServerControl, CDialog)
//{{AFX_MSG_MAP(CServerControl)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED(IDC_RIGHT_ALL, OnRightAll)
ON_BN_CLICKED(IDC_LEFT, OnLeft)
ON_BN_CLICKED(IDC_RIGHT, OnRight)
ON_BN_CLICKED(IDC_LEFT_ALL, OnLeftAll)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_SELECT_SERVER_LIST, OnColumnclickSelectServerList)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_ALL_SERVER_LIST, OnColumnclickAllServerList)
ON_BN_CLICKED(IDC_CHECK_AGENT, OnCheckAgent)
ON_BN_CLICKED(IDC_CHECK_DBDEMON, OnCheckDbdemon)
ON_BN_CLICKED(IDC_CHECK_MAP, OnCheckMap)
ON_BN_CLICKED(IDC_RELOAD_DATA, OnReloadData)
ON_BN_CLICKED(IDC_PROXY_CONTROL_APPLY, OnProxyControlApply)
ON_BN_CLICKED(IDC_NOTICE_SEND, OnNoticeSend)
ON_BN_CLICKED(IDC_CHECK_NOTICE, OnCheckNotice)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_WEATHER_APPLY, OnWeatherApply)
ON_BN_CLICKED(IDC_RADIO_WEATHER2, OnRadioWeather2)
ON_BN_CLICKED(IDC_RADIO_WEATHER3, OnRadioWeather3)
ON_BN_CLICKED(IDC_RADIO_WEATHER, OnRadioWeather)
ON_WM_SIZE()
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CUSTOMDRAW, IDC_ALL_SERVER_LIST, OnCustomDrawAll)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SELECT_SERVER_LIST, OnCustomDrawSelect)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServerControl message handlers
void CServerControl::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
if(bShow)
{
m_CheckAgent = 0;
m_CheckDBDemon = 0;
m_CheckMap = 0;
UpdateData(FALSE);
RefreshServerList();
SetForegroundWindow();
Invalidate();
}
else
{
//List俊 眉农 等芭 扁撅矫虐磊 ...
CServerView *pView = (CServerView*)GetParent();
pView->m_TempSelected.RemoveAll();
char str[ 10 ]; DWORD dwPort;
int count = c_SelectList.GetItemCount();
for(int i=0; i<count; i++)
{
c_SelectList.GetItemText(i,1,str,10);
dwPort = atoi(str);
pView->m_TempSelected.Add(dwPort);
}
}
}
BOOL CServerControl::OnInitDialog()
{
CDialog::OnInitDialog();
InitializeCriticalSection(&m_criNotice);// 030609
// TODO: Add extra initialization here
m_pApp = (CRMToolApp*)AfxGetApp();
//府胶飘 冠胶俊 傈眉 急琶苞, CheckBox 笼绢持绰 Option, 吝埃俊 捞固瘤 火涝 Option 悸泼
c_AllList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES);
c_SelectList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES);
char *Column[6] = {"Serve Name", "Port" , "States", "Type", "System","IP"};
int ColumnSize[6] = {100, 50, 40, 80, 70, 100};
LV_COLUMN col;
for(int i=0 ; i<5 ; 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_AllList.InsertColumn(i, &col);
c_SelectList.InsertColumn(i, &col);
}
RefreshServerList();
c_TryToConnect.SetRange(0,30);
c_MaxUser.SetRange(0,10000);
//刘啊摹甫 100栏肺
UDACCEL accel;
accel.nInc = 100;
c_MaxUser.SetAccel(1,&accel);
c_Notice.SetRange(10, 3600);
accel.nInc = 10;
c_Notice.SetAccel(1,&accel);
c_Weather.SetRange(10,2000);
accel.nInc = 100;
c_Weather.SetAccel(1,&accel);
m_CheckStopWeather = 0;
c_WeatherAmount.EnableWindow(FALSE); //扁夯 厚劝己拳 惑怕肺
m_RadioWeather = 0; //朝揪 讣篮惑怕肺 急琶等惑怕
m_WeatherAmount = 500; //利汲樊 扁夯 500栏肺
m_NoticeSec = 60;
m_MaxUser = 3000;
m_TryToConnect = 5;
m_UserAccept = TRUE;
m_CheckAgent = 0;
m_CheckDBDemon = 0;
m_CheckMap = 0;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CServerControl::CountConnectServer()
{
CServerView* pView = (CServerView*)GetParent();
int si = pView->m_nCurServerSet; //ServerIndex(si)
int TotalAgent=0, ConAgent=0;
int TotalDemon=0, ConDemon=0;
int TotalMap=0, ConMap=0;
ServerInfo *pInfo = NULL;
for(int k=0; k< m_pApp->m_ServerSetInfo[ si ].nServerNum ; k++)
{
pInfo = &m_pApp->m_ServerInfo[si][k];
switch(pInfo->ServerType)
{
case SERVER_TYPE_AGENT:
TotalAgent++;
if(pInfo->dwStatus == 10) ConAgent++; //立加等 惑怕
break;
case SERVER_TYPE_DBDEMON:
TotalDemon++;
if(pInfo->dwStatus == 10) ConDemon++; //立加等 惑怕
break;
case SERVER_TYPE_MAP:
TotalMap++;
if(pInfo->dwStatus == 10) ConMap++; //立加等 惑怕
break;
}
}
char str[ 0xff ];
sprintf(str,"[Total] Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
SetDlgItemText(IDC_STATIC_SUM, str);
//傈眉 府胶飘 拌魂...
TotalAgent=0; ConAgent=0;
TotalDemon=0; ConDemon=0;
TotalMap=0; ConMap=0;
int count = c_AllList.GetItemCount();
for(int i=0 ; i<count ; i++)
{
c_AllList.GetItemText(i, 3, str, 0xff);
if(!strcmp(str,"AGENT"))
{
TotalAgent++;
c_AllList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConAgent++;
}
else if(!strcmp(str,"DBDEMON"))
{
TotalDemon++;
c_AllList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConDemon++;
}
else if(!strcmp(str,"MAP"))
{
TotalMap++;
c_AllList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConMap++;
}
}
sprintf(str,"Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
SetDlgItemText(IDC_STATIC_TOTAL, str);
//急琶等 府胶飘 拌魂...
TotalAgent=0; ConAgent=0;
TotalDemon=0; ConDemon=0;
TotalMap=0; ConMap=0;
count = c_SelectList.GetItemCount();
for(i=0 ; i<count ; i++)
{
c_SelectList.GetItemText(i, 3, str, 0xff);
if(!strcmp(str,"AGENT"))
{
TotalAgent++;
c_SelectList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConAgent++;
}
else if(!strcmp(str,"DBDEMON"))
{
TotalDemon++;
c_SelectList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConDemon++;
}
else if(!strcmp(str,"MAP"))
{
TotalMap++;
c_SelectList.GetItemText(i, 2, str, 0xff);
if(!strcmp(str,"O")) ConMap++;
}
}
sprintf(str,"Agent : %d/%d , DBDemon %d/%d , Map %d/%d",ConAgent,TotalAgent,ConDemon,TotalDemon,ConMap,TotalMap);
SetDlgItemText(IDC_STATIC_SELECT, str);
// InitializeCriticalSection(&m_criNotice);
}
CServerControl::~CServerControl()
{
DeleteCriticalSection(&m_criNotice); // 030609
}
void CServerControl::RefreshServerList()
{
//m_pApp = (CRMToolApp*)AfxGetApp(); //App努贰胶 器牢磐 悸泼
CServerView* pView = (CServerView*)GetParent();
LVITEM item;
char temp[ 0xff ];
int si = pView->m_nCurServerSet; //ServerIndex(si)
if(si < 0)
return;
c_AllList.DeleteAllItems();
c_SelectList.DeleteAllItems();
ServerInfo *pInfo = NULL;
CString str;
BOOL bSelected; bSelected = FALSE;
int i=0,j=0;
for(int k=0; k< m_pApp->m_ServerSetInfo[ si ].nServerNum ; k++)
{
pInfo = &m_pApp->m_ServerInfo[ si ][ k ];
if(CheckSameServer(pInfo->Port)) //急琶等 辑滚啊 乐栏搁 AllServerList俊辑 猾促.
{
InsertSelectedServer(pInfo, j);
j++; continue;
}
i = k - j;
//辑滚疙
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = pInfo->MapName;
item.iItem = i; //青锅龋
item.iSubItem = 0; //凯锅龋
item.lParam = pInfo->Port;
c_AllList.InsertItem(&item);
//Port 锅龋
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = _itoa(pInfo->Port, temp, 10);
c_AllList.SetItem(&item);
//泅犁 惑怕
sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
item.mask = LVIF_TEXT;
item.iSubItem = 2;
item.pszText = temp;
c_AllList.SetItem(&item);
//辑滚鸥涝
item.mask = LVIF_TEXT;
item.iSubItem = 3;
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_AllList.SetItem(&item);
//System
item.mask = LVIF_TEXT;
item.iSubItem = 4;
item.pszText = pInfo->MachineName;
c_AllList.SetItem(&item);
//Ip
item.mask = LVIF_TEXT;
item.iSubItem = 5;
item.pszText = pInfo->Ip;
c_AllList.SetItem(&item);
/* if( pInfo->dwStatus == 10 )
c_AllList.SetItemData(i,RGB(0,0,0));
else if( pInfo->dwStatus == 0)
c_AllList.SetItemData(i,RGB(255,0,0));
else
c_AllList.SetItemData(i,RGB(0,0,255));
*/
}
CountConnectServer();
}
BOOL CServerControl::CheckSameServer(DWORD dwPort)
{
CServerView* pView = (CServerView*)GetParent();
for(int i=0 ; i <= pView->m_TempSelected.GetUpperBound() ; i++)
{
DWORD value = pView->m_TempSelected.GetAt(i);
if(value == dwPort)
{
return TRUE;
}
}
return FALSE;
}
void CServerControl::InsertSelectedServer(ServerInfo *pInfo, int i)
{
LVITEM item;
char temp[ 0xff ];
//辑滚疙
item.mask = LVIF_TEXT | LVIF_PARAM;
item.pszText = pInfo->MapName;
item.iItem = i; //青锅龋
item.iSubItem = 0; //凯锅龋
item.lParam = pInfo->Port;
c_SelectList.InsertItem(&item);
//Port 锅龋
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = _itoa(pInfo->Port, temp, 10);
c_SelectList.SetItem(&item);
//泅犁 惑怕
sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
item.mask = LVIF_TEXT;
item.iSubItem = 2;
item.pszText = temp;
c_SelectList.SetItem(&item);
//辑滚鸥涝
item.mask = LVIF_TEXT;
item.iSubItem = 3;
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_SelectList.SetItem(&item);
//System
item.mask = LVIF_TEXT;
item.iSubItem = 4;
item.pszText = pInfo->MachineName;
c_SelectList.SetItem(&item);
//Machine
item.mask = LVIF_TEXT;
item.iSubItem = 5;
item.pszText = pInfo->Ip;
c_SelectList.SetItem(&item);
}
void CServerControl::OnRightAll()
{
// TODO: Add your control notification handler code here
c_AllList.DeleteAllItems();
c_SelectList.DeleteAllItems();
//m_pApp = (CRMToolApp*)AfxGetApp(); //App努贰胶 器牢磐 悸泼
CServerView* pView = (CServerView*)GetParent();
LVITEM item;
char temp[ 0xff ];
int si = pView->m_nCurServerSet; //ServerIndex(si)
if(si < 0) return;
ServerInfo *pInfo = NULL;
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_SelectList.InsertItem(&item);
//Port 锅龋
item.mask = LVIF_TEXT;
item.iSubItem = 1;
item.pszText = _itoa(pInfo->Port, temp, 10);
c_SelectList.SetItem(&item);
//泅犁 惑怕
sprintf(temp,"%c",m_pApp->m_StatusSymbol[ pInfo->dwStatus ]);
item.mask = LVIF_TEXT;
item.iSubItem = 2;
item.pszText = temp;
c_SelectList.SetItem(&item);
//辑滚鸥涝
item.mask = LVIF_TEXT;
item.iSubItem = 3;
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -