manager.cpp
来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C++ 代码 · 共 442 行
CPP
442 行
#include "stdafx.h"
#include "local.h"
#include "manager.h"
#include "config.h"
#include "setup.h"
#include "info.h"
#include "resource.h"
#include "MasterServer.h"
extern HINSTANCE g_hInst;
CManager::CManager()
{
m_hDlg = NULL;
m_hInfo = NULL;
m_cpSetup = NULL;
m_cpInfo = NULL;
int i=MAX_SERVERTYPE;
while(i--) m_cpConfig[i] = NULL;
}
CManager::~CManager()
{
if(m_hConsole)
SetForegroundWindow(m_hConsole);
if(m_hWnd) DestroyWindow(m_hWnd);
if(m_hDlg) DestroyWindow(m_hDlg);
if(m_hInfo) DestroyWindow(m_hInfo);
SAFE_DELETE(m_cpSetup);
SAFE_DELETE(m_cpInfo);
int i=MAX_SERVERTYPE;
while(i--) SAFE_DELETE(m_cpConfig[i]);
_printf("\nPress any key to continue");
_getch();
FreeConsole();
}
HWND CManager::Init()
{
//傍烹牧飘费 檬扁拳(comctl32.lib 傅农)
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_INTERNET_CLASSES;
InitCommonControlsEx(&icex);
//府摹俊叼飘 扼捞宏矾府 肺靛
// HMODULE hMod=LoadLibrary("Riched20.dll");
// DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), HWND_DESKTOP, MainDlgProc);
// FreeLibrary(hMod);
m_hWnd = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_MANAGER), NULL, (DLGPROC)DlgProc);
if(!m_hWnd) return NULL;
SetWindowPos(m_hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE);
ShowWindow(m_hWnd, SW_SHOW);
InitServerList(m_hWnd);
m_cpSetup = new CSetup;
m_cpInfo = new CInfo;
m_cpConfig[M_MASTERSERVER] = (CConfig *)new CMSConfig;
m_cpConfig[M_LOBBYSERVER] = (CConfig *)new CLSConfig;
m_cpConfig[M_GAMESERVER] = (CConfig *)new CGSConfig;
m_cpConfig[M_PATCHSERVER] = (CConfig *)new CPSConfig;
m_cpConfig[M_RELAYSERVER] = (CConfig *)new CPSConfig;
RECT rect;
char szTitle[256];
GetWindowRect(m_hWnd, &rect);
sprintf(szTitle, "%s:%s - MasterServer [Manager]", g_cMasterServer.m_cConfig.sys_name, g_cMasterServer.m_cConfig.sys_group);
SetWindowText(m_hWnd, szTitle);
sprintf(szTitle, "%s:%s - MasterServer [Monitor]", g_cMasterServer.m_cConfig.sys_name, g_cMasterServer.m_cConfig.sys_group);
m_hConsole = _console(rect.right, rect.top, 640, rect.bottom, 80, 500, szTitle);
if(!m_hConsole) return false;
SetForegroundWindow(m_hConsole);
SetForegroundWindow(m_hWnd);
m_bSendAll = true;
return m_hWnd;
}
void CManager::InitServerList(HWND hWnd)
{
LVCOLUMN lvCol;
HWND hList = GetDlgItem(hWnd, IDC_SERVERLIST);
ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
lvCol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvCol.fmt = LVCFMT_CENTER;
lvCol.cx = 34;
lvCol.pszText = "ID";
lvCol.iSubItem = 0;
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&lvCol);
lvCol.cx = 82;
lvCol.pszText = "Name";
lvCol.iSubItem = 1;
SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&lvCol);
lvCol.cx = 42;
lvCol.pszText = "State";
lvCol.iSubItem = 2;
SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&lvCol);
lvCol.cx = 86;
lvCol.pszText = "RemoteIP";
lvCol.iSubItem = 3;
SendMessage(hList, LVM_INSERTCOLUMN, 3, (LPARAM)&lvCol);
lvCol.cx = 42;
lvCol.pszText = "Port";
lvCol.iSubItem = 4;
SendMessage(hList, LVM_INSERTCOLUMN, 4, (LPARAM)&lvCol);
}
void CManager::SetSelectedServer(CLocal *pLocal)
{
if(pLocal->m_iList == -1) return;
HWND hList = GetDlgItem(m_hWnd, IDC_SERVERLIST);
ListView_SetItemState(hList, pLocal->m_iList, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
}
CLocal *CManager::GetSelectedServer()
{
HWND hList = GetDlgItem(m_hWnd, IDC_SERVERLIST);
int iSelection = ListView_GetNextItem(hList, -1, LVNI_ALL | LVNI_SELECTED);
if(iSelection == -1) return NULL;
return &g_cMasterServer.m_cpLocal[iSelection];
}
void CManager::SetServerList(CLocal *pLocal)
{
char buf[50];
LVITEM lvItem;
HWND hList = GetDlgItem(m_hWnd, IDC_SERVERLIST);
lvItem.mask = LVIF_TEXT;
lvItem.state = 0;
lvItem.stateMask = 0;
lvItem.iSubItem = 0;
lvItem.pszText = _ui64toa(pLocal->m_nAccount, buf, 10);
if(pLocal->m_iList == -1)
{
lvItem.iItem = (short)SendMessage(hList, LVM_GETITEMCOUNT, 0, 0);
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
}
else
{
lvItem.iItem = pLocal->m_iList;
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);
}
lvItem.iSubItem = 1;
lvItem.pszText = _T(pLocal->m_szName);
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);
lvItem.iSubItem = 2;
switch(pLocal->m_nState)
{
case CClient::STATE_CLOSE: lvItem.pszText = "Close"; break;
case CClient::STATE_DISCONNECT: lvItem.pszText = "Open"; break;
case CClient::STATE_LOGIN: lvItem.pszText = "Start"; break;
default: lvItem.pszText = "Unknown"; break;
}
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);
IN_ADDR in_addr;
in_addr.s_addr = pLocal->m_dwRemoteIP;
lvItem.iSubItem = 3;
lvItem.pszText = inet_ntoa(in_addr);
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);
lvItem.iSubItem = 4;
lvItem.pszText = itoa(pLocal->m_wPort, buf, 10);
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvItem);
pLocal->m_iList = (short)lvItem.iItem;
}
LRESULT CALLBACK CManager::DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
// if(msg == WM_SIZE) g_active = !(wParam == SIZE_MAXHIDE || wParam == SIZE_MINIMIZED);
switch(msg)
{
case WM_INITDIALOG:
SetDlgItemText(hDlg, IDC_CHAT, "----------------------------------------- Broadcast -------------------------------------------");
CheckRadioButton(hDlg, IDC_SENDALL, IDC_SENDSEL, IDC_SENDALL);
break;
case WM_DESTROY:
g_cMasterServer.Shotdown();
break;
case WM_NOTIFY:
if(wParam == IDC_SERVERLIST)
{
LPNMHDR hdr = (LPNMHDR)lParam;
LPNMLISTVIEW nlv = (LPNMLISTVIEW)lParam;
// LPNMITEMACTIVATE nia;
switch(hdr->code)
{
case LVN_ITEMCHANGED:
if(nlv->uChanged == LVIF_STATE && nlv->uNewState == (LVIS_SELECTED | LVIS_FOCUSED))
{
g_cMasterServer.GetManager()->SetButtonState(nlv->iItem);
if(!g_cMasterServer.GetManager()->m_hInfo) break;
g_cMasterServer.GetManager()->SetInfomation(nlv->iItem);
}
break;
case NM_DBLCLK:
if(g_cMasterServer.GetManager()->m_hInfo) break;
g_cMasterServer.GetManager()->m_hInfo = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_INFO), hDlg, (DLGPROC)CInfo::DlgProc);
if(g_cMasterServer.GetManager()->m_hInfo)
{
RECT rect;
int x, y, width, height;
GetWindowRect(g_cMasterServer.GetManager()->m_hWnd, &rect);
x=rect.left;
y=rect.bottom;
GetWindowRect(g_cMasterServer.GetManager()->m_hInfo, &rect);
width = rect.right - rect.left;
height = rect.bottom - rect.top;
MoveWindow(g_cMasterServer.GetManager()->m_hInfo, x, y, width, height, TRUE);
ShowWindow(g_cMasterServer.GetManager()->m_hInfo, SW_SHOW);
SetFocus(GetDlgItem(g_cMasterServer.GetManager()->m_hWnd, IDC_SERVERLIST));
g_cMasterServer.GetManager()->SetInfomation(nlv->iItem);
}
break;
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_START:
g_cMasterServer.Open();
break;
case IDC_SETUP:
if(g_cMasterServer.GetManager()->m_hDlg) break;
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_SETUP), hDlg, (DLGPROC)CSetup::DlgProc);
if(!g_cMasterServer.GetManager()->m_hDlg) break;
ShowWindow(g_cMasterServer.GetManager()->m_hDlg, SW_SHOW);
break;
case IDC_CONFIG:
if(!g_cMasterServer.GetManager()->m_hDlg)
{
CLocal *pLocal = g_cMasterServer.GetManager()->GetSelectedServer();
if(!pLocal)
{
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGMS), hDlg, (DLGPROC)CMSConfig::DlgProc);
}
else
{
if(pLocal->m_nState != CClient::STATE_LOGIN && pLocal->m_nType != M_MASTERSERVER)
break;
switch(pLocal->m_nType)
{
case M_MASTERSERVER:
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGMS), hDlg, (DLGPROC)CMSConfig::DlgProc);
break;
case M_LOBBYSERVER:
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGLS), hDlg, (DLGPROC)CLSConfig::DlgProc);
break;
case M_GAMESERVER:
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGGS), hDlg, (DLGPROC)CGSConfig::DlgProc);
break;
case M_PATCHSERVER:
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGPS), hDlg, (DLGPROC)CPSConfig::DlgProc);
break;
case M_RELAYSERVER:
g_cMasterServer.GetManager()->m_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_CONFIGPS), hDlg, (DLGPROC)CPSConfig::DlgProc);
break;
}
}
if(g_cMasterServer.GetManager()->m_hDlg)
ShowWindow(g_cMasterServer.GetManager()->m_hDlg, SW_SHOW);
}
break;
case IDC_EXIT:
#ifdef _MODE_SERVICE
g_cMasterServer.Close(); //蜡历啊 规俊辑 唱柯 饶 辆丰
#else
g_cMasterServer.Shotdown(); //碍力辆丰
#endif
break;
}
break;
}
return FALSE;
}
void CManager::SetButtonWaiting()
{
EnableWindow(GetDlgItem(m_hWnd, IDC_ADDSERVER), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_DELSERVER), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_START), TRUE);
}
void CManager::SetButtonStart()
{
SetDlgItemText(m_hWnd, IDC_CHAT, "");
EnableWindow(GetDlgItem(m_hWnd, IDC_CHAT), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_SEND), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_SERVERLIST), TRUE);
EnableWindow(GetDlgItem(m_hWnd, IDC_START), FALSE);
}
void CManager::SetButtonState(int iItem)
{
CLocal *pLocal = g_cMasterServer.m_cpLocal + iItem;
BOOL bEnable = (pLocal->m_nState == CClient::STATE_LOGIN);
EnableWindow(GetDlgItem(m_hWnd, IDC_SEND), m_bSendAll);
EnableWindow(GetDlgItem(m_hWnd, IDC_CONFIG), bEnable);
EnableWindow(GetDlgItem(m_hWnd, IDC_STOP), (bEnable && pLocal->m_nType != M_MASTERSERVER));
}
void CManager::SetInfomation(int iItem)
{
if(!m_hInfo) return;
CLocal *pLocal = g_cMasterServer.m_cpLocal + iItem;
char szTitle[LEN_BUFFER+1] = {"MasterServer [Infomation] - "};
switch(pLocal->m_nType)
{
case M_MASTERSERVER:
strcat(szTitle, "MasterServer : ");
break;
case M_LOBBYSERVER:
strcat(szTitle, "LobbyServer : ");
break;
case M_GAMESERVER:
strcat(szTitle, "GameServer : ");
break;
case M_PATCHSERVER:
strcat(szTitle, "PatchServer : ");
break;
case M_RELAYSERVER:
strcat(szTitle, "RelayServer : ");
break;
}
strcat(szTitle, pLocal->m_szName);
SetWindowText(m_hInfo, szTitle);
m_cpInfo->SetCurList(iItem);
m_cpInfo->SetServerStart(pLocal->m_lStartTime);
m_cpInfo->SetServerEnd(pLocal->m_lEndTime);
if(pLocal->m_nType == M_RELAYSERVER)
{
m_cpInfo->SetCurPacketSize(pLocal->m_nCurPacketSize);
m_cpInfo->SetMaxPacketSize(pLocal->m_nMaxPacketSize);
}
else
{
m_cpInfo->SetCurUserCnt(pLocal->m_nUserCnt);
m_cpInfo->SetMaxUserCnt(pLocal->m_nUserMax);
}
}
void CManager::SetInfoServerStart(CLocal *pLocal)
{
if(!m_cpInfo->IsCurList(pLocal->m_iList))
return;
m_cpInfo->SetServerStart(pLocal->m_lStartTime);
}
void CManager::SetInfoServerEnd(CLocal *pLocal)
{
if(!m_cpInfo->IsCurList(pLocal->m_iList))
return;
m_cpInfo->SetServerEnd(pLocal->m_lEndTime);
}
void CManager::SetInfoUserCnt(CLocal *pLocal)
{
if(pLocal->m_nType == M_RELAYSERVER)
{
if(pLocal->m_nCurPacketSize > pLocal->m_nMaxPacketSize)
pLocal->m_nMaxPacketSize = pLocal->m_nCurPacketSize;
if(!m_cpInfo->IsCurList(pLocal->m_iList))
return;
m_cpInfo->SetCurPacketSize(pLocal->m_nCurPacketSize);
m_cpInfo->SetMaxPacketSize(pLocal->m_nMaxPacketSize);
}
else
{
if(pLocal->m_nUserCnt > pLocal->m_nUserMax)
pLocal->m_nUserMax = pLocal->m_nUserCnt;
if(!m_cpInfo->IsCurList(pLocal->m_iList))
return;
m_cpInfo->SetCurUserCnt(pLocal->m_nUserCnt);
m_cpInfo->SetMaxUserCnt(pLocal->m_nUserMax);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?