Files
wnmj/Servers/服务器组件/模块管理/DlgServerItem.cpp

413 lines
11 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "Stdafx.h"
#include "Resource.h"
#include "DlgServerItem.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
#define LIST_STYTE LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_FLATSB
//////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CDlgServerItem, CDialog)
//<2F><>ť<EFBFBD><C5A5>Ϣ
ON_BN_CLICKED(IDC_LOAD_SERVER, OnBnClickedLoadServer)
ON_BN_CLICKED(IDC_RELOAD_LIST, OnBnClickedReLoadList)
ON_BN_CLICKED(IDC_DELETE_SERVER, OnBnClickedDeleteServer)
ON_BN_CLICKED(IDC_SERVICE_ATTRIB, OnBnClickedServiceAttrib)
//<2F>ؼ<EFBFBD><D8BC><EFBFBD>Ϣ
ON_NOTIFY(NM_DBLCLK, IDC_SERVER_LIST, OnNMDblclkServerList)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_SERVER_LIST, OnLvnItemChangedServerList)
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDlgServerItem::CDlgServerItem() : CDialog(IDD_SERVER_ITEM)
{
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ZeroMemory(&m_ModuleInitParameter,sizeof(m_ModuleInitParameter));
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDlgServerItem::~CDlgServerItem()
{
}
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
VOID CDlgServerItem::DoDataExchange(CDataExchange * pDX)
{
__super::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SERVER_LIST, m_ServerListControl);
}
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
BOOL CDlgServerItem::PreTranslateMessage(MSG * pMsg)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ((pMsg->message==WM_KEYDOWN)&&(pMsg->wParam==VK_ESCAPE))
{
return TRUE;
}
return __super::PreTranslateMessage(pMsg);
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CDlgServerItem::OnInitDialog()
{
__super::OnInitDialog();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
AfxSetResourceHandle(GetModuleHandle(NULL));
//<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
LoadDBServerItem();
return TRUE;
}
//ȷ<><C8B7><EFBFBD><EFBFBD>Ϣ
VOID CDlgServerItem::OnOK()
{
return;
}
//<2F>򿪷<EFBFBD><F2BFAAB7><EFBFBD>
bool CDlgServerItem::OpenGameServer()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME));
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
if (DoModal()==IDC_LOAD_SERVER)
{
return true;
}
return false;
}
//<2F>򿪷<EFBFBD><F2BFAAB7><EFBFBD>
bool CDlgServerItem::OpenGameServer(WORD wServerID)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServerInfo GameServerResult;
ZeroMemory(&GameServerResult,sizeof(GameServerResult));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
TCHAR szMachineID[LEN_MACHINE_ID];
CWHService::GetMachineID(szMachineID);
//<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
CServerInfoManager ServerInfoManager;
if (ServerInfoManager.LoadGameServerInfo(szMachineID,wServerID,GameServerResult)==false)
{
return false;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if (GetModuleInitParameter(&GameServerResult,true)==false)
{
return false;
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool CDlgServerItem::LoadDBServerItem()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_ServerListControl.DeleteAllItems();
//<2F><><EFBFBD>ð<EFBFBD>ť
GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
TCHAR szMachineID[LEN_MACHINE_ID];
CWHService::GetMachineID(szMachineID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CServerInfoManager ServerInfoManager;
if (ServerInfoManager.LoadGameServerInfo(szMachineID,m_ServerInfoBuffer)==true)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POSITION Position=m_ServerInfoBuffer.m_GameServerInfoMap.GetStartPosition();
//ö<><C3B6>ģ<EFBFBD><C4A3>
while (Position!=NULL)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WORD wServerID=0L;
tagGameServerInfo * pGameServerInfo=NULL;
m_ServerInfoBuffer.m_GameServerInfoMap.GetNextAssoc(Position,wServerID,pGameServerInfo);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
ASSERT(pGameServerInfo!=NULL);
if (pGameServerInfo!=NULL) m_ServerListControl.InsertServerInfo(pGameServerInfo);
}
return true;
}
return false;
}
//<2F><><EFBFBD>°<EFBFBD>ť
bool CDlgServerItem::UpdateControlStatus()
{
//<2F><>ȡѡ<C8A1><D1A1>
POSITION Position=m_ServerListControl.GetFirstSelectedItemPosition();
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
if (Position!=NULL)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
INT nListItem=m_ServerListControl.GetNextSelectedItem(Position);
tagGameServerInfo * pGameServerInfo=(tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
//<2F><><EFBFBD>ð<EFBFBD>ť
if (pGameServerInfo->dwNativeVersion!=0L)
{
GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
}
}
else
{
//<2F><><EFBFBD>ð<EFBFBD>ť
GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
}
return true;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
bool CDlgServerItem::GetModuleInitParameter(tagGameServerInfo * pGameServerInfo, bool bAutoMode)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pGameServerInfo!=NULL);
if (pGameServerInfo==NULL) return false;
//<2F><>Ϸģ<CFB7><C4A3>
CGameServiceManagerHelper GameServiceManager;
GameServiceManager.SetModuleCreateInfo(pGameServerInfo->szServerDLLName,GAME_SERVICE_CREATE_NAME);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (pGameServerInfo->dwNativeVersion==0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
TCHAR szString[128]=TEXT("");
_sntprintf_s(szString,CountArray(szString),TEXT("[ %s ] <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ȱ<EFBFBD>װ<EFBFBD><D7B0>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),pGameServerInfo->szGameName);
//<2F><>ʾ<EFBFBD><CABE>Ϣ
if (bAutoMode==true) CTraceService::TraceString(szString,TraceLevel_Exception);
else AfxMessageBox(szString,MB_ICONERROR);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (pGameServerInfo->dwNativeVersion!=pGameServerInfo->dwServerVersion)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
TCHAR szString[128]=TEXT("");
_sntprintf_s(szString,CountArray(szString),TEXT("[ %s ] <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),pGameServerInfo->szGameName);
//<2F><>ʾ<EFBFBD><CABE>Ϣ
if (bAutoMode==true) CTraceService::TraceString(szString,TraceLevel_Exception);
else AfxMessageBox(szString,MB_ICONERROR);
return false;
}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
if (GameServiceManager.CreateInstance()==false)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
TCHAR szString[128]=TEXT("");
_sntprintf_s(szString,CountArray(szString),TEXT("[ %s ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>߼<EFBFBD><DFBC><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),pGameServerInfo->szGameName);
//<2F><>ʾ<EFBFBD><CABE>Ϣ
if (bAutoMode==true) CTraceService::TraceString(szString,TraceLevel_Exception);
else AfxMessageBox(szString,MB_ICONERROR);
return false;
}
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameServiceManager->GetServiceAttrib(m_ModuleInitParameter.GameServiceAttrib);
//<2F>ҽ<EFBFBD><D2BD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.wKindID=pGameServerInfo->wKindID;
m_ModuleInitParameter.GameServiceOption.wNodeID=pGameServerInfo->wNodeID;
m_ModuleInitParameter.GameServiceOption.wSortID=pGameServerInfo->wSortID;
m_ModuleInitParameter.GameServiceOption.wServerID=pGameServerInfo->wServerID;
//˰<><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.lCellScore=pGameServerInfo->lCellScore;
m_ModuleInitParameter.GameServiceOption.wRevenueRatio=pGameServerInfo->wRevenueRatio;
m_ModuleInitParameter.GameServiceOption.lServiceScore=pGameServerInfo->lServiceScore;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.lRestrictScore=pGameServerInfo->lRestrictScore;
m_ModuleInitParameter.GameServiceOption.lMinTableScore=pGameServerInfo->lMinTableScore;
m_ModuleInitParameter.GameServiceOption.lMinEnterScore=pGameServerInfo->lMinEnterScore;
m_ModuleInitParameter.GameServiceOption.lMaxEnterScore=pGameServerInfo->lMaxEnterScore;
//<2F><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.cbMinEnterMember=pGameServerInfo->cbMinEnterMember;
m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember=pGameServerInfo->cbMaxEnterMember;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.dwServerRule=pGameServerInfo->dwServerRule;
m_ModuleInitParameter.GameServiceOption.dwAttachUserRight=pGameServerInfo->dwAttachUserRight;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.wMaxPlayer=pGameServerInfo->wMaxPlayer;
m_ModuleInitParameter.GameServiceOption.wTableCount=pGameServerInfo->wTableCount;
m_ModuleInitParameter.GameServiceOption.wServerPort=pGameServerInfo->wServerPort;
m_ModuleInitParameter.GameServiceOption.wServerType=pGameServerInfo->wServerType;
lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerName,pGameServerInfo->szServerName,LEN_SERVER);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleInitParameter.GameServiceOption.cbDistributeRule=pGameServerInfo->cbDistributeRule;
m_ModuleInitParameter.GameServiceOption.wMinDistributeUser=pGameServerInfo->wMinDistributeUser;
m_ModuleInitParameter.GameServiceOption.wMaxDistributeUser=pGameServerInfo->wMaxDistributeUser;
m_ModuleInitParameter.GameServiceOption.wDistributeTimeSpace=pGameServerInfo->wDistributeTimeSpace;
m_ModuleInitParameter.GameServiceOption.wDistributeDrawCount=pGameServerInfo->wDistributeDrawCount;
m_ModuleInitParameter.GameServiceOption.wDistributeStartDelay=pGameServerInfo->wDistributeStartDelay;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseName,pGameServerInfo->szDataBaseName,CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseName));
lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr,pGameServerInfo->szDataBaseAddr,CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT uCustomRuleSize=sizeof(m_ModuleInitParameter.GameServiceOption.cbCustomRule);
CopyMemory(m_ModuleInitParameter.GameServiceOption.cbCustomRule,pGameServerInfo->cbCustomRule,uCustomRuleSize);
return true;
}
//<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
VOID CDlgServerItem::OnBnClickedLoadServer()
{
//<2F><>ȡѡ<C8A1><D1A1>
ASSERT(m_ServerListControl.GetFirstSelectedItemPosition()!=NULL);
POSITION Position=m_ServerListControl.GetFirstSelectedItemPosition();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
INT nListItem=m_ServerListControl.GetNextSelectedItem(Position);
tagGameServerInfo * pGameServerInfo=(tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
if ((pGameServerInfo!=NULL)&&(GetModuleInitParameter(pGameServerInfo,false)==true))
{
EndDialog(IDC_LOAD_SERVER);
}
return;
}
//ˢ<><CBA2><EFBFBD>б<EFBFBD>
VOID CDlgServerItem::OnBnClickedReLoadList()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
LoadDBServerItem();
return;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CDlgServerItem::OnBnClickedDeleteServer()
{
//<2F><>ȡѡ<C8A1><D1A1>
ASSERT(m_ServerListControl.GetFirstSelectedItemPosition()!=NULL);
POSITION Position=m_ServerListControl.GetFirstSelectedItemPosition();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
INT nListItem=m_ServerListControl.GetNextSelectedItem(Position);
tagGameServerInfo * pGameServerInfo=(tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
if (pGameServerInfo!=NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
TCHAR szString[128]=TEXT("");
_sntprintf_s(szString,CountArray(szString),TEXT("ȷʵҪɾ<EFBFBD><EFBFBD> [ %s ] <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),pGameServerInfo->szServerName);
//<2F><>ʾ<EFBFBD><CABE>Ϣ
if (AfxMessageBox(szString,MB_ICONQUESTION|MB_YESNO)!=IDYES) return;
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CServerInfoManager ServerInfoManager;
if (ServerInfoManager.DeleteGameServer(pGameServerInfo->wServerID)==false) return;
//ɾ<><C9BE><EFBFBD>б<EFBFBD>
m_ServerListControl.DeleteItem(nListItem);
m_ServerInfoBuffer.DeleteServerInfo(pGameServerInfo->wServerID);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
if (m_ServerListControl.GetItemCount()>0)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
INT nItemCount=m_ServerListControl.GetItemCount();
INT nNextItem=(nListItem>=nItemCount)?(nItemCount-1):nListItem;
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
m_ServerListControl.SetItemState(nNextItem,LVIS_SELECTED,LVIS_SELECTED);
}
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD>
UpdateControlStatus();
}
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CDlgServerItem::OnBnClickedServiceAttrib()
{
return;
}
//˫<><CBAB><EFBFBD>б<EFBFBD>
VOID CDlgServerItem::OnNMDblclkServerList(NMHDR * pNMHDR, LRESULT * pResult)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (((NMITEMACTIVATE *)pNMHDR)->iItem!=LB_ERR)
{
OnBnClickedLoadServer();
}
return;
}
//ѡ<><D1A1><EFBFBD>ı<EFBFBD>
VOID CDlgServerItem::OnLvnItemChangedServerList(NMHDR * pNMHDR, LRESULT * pResult)
{
//<2F><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD>
UpdateControlStatus();
return;
}
//////////////////////////////////////////////////////////////////////////////////