328 lines
7.9 KiB
C++
328 lines
7.9 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "ServerListControl.h"
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CServerListControl::CServerListControl()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CServerListControl::~CServerListControl()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
VOID CServerListControl::InitListControl()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT nColIndex=0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,90);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_CENTER,80);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_CENTER,80);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>ʶ"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ʶ"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ"),LVCFMT_CENTER,60);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,100);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD>ַ"),LVCFMT_LEFT,100);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,140);
|
|||
|
|
InsertColumn(nColIndex++,TEXT("<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,120);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT CServerListControl::SortListItemData(LPARAM lParam1, LPARAM lParam2, WORD wColumnIndex)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagGameServerInfo * pGameServerInfo1=(tagGameServerInfo *)lParam1;
|
|||
|
|
tagGameServerInfo * pGameServerInfo2=(tagGameServerInfo *)lParam2;
|
|||
|
|
|
|||
|
|
//<2F><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
|||
|
|
bool bInstall1=(pGameServerInfo1->dwNativeVersion!=0L);
|
|||
|
|
bool bInstall2=(pGameServerInfo2->dwNativeVersion!=0L);
|
|||
|
|
if (bInstall1!=bInstall2) return (bInstall1==true)?1:-1;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
switch (wColumnIndex)
|
|||
|
|
{
|
|||
|
|
case 0: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szServerName,pGameServerInfo2->szServerName);
|
|||
|
|
}
|
|||
|
|
case 1: //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szGameName,pGameServerInfo2->szGameName);
|
|||
|
|
}
|
|||
|
|
case 2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wServerType>pGameServerInfo2->wServerType)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wTableCount>pGameServerInfo2->wTableCount)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 4: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wServerPort>pGameServerInfo2->wServerPort)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 5: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wServerID>pGameServerInfo2->wServerID)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 6: //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
WORD wKindID1=pGameServerInfo1->wKindID;
|
|||
|
|
if (wKindID1==0) wKindID1=pGameServerInfo1->wGameID;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
WORD wKindID2=pGameServerInfo2->wKindID;
|
|||
|
|
if (wKindID2==0) wKindID2=pGameServerInfo2->wGameID;
|
|||
|
|
|
|||
|
|
return (wKindID1>wKindID2)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 7: //<2F>ڵ<EFBFBD><DAB5><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wNodeID>pGameServerInfo2->wNodeID)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 8: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return (pGameServerInfo1->wSortID>pGameServerInfo2->wSortID)?SORT_POSITION_AFTER:SORT_POSITION_FRONT;
|
|||
|
|
}
|
|||
|
|
case 9: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szDataBaseName,pGameServerInfo2->szDataBaseName);
|
|||
|
|
}
|
|||
|
|
case 10: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ַ
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szDataBaseAddr,pGameServerInfo2->szDataBaseAddr);
|
|||
|
|
}
|
|||
|
|
case 11: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szServerDLLName,pGameServerInfo2->szServerDLLName);
|
|||
|
|
}
|
|||
|
|
case 12: //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return lstrcmp(pGameServerInfo1->szClientEXEName,pGameServerInfo2->szClientEXEName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>ɫ
|
|||
|
|
VOID CServerListControl::GetListItemColor(LPARAM lItemParam, UINT uItemStatus, tagListItemColor & ListItemColor)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(lItemParam!=NULL);
|
|||
|
|
tagGameServerInfo * pGameServerInfo=(tagGameServerInfo *)lItemParam;
|
|||
|
|
|
|||
|
|
//û<>а<EFBFBD>װ
|
|||
|
|
if (pGameServerInfo->dwNativeVersion==0L)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
ListItemColor.rcTextColor=RGB(125,125,125);
|
|||
|
|
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(50,50,50):CR_NORMAL_BK;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>
|
|||
|
|
if (pGameServerInfo->dwNativeVersion!=pGameServerInfo->dwServerVersion)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
ListItemColor.rcTextColor=RGB(128,0,0);
|
|||
|
|
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(230,230,0):CR_NORMAL_BK;
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>汾һ<E6B1BE><D2BB>
|
|||
|
|
if (pGameServerInfo->dwNativeVersion==pGameServerInfo->dwServerVersion)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
ListItemColor.rcBackColor=(uItemStatus&ODS_SELECTED)?RGB(0,0,128):CR_NORMAL_BK;
|
|||
|
|
ListItemColor.rcTextColor=(uItemStatus&ODS_SELECTED)?RGB(255,255,255):RGB(0,0,0);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
bool CServerListControl::InsertServerInfo(tagGameServerInfo * pGameServerInfo)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LVFINDINFO FindInfo;
|
|||
|
|
ZeroMemory(&FindInfo,sizeof(FindInfo));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
FindInfo.flags=LVFI_PARAM;
|
|||
|
|
FindInfo.lParam=(LPARAM)pGameServerInfo;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
INT nInsertItem=FindItem(&FindInfo);
|
|||
|
|
if (nInsertItem!=LB_ERR) return true;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
for (WORD i=0;i<m_ListHeaderCtrl.GetItemCount();i++)
|
|||
|
|
{
|
|||
|
|
if (i==0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT nIndex=GetInsertIndex(pGameServerInfo);
|
|||
|
|
LPCTSTR pszDescribe=GetDescribeString(pGameServerInfo,i);
|
|||
|
|
nInsertItem=InsertItem(LVIF_TEXT|LVIF_PARAM,nIndex,pszDescribe,0,0,0,(LPARAM)pGameServerInfo);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SetItem(nInsertItem,i,LVIF_TEXT,GetDescribeString(pGameServerInfo,i),0,0,0,0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CServerListControl::GetInsertIndex(tagGameServerInfo * pGameServerInfo)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT nItemCount=GetItemCount();
|
|||
|
|
tagGameServerInfo * pGameServerTemp=NULL;
|
|||
|
|
|
|||
|
|
//<2F><>ȡλ<C8A1><CEBB>
|
|||
|
|
for (INT i=0;i<nItemCount;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
pGameServerTemp=(tagGameServerInfo *)GetItemData(i);
|
|||
|
|
|
|||
|
|
//<2F><>װ<EFBFBD>ж<EFBFBD>
|
|||
|
|
if ((pGameServerInfo->dwNativeVersion==0)&&(pGameServerTemp->dwNativeVersion!=0))
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
if (lstrcmp(pGameServerInfo->szGameName,pGameServerTemp->szGameName)<0)
|
|||
|
|
{
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (lstrcmp(pGameServerInfo->szServerName,pGameServerTemp->szServerName)<0)
|
|||
|
|
{
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return nItemCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
LPCTSTR CServerListControl::GetDescribeString(tagGameServerInfo * pGameServerInfo, WORD wColumnIndex)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static TCHAR szDescribe[128]=TEXT("");
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|||
|
|
switch (wColumnIndex)
|
|||
|
|
{
|
|||
|
|
case 0: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szServerName;
|
|||
|
|
}
|
|||
|
|
case 1: //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szGameName;
|
|||
|
|
}
|
|||
|
|
case 2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F>Ƹ<EFBFBD><C6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pGameServerInfo->wServerType&GAME_GENRE_GOLD)
|
|||
|
|
{
|
|||
|
|
lstrcpyn(szDescribe,TEXT("<EFBFBD>Ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),CountArray(szDescribe));
|
|||
|
|
return szDescribe;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pGameServerInfo->wServerType&GAME_GENRE_SCORE)
|
|||
|
|
{
|
|||
|
|
lstrcpyn(szDescribe,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),CountArray(szDescribe));
|
|||
|
|
return szDescribe;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pGameServerInfo->wServerType&GAME_GENRE_MATCH)
|
|||
|
|
{
|
|||
|
|
lstrcpyn(szDescribe,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),CountArray(szDescribe));
|
|||
|
|
return szDescribe;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ѵ<><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pGameServerInfo->wServerType&GAME_GENRE_EDUCATE)
|
|||
|
|
{
|
|||
|
|
lstrcpyn(szDescribe,TEXT("˽<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),CountArray(szDescribe));
|
|||
|
|
return szDescribe;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TEXT("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
case 3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
{
|
|||
|
|
return _itot(pGameServerInfo->wTableCount, szDescribe, 10);
|
|||
|
|
}
|
|||
|
|
case 4: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (pGameServerInfo->wServerPort==0) return TEXT("-");
|
|||
|
|
return _itot(pGameServerInfo->wServerPort,szDescribe,10);
|
|||
|
|
}
|
|||
|
|
case 5: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return _itot(pGameServerInfo->wServerID,szDescribe,10);
|
|||
|
|
}
|
|||
|
|
case 6: //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
WORD wKindID=pGameServerInfo->wKindID;
|
|||
|
|
WORD wGameID=pGameServerInfo->wGameID;
|
|||
|
|
return _itot((wKindID==0)?wGameID:wKindID,szDescribe,10);
|
|||
|
|
}
|
|||
|
|
case 7: //<2F>ڵ<EFBFBD><DAB5><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return _itot(pGameServerInfo->wNodeID,szDescribe,10);
|
|||
|
|
}
|
|||
|
|
case 8: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|||
|
|
{
|
|||
|
|
return _itot(pGameServerInfo->wSortID,szDescribe,10);
|
|||
|
|
}
|
|||
|
|
case 9: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szDataBaseName;
|
|||
|
|
}
|
|||
|
|
case 10: //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ַ
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szDataBaseAddr;
|
|||
|
|
}
|
|||
|
|
case 11: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szServerDLLName;
|
|||
|
|
}
|
|||
|
|
case 12: //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return pGameServerInfo->szClientEXEName;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|