Files
wnmj/Servers/服务器组件/游戏服务器/MatchService.cpp

1375 lines
40 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include ".\matchservice.h"
#include "DataBasePacket.h"
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_MATCH_TIME_PULSE 200 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_MATCH_GAME_START 201 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
#define IDI_MATCH_GAME_OVER 202 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_DISTRIBUTE_TIMER 203 //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
BEGIN_MESSAGE_MAP(CDlgAddMatchDate, CDialog)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CDlgAddMatchInfo, CDialog)
END_MESSAGE_MAP()
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CTimeRankingsMatch::CTimeRankingsMatch(WORD wMatchID):m_wMatchID(wMatchID)
{
m_dwMatchFee=100;
m_pIMainServiceFrame=NULL;
m_pIKernelDataBaseEngine=NULL;
ZeroMemory(&m_MatchInfo,sizeof(m_MatchInfo));
m_cbMatchStatus=MATCH_STATUS_NOT_STARTED;
m_cbCurMatch=0xFF;
ZeroMemory(m_szMatchName,sizeof(m_szMatchName));
m_pMatchRank=NULL;
m_wRankCount=0;
m_pParameterDlg=new CMatchParameterDlg(m_MatchInfo,m_uiMatchDate,m_cbMatchTime,m_szMatchName,m_dwMatchFee,m_lInitScore,m_wMatchGameCount,m_wMatchID);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTimeRankingsMatch::~CTimeRankingsMatch(void)
{
m_DistributeManage.RemoveAll();
m_ServerUserItemMap.RemoveAll();
for(INT_PTR i=0; i<m_MatchInfo.GetCount();i++)
{
SafeDelete(m_MatchInfo.GetAt(i));
}
if(m_pParameterDlg!=NULL)
SafeDelete(m_pParameterDlg);
if(m_pMatchRank!=NULL)
SafeDeleteArray(m_pMatchRank);
m_MatchInfo.RemoveAll();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
bool CTimeRankingsMatch::OnAttemperEngineStart(IUnknownEx * pIUnknownEx)
{
StartNextMatch();
m_pITimerEngine->SetTimer(IDI_MATCH_TIME_PULSE,1000,-1,0);
m_pITimerEngine->SetTimer(IDI_DISTRIBUTE_TIMER,15000,-1,0);
return true;
}
//ֹͣ<CDA3>¼<EFBFBD>
bool CTimeRankingsMatch::OnAttemperEngineConclude(IUnknownEx * pIUnknownEx)
{
m_DistributeManage.RemoveAll();
m_ServerUserItemMap.RemoveAll();
for(INT_PTR i=0; i<m_MatchInfo.GetCount();i++)
{
SafeDelete(m_MatchInfo.GetAt(i));
}
m_MatchInfo.RemoveAll();
m_dwMatchFee=0;
m_pIMainServiceFrame=NULL;
m_pIKernelDataBaseEngine=NULL;
ZeroMemory(&m_MatchInfo,sizeof(m_MatchInfo));
return true;
}
//<2F>ӿڲ<D3BF>ѯ
VOID * CTimeRankingsMatch::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
{
QUERYINTERFACE(IMatchService,Guid,dwQueryVer);
QUERYINTERFACE(IMatchTableFrameNotify,Guid,dwQueryVer);
QUERYINTERFACE_IUNKNOWNEX(IMatchService,Guid,dwQueryVer);
return NULL;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CTimeRankingsMatch::OnUserJoinMatch(IServerUserItem * pIServerUserItem)
{
TCHAR szDescribe[128]=TEXT("");
if(m_cbMatchStatus==MATCH_STATUS_NOT_STARTED)
{
SYSTEMTIME stBegin = {};
m_TimeMatchStart.GetAsSystemTime(stBegin);
_sntprintf( szDescribe,CountArray(szDescribe),TEXT("%s <20><> [ %ld ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>Ϊ %s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵȺ<C4B5><C8BA><EFBFBD>"),m_szMatchName,m_cbCurMatch+1,GetTimeString(stBegin));
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,szDescribe,SMT_EJECT);
return true;
}
else if(m_cbMatchStatus==MATCH_STATUS_WAIT_FINISH || m_cbMatchStatus==MATCH_STATUS_FINISH)
{
if(m_cbCurMatch==m_cbMatchTime-1)
_sntprintf( szDescribe,CountArray(szDescribe),TEXT("<EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӭ<EFBFBD>´βμӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
else
{
FILETIME ftBegin = {};
SYSTEMTIME stBegin = {};
if(m_cbMatchStatus==MATCH_STATUS_WAIT_FINISH)
CopyMemory( &ftBegin,&m_uiMatchDate[(m_cbCurMatch+1)*2],sizeof(ftBegin));
else if(m_cbMatchStatus==MATCH_STATUS_FINISH)
CopyMemory( &ftBegin,&m_uiMatchDate[(m_cbCurMatch)*2],sizeof(ftBegin));
CTime tStart(ftBegin);
tStart.GetAsSystemTime(stBegin);
_sntprintf( szDescribe,CountArray(szDescribe),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<EFBFBD><EFBFBD>Ϊ%s, <20><><EFBFBD><EFBFBD><EFBFBD>ĵȴ<C4B5><C8B4><EFBFBD>"),GetTimeString(stBegin));
}
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,szDescribe,SMT_CHAT);
return true;
}
if(m_wMatchGameCount>0)
{
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
if(pUserInfo->dwWinCount+pUserInfo->dwLostCount+pUserInfo->dwDrawCount+pUserInfo->dwFleeCount>=m_wMatchGameCount)
{
TCHAR szMess[128]=TEXT("\0");
_sntprintf(szMess, CountArray(szMess), TEXT("<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<>֣<EFBFBD><D6A3>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>󽫹<EFBFBD><F3BDABB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>"),m_wMatchGameCount);
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem, szMess,SMT_EJECT);
return true;
}
}
if(!CUserRight::IsGameMatchUser(pIServerUserItem->GetUserRight()) && m_dwMatchFee>0)
{
ASSERT(m_pIMainServiceFrame!=NULL);
if(m_pIMainServiceFrame==NULL) return false;
m_pIMainServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_FEE,&m_dwMatchFee, sizeof(DWORD));
return false;
}
else
{
if(pIServerUserItem->GetTableID()==INVALID_TABLE)
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,TEXT("<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ϵͳΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>"),SMT_EJECT);
InsertDistribute(pIServerUserItem);
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool CTimeRankingsMatch::OnUserQuitMatch(IServerUserItem * pIServerUserItem)
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pIServerUserItem!=NULL);
if(pIServerUserItem==NULL) return false;
if(pIServerUserItem->GetUserStatus()>=US_PLAYING) return true;
m_DistributeManage.RemoveDistributeNode(pIServerUserItem);
m_ServerUserItemMap.RemoveKey(pIServerUserItem->GetUserID());
CMD_GR_Match_Num MatchNum;
MatchNum.dwWaitting=m_DistributeManage.GetCount();
MatchNum.dwTotal=(DWORD)m_ServerUserItemMap.GetCount();
m_pIMainServiceFrame->SendData(BG_COMPUTER,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
return true;
}
//<2F>û<EFBFBD>׼<EFBFBD><D7BC>
bool CTimeRankingsMatch::OnUserReay(IServerUserItem * pIServerUserItem,WORD wTableID,WORD wChairID)
{
if(m_cbMatchStatus!=MATCH_STATUS_MATCHING)
{
m_pIMainServiceFrame->SendGameMessage(pIServerUserItem,TEXT("<EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵȴ<EFBFBD><EFBFBD>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),SMT_EJECT|SMT_CLOSE_GAME);
}
return true;
}
//<2F><><EFBFBD>ýӿ<C3BD>
bool CTimeRankingsMatch::InitMatchService(IMainServiceFrame *pIMainServiceFrame, IDataBaseEngine *pIKernelDataBaseEngine,ITimerEngine *pITimerEngine,
tagGameServiceAttrib *pGameServiceAttrib,tagGameServiceOption *pGameServiceOption,CTableFrameArray &TableFrameArray)
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pIMainServiceFrame!=NULL && pIKernelDataBaseEngine!=NULL && pGameServiceOption!=NULL && pGameServiceAttrib!=NULL && pITimerEngine!=NULL);
if(pIMainServiceFrame==NULL || pIKernelDataBaseEngine==NULL || pGameServiceOption==NULL || pGameServiceAttrib==NULL || pITimerEngine==NULL) return false;
m_pIMainServiceFrame=pIMainServiceFrame;
m_pIKernelDataBaseEngine=pIKernelDataBaseEngine;
m_pGameServiceOption=pGameServiceOption;
m_pGameServiceAttrib=pGameServiceAttrib;
m_TableFrameArray.Append(TableFrameArray);
for(INT_PTR i=0; i<m_TableFrameArray.GetCount(); i++)
m_TableFrameArray.GetAt(i)->SetMatchInterface((IUnknownEx*)QueryInterface(IID_IMatchTableFrameNotify,VER_IMatchTableFrameNotify));
m_pITimerEngine=pITimerEngine;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool CTimeRankingsMatch::OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)
{
switch (wSubCmdID)
{
case SUB_GR_MATCH_FEE: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(wDataSize==sizeof(DWORD));
if(wDataSize!=sizeof(DWORD)) return false;
DWORD dwMatchFee=*(DWORD*)pData;
if(dwMatchFee!=m_dwMatchFee)return false;
DBR_GR_MatchFee MatchFee;
MatchFee.dwUserID=pIServerUserItem->GetUserID();
MatchFee.dwMatchFee=m_dwMatchFee;
MatchFee.dwInoutIndex=pIServerUserItem->GetInoutIndex();
MatchFee.dwClientAddr=pIServerUserItem->GetClientAddr();
lstrcpyn(MatchFee.szMachineID,pIServerUserItem->GetMachineID(),CountArray(MatchFee.szMachineID));
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GR_MATCH_FEE,dwSocketID,&MatchFee,sizeof(MatchFee));
return true;
}
case SUB_GR_LEAVE_MATCH: //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(pIServerUserItem!=NULL);
if(pIServerUserItem==NULL) return false;
if(pIServerUserItem->GetUserStatus()>=US_PLAYING) return true;
m_DistributeManage.RemoveDistributeNode(pIServerUserItem);
m_ServerUserItemMap.RemoveKey(pIServerUserItem->GetUserID());
CMD_GR_Match_Num MatchNum;
MatchNum.dwWaitting=m_DistributeManage.GetCount();
MatchNum.dwTotal=(DWORD)m_ServerUserItemMap.GetCount();
m_pIMainServiceFrame->SendData(BG_COMPUTER,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
return true;
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CTimeRankingsMatch::InsertDistribute(IServerUserItem * pIServerUserItem)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(pIServerUserItem!=NULL);
if (pIServerUserItem==NULL) return false;
//״̬<D7B4>ж<EFBFBD>
ASSERT(pIServerUserItem->GetUserStatus()<US_PLAYING);
if (pIServerUserItem->GetUserStatus()>=US_PLAYING) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagDistributeInfo DistributeInfo;
ZeroMemory(&DistributeInfo,sizeof(DistributeInfo));
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
DistributeInfo.pIServerUserItem=pIServerUserItem;
DistributeInfo.wLastTableID=pIServerUserItem->GetTableID();
DistributeInfo.dwClientAddr=pIServerUserItem->GetClientAddr();
DistributeInfo.pPertainNode=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_DistributeManage.InsertDistributeNode(DistributeInfo);
m_ServerUserItemMap[pIServerUserItem->GetUserID()]=pIServerUserItem;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if (pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
WORD wTableID=pIServerUserItem->GetTableID();
//m_TableFrameArray[wTableID]->PerformStandUpAction(pIServerUserItem);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// bool bDistribute=false;
// if (m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_IMMEDIATE) bDistribute=true;
// if ((m_pGameServiceOption->wMaxDistributeUser!=0)&&(m_DistributeManage.GetCount()>=m_pGameServiceOption->wMaxDistributeUser)) bDistribute=true;
//
// //ִ<>з<EFBFBD><D0B7><EFBFBD>
// if (bDistribute==true)
// {
// PerformDistribute();
// }
CMD_GR_Match_Num MatchNum;
MatchNum.dwWaitting=m_DistributeManage.GetCount();
MatchNum.dwTotal=(DWORD)m_ServerUserItemMap.GetCount();
m_pIMainServiceFrame->SendData(BG_COMPUTER,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool CTimeRankingsMatch::PerformDistribute()
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
// if(m_DistributeManage.GetCount()<m_pGameServiceOption->wMinDistributeUser) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
while(true)
{
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
//ASSERT(m_DistributeManage.GetCount()>=m_pGameServiceOption->wMinGameUser);
//if(m_DistributeManage.GetCount()<m_pGameServiceOption->wMinGameUser) return false;
if(m_DistributeManage.GetRealCount()==0) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDistributeInfoArray DistributeInfoArray;
//<2F><>ȡ<EFBFBD>û<EFBFBD>
//WORD wRandCount = __max(m_pGameServiceOption->wMaxGameUser-m_pGameServiceOption->wMinGameUser+1,1);
//WORD wChairCount = m_pGameServiceOption->wMinGameUser+rand()%wRandCount;
WORD wDistributeCount = m_DistributeManage.PerformDistribute(DistributeInfoArray,m_pGameServiceAttrib->wChairCount);
if(wDistributeCount < m_pGameServiceAttrib->wChairCount) break;
//Ѱ<><D1B0>λ<EFBFBD><CEBB>
CTableFrame * pCurrTableFrame=NULL;
for (WORD i=0;i<m_TableFrameArray.GetCount();i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
ASSERT(m_TableFrameArray[i]!=NULL);
CTableFrame * pTableFrame=m_TableFrameArray[i];
//״̬<D7B4>ж<EFBFBD>
if (pTableFrame->GetSitUserCount()==0)
{
pCurrTableFrame=pTableFrame;
break;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pCurrTableFrame==NULL) break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bSitSuccess=true;
INT_PTR nSitFailedIndex=INVALID_CHAIR;
for(INT_PTR nIndex=0;nIndex<DistributeInfoArray.GetCount();nIndex++)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD wChairID=pCurrTableFrame->GetNullChairID();
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
if (wChairID!=INVALID_CHAIR)
{
//<2F><>ȡ<EFBFBD>û<EFBFBD>
IServerUserItem * pIServerUserItem=DistributeInfoArray[nIndex].pIServerUserItem;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if(pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
WORD wTableID=pIServerUserItem->GetTableID();
m_TableFrameArray[wTableID]->PerformStandUpAction(pIServerUserItem);
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if(pCurrTableFrame->PerformSitDownAction(wChairID,pIServerUserItem)==false)
{
bSitSuccess=false;
nSitFailedIndex=nIndex;
break;
}
}
}
//<2F><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
if(bSitSuccess)
{
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
while(DistributeInfoArray.GetCount()>0)
{
m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[0].pPertainNode);
DistributeInfoArray.RemoveAt(0);
}
}
else
{
for(INT_PTR nIndex=0;nIndex<DistributeInfoArray.GetCount();nIndex++)
{
if(nSitFailedIndex==nIndex)
m_DistributeManage.RemoveDistributeNode((tagDistributeNode *)DistributeInfoArray[nIndex].pPertainNode);
else
{
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if (DistributeInfoArray[nIndex].pIServerUserItem->GetTableID()!=INVALID_TABLE)
{
WORD wTableID=DistributeInfoArray[nIndex].pIServerUserItem->GetTableID();
m_TableFrameArray[wTableID]->PerformStandUpAction(DistributeInfoArray[nIndex].pIServerUserItem);
}
}
}
}
}
for(WORD i=0; i<m_pGameServiceOption->wTableCount; i++)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CTableFrame * pTableFrame=m_TableFrameArray[i];
if(pTableFrame==NULL)continue;
//״̬<D7B4>ж<EFBFBD>
WORD wSitUserCount=pTableFrame->GetSitUserCount();
if(pTableFrame->IsGameStarted() || wSitUserCount==m_pGameServiceAttrib->wChairCount || wSitUserCount==0) continue;
if(m_pGameServiceAttrib->wChairCount-wSitUserCount>m_pGameServiceAttrib->wChairCount/2)
{
// for(WORD j=0; j)
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool CTimeRankingsMatch::SendMatchInfo(IServerUserItem * pIServerUserItem)
{
CMD_GR_Match_Num MatchNum;
MatchNum.dwWaitting=m_DistributeManage.GetCount();
MatchNum.dwTotal=(DWORD)m_ServerUserItemMap.GetCount();
m_pIMainServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
if(m_MatchInfo.GetCount()>0)
{
CMD_GR_Match_Info *pMatchInfo=new CMD_GR_Match_Info[m_MatchInfo.GetCount()];
for(INT_PTR i=0; i<m_MatchInfo.GetCount();i++)
{
CopyMemory(&pMatchInfo[i],m_MatchInfo.GetAt(i),sizeof(CMD_GR_Match_Info));
}
m_pIMainServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_INFO,pMatchInfo,(WORD)(sizeof(CMD_GR_Match_Info)*m_MatchInfo.GetCount()));
delete [] pMatchInfo;
}
return true;
}
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
bool CTimeRankingsMatch::OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
{
switch (wRequestID)
{
case DBO_GR_MATCH_FEE_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if(pIServerUserItem==NULL) return true;
if(wDataSize!=sizeof(LONG)) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LONG lReturnValue=*(LONG*)pData;
if(lReturnValue==0)
{
pIServerUserItem->ModifyUserRight(UR_GAME_MATCH_USER,0);
InsertDistribute(pIServerUserItem);
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,TEXT("<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ϵͳΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>"),SMT_EJECT);
}
else if(lReturnValue==1)
{
TCHAR szDescribe[128]=TEXT("");
_sntprintf(szDescribe,CountArray(szDescribe),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,szDescribe,SMT_EJECT);
}
break;
}
case DBO_GR_MATCH_RANK: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ASSERT(wDataSize%sizeof(DBO_GR_MatchRank)==0);
if(wDataSize%sizeof(DBO_GR_MatchRank)!=0) return false;
DBO_GR_MatchRank *pMatchRank=(DBO_GR_MatchRank *)pData;
m_wRankCount=wDataSize/sizeof(DBO_GR_MatchRank);
m_pMatchRank=new CMD_GR_MatchRank[m_wRankCount];
for(WORD i=0; i<m_wRankCount; i++)
{
m_pMatchRank[i].cbRank=pMatchRank[i].cbRank;
m_pMatchRank[i].lMatchScore=pMatchRank[i].lMatchScore;
lstrcpyn(m_pMatchRank[i].szNickName, pMatchRank[i].szNickName, LEN_NICKNAME);
}
m_pIMainServiceFrame->SendData(BG_COMPUTER, MDM_GR_MATCH, SUB_GR_MATCH_RANK, m_pMatchRank,sizeof(CMD_GR_MatchRank)*m_wRankCount);
}
break;
}
return true;
}
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
bool CTimeRankingsMatch::ModifyMatchParameter()
{
m_pParameterDlg->DoModal();
return true;
}
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
bool CTimeRankingsMatch::OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)
{
if(dwTimerID==IDI_MATCH_TIME_PULSE)
{
if(m_cbCurMatch==0xFF || m_cbMatchStatus== MATCH_STATUS_FINISH) return true;
CTime CurTime=CTime::GetCurrentTime();
if(m_cbMatchStatus==MATCH_STATUS_NOT_STARTED)
{
if((m_TimeMatchStart==CurTime))
{
m_cbMatchStatus=MATCH_STATUS_MATCHING;
CString strMsg;
strMsg.Format(TEXT("%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[ %d ]<5D><><EFBFBD><EFBFBD>ʼ<EFBFBD>ˣ<EFBFBD>"),m_szMatchName,m_cbCurMatch+1);
m_pIMainServiceFrame->SendRoomMessage(strMsg,SMT_CHAT);
CTraceService::TraceString(strMsg,TraceLevel_Normal);
//֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
if(m_pIMainServiceFrame!=NULL) m_pIMainServiceFrame->OnEventMatchStart(m_lInitScore);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DBR_GR_MatchStart MatchStart;
MatchStart.wMatchID=m_wMatchID;
MatchStart.wMatchNo=(WORD)m_cbCurMatch;
MatchStart.wMatchCount=(WORD)m_cbMatchTime;
MatchStart.lInitScore=m_lInitScore;
m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GR_MATCH_START,0,&MatchStart,sizeof(MatchStart));
}
}
else if(m_cbMatchStatus==MATCH_STATUS_MATCHING)
{
CTimeSpan span=m_TimeMatchOver-CurTime;
if(span.GetTotalMinutes()<=5)
{
TCHAR szMess[128] = {};
_sntprintf(szMess,CountArray(szMess),TEXT("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD> [ %ld ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽӽ<D2BC>ʱ<EFBFBD>"),m_cbCurMatch+1);
m_pIMainServiceFrame->SendGameMessage(szMess,SMT_CHAT);
m_pIMainServiceFrame->SendRoomMessage(szMess,SMT_CHAT);
m_cbMatchStatus=MATCH_STATUS_WAIT_FINISH;
CTraceService::TraceString(szMess,TraceLevel_Normal);
}
}
else if(m_cbMatchStatus==MATCH_STATUS_WAIT_FINISH)
{
CTimeSpan span=m_TimeMatchOver-CurTime;
if(span.GetTotalSeconds()<=30)
{
for(INT_PTR i=0; i<m_TableFrameArray.GetCount(); i++)
{
if(m_TableFrameArray.GetAt(i)->IsGameStarted())
m_TableFrameArray.GetAt(i)->DismissGame();
}
}
for(INT_PTR i=0; i<m_TableFrameArray.GetCount(); i++)
{
if(m_TableFrameArray.GetAt(i)->IsGameStarted())
return true;
}
m_DistributeManage.RemoveAll();
POSITION pos=m_ServerUserItemMap.GetStartPosition();
DWORD dwUserID;
IServerUserItem *pIServerUserItem=NULL;
while(pos!=NULL)
{
m_ServerUserItemMap.GetNextAssoc(pos,dwUserID, pIServerUserItem);
if(pIServerUserItem!=NULL)
m_pIMainServiceFrame->SendRoomMessage(pIServerUserItem,TEXT(""),SMT_CLOSE_GAME);
}
m_ServerUserItemMap.RemoveAll();
if(abs((int)span.GetTotalSeconds())<=1)
{
TCHAR szMess[128] = {};
_sntprintf(szMess,CountArray(szMess),TEXT("<EFBFBD><EFBFBD> [ %ld ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),m_cbCurMatch+1);
CTraceService::TraceString(szMess,TraceLevel_Normal);
m_cbMatchStatus=MATCH_STATUS_FINISH;
DBR_GR_MatchOver MatchOver;
MatchOver.wMatchID=m_wMatchID;
MatchOver.wMatchNo=(WORD)m_cbCurMatch;
MatchOver.wMatchCount=(WORD)m_cbMatchTime;
m_pIKernelDataBaseEngine->PostDataBaseRequest(DBR_GR_MATCH_OVER,0,&MatchOver,sizeof(MatchOver));
if(m_cbCurMatch<m_cbMatchTime-1)
StartNextMatch();
}
}
}
else if(dwTimerID==IDI_DISTRIBUTE_TIMER)
{
PerformDistribute();
}
return true;
}
//<2F><>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CTimeRankingsMatch::StartNextMatch()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CTime CurTime = CTime::GetCurrentTime();
BYTE i=0;
for(i=0; i<m_cbMatchTime; i++)
{
FILETIME ftBegin = {};
FILETIME ftEnd = {};
CopyMemory( &ftBegin,&m_uiMatchDate[i*2],sizeof(ftBegin) );
CopyMemory( &ftEnd,&m_uiMatchDate[i*2+1],sizeof(ftEnd) );
CTime TimeBegin(ftBegin);
CTime TimeEnd(ftEnd);
if(CurTime< TimeBegin)
{
m_TimeMatchStart = TimeBegin;
m_TimeMatchOver = TimeEnd;
m_cbCurMatch=i;
m_cbMatchStatus=MATCH_STATUS_NOT_STARTED;
break;
}
if( TimeBegin <= CurTime && TimeEnd > CurTime)
{
m_TimeMatchStart = TimeBegin;
m_TimeMatchOver = TimeEnd;
m_cbCurMatch=i;
m_cbMatchStatus=MATCH_STATUS_MATCHING;
CTimeSpan span;
span=TimeEnd-CurTime;
if(span.GetTotalMinutes()<=5)
m_cbMatchStatus=MATCH_STATUS_WAIT_FINISH;
break;
}
}
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
if(i==m_cbMatchTime)
{
m_cbMatchStatus=MATCH_STATUS_FINISH;
m_cbCurMatch=m_cbMatchTime-1;
}
if( m_cbMatchStatus==MATCH_STATUS_NOT_STARTED || m_cbMatchStatus==MATCH_STATUS_MATCHING)
{
//<2F><>ʾ<EFBFBD><CABE>Ϣ
TCHAR szMess[256] = TEXT("");
TCHAR szStart[32] = TEXT("");
TCHAR szOver[32] = TEXT("");
SYSTEMTIME stBegin = {};
m_TimeMatchStart.GetAsSystemTime(stBegin);
SYSTEMTIME stEnd = {};
m_TimeMatchOver.GetAsSystemTime(stEnd);
lstrcpyn( szStart,GetTimeString(stBegin),CountArray(szStart) );
lstrcpyn( szOver,GetTimeString(stEnd),CountArray(szOver) );
_sntprintf( szMess,CountArray(szMess),TEXT("%s <20><> [ %ld ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s <20><> %s <20><><EFBFBD>С<EFBFBD>"),m_szMatchName,m_cbCurMatch+1,szStart,szOver );
m_pIMainServiceFrame->SendRoomMessage(szMess,SMT_CHAT);
CTraceService::TraceString(szMess,TraceLevel_Normal);
}
else if(m_cbMatchStatus==MATCH_STATUS_FINISH)
{
//<2F><>ʾ<EFBFBD><CABE>Ϣ
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),TraceLevel_Normal);
}
return;
}
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool CTimeRankingsMatch::OnEventGameEnd(WORD wTableID)
{
if(m_wMatchGameCount>0)
{
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if(wTableID>=m_TableFrameArray.GetCount()) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTableFrame * pTableFrame=m_TableFrameArray[wTableID];
if(pTableFrame==NULL) return false;
for(WORD i=0; i<m_pGameServiceAttrib->wChairCount; i++)
{
IServerUserItem *pIServerUserItem=pTableFrame->GetTableUserItem(i);
if(pIServerUserItem==NULL) continue;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
DWORD dwGameCount=pUserInfo->dwWinCount+pUserInfo->dwLostCount+pUserInfo->dwDrawCount+pUserInfo->dwFleeCount;
if(dwGameCount>=m_wMatchGameCount)
{
TCHAR szMess[128]=TEXT("\0");
_sntprintf(szMess, CountArray(szMess), TEXT("<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱȽϹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<>֣<EFBFBD><D6A3>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>󽫹<EFBFBD><F3BDABB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>"),m_wMatchGameCount);
m_pIMainServiceFrame->SendGameMessage(pIServerUserItem, szMess,SMT_EJECT|SMT_CLOSE_GAME);
}
else
{
TCHAR szMess[128] = TEXT("");
_sntprintf( szMess,CountArray(szMess),TEXT("<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<>֣<EFBFBD><D6A3><EFBFBD>%d<>֡<EFBFBD>"),dwGameCount,m_wMatchGameCount);
m_pIMainServiceFrame->SendGameMessage(pIServerUserItem,szMess,SMT_CHAT);
}
}
}
if(m_cbMatchStatus!=MATCH_STATUS_WAIT_FINISH) return true;
for(INT_PTR i=0; i<m_TableFrameArray.GetCount(); i++)
{
if(m_TableFrameArray.GetAt(i)->IsGameStarted())
return true;
}
return true;
}
//<2F><>ȡʱ<C8A1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
LPCTSTR CTimeRankingsMatch::GetTimeString( SYSTEMTIME &st )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static TCHAR szTime[32] = TEXT("");
_sntprintf(szTime,CountArray(szTime),TEXT("%4d<34><64>%02d<32><64>%02d<32><64> %02dʱ%02d<32><64>%02d<32><64>"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
return szTime;
}
//////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMatchParameterDlg, CDialog)
ON_BN_CLICKED(IDC_BT_ADD, OnBnClickedAdd)
ON_BN_CLICKED(IDC_BT_MODIFY, OnBnClickedModify)
ON_BN_CLICKED(IDC_BT_DELETE, OnBnClickedDelete)
ON_BN_CLICKED(IDC_BT_ADD_INFO, OnBnClickedAddInfo)
ON_BN_CLICKED(IDC_BT_MODIFY_INFO, OnBnClickedModifyInfo)
ON_BN_CLICKED(IDC_BT_DELETE_INFO, OnBnClickedDeleteInfo)
END_MESSAGE_MAP()
CMatchParameterDlg::CMatchParameterDlg(CMatchInfoArray &MatchInfo,ULARGE_INTEGER *puiMatchDate,BYTE &cbMatchTime, TCHAR *pszMatchRoom,DWORD &dwMatchFee,\
LONG &lInitScore, WORD &wMatchGameCount,WORD wMatchID):
CDialog(IDD),m_MatchInfo(MatchInfo),m_puiMatchDate(puiMatchDate),m_cbMatchTime(cbMatchTime),m_pszMatchRoom(pszMatchRoom),m_dwMatchFee(dwMatchFee),
m_lInitScore(lInitScore),m_wMatchGameCount(wMatchGameCount), m_wMatchID(wMatchID)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
m_cbMatchTime = 0;
ZeroMemory( m_puiMatchDate,sizeof(m_puiMatchDate) );
//<2F><>ȡĿ¼
TCHAR szPath[MAX_PATH]=TEXT("");
GetCurrentDirectory(sizeof(szPath),szPath);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
TCHAR szFileName[MAX_PATH]=TEXT("");
_sntprintf(szFileName,sizeof(szFileName),TEXT("%s\\MatchOption.ini"),szPath);
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CString strTemp,strAppName,strValue;
strAppName.Format(TEXT("%dTimeRankings"),m_wMatchID);
UINT uItemCount=GetPrivateProfileInt(strAppName,TEXT("InfoItemCount"),0,szFileName);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
m_cbMatchTime=(BYTE)GetPrivateProfileInt(strAppName,TEXT("MatchCount"),0,szFileName);
ASSERT(m_cbMatchTime<MAX_MATCH_COUNT);
if(m_cbMatchTime>=MAX_MATCH_COUNT)return ;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
m_dwMatchFee=(UINT)GetPrivateProfileInt(strAppName,TEXT("MatchFee"),0,szFileName);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
GetPrivateProfileString(strAppName,TEXT("MatchRoom"),TEXT(""), m_pszMatchRoom,32,szFileName);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
m_lInitScore=(LONG)GetPrivateProfileInt(strAppName,TEXT("InitScore"),0,szFileName);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_wMatchGameCount=(WORD)GetPrivateProfileInt(strAppName,TEXT("MatchGameCount"),0,szFileName);
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
for(UINT i=0; i<uItemCount; i++)
{
CMD_GR_Match_Info *pMatchInfo=new CMD_GR_Match_Info;
strAppName.Format(TEXT("%dItem%d"),m_wMatchID,i);
GetPrivateProfileString(strAppName,TEXT("InfoTitle"),TEXT(""),pMatchInfo->szTitle,CountArray(pMatchInfo->szTitle),szFileName);
GetPrivateProfileString(strAppName,TEXT("InfoDescribe"),TEXT(""),pMatchInfo->szDescribe,CountArray(pMatchInfo->szDescribe),szFileName);
strValue.Format(TEXT("%d"),pMatchInfo->wTitleLen);
pMatchInfo->wTitleLen=(WORD)GetPrivateProfileInt(strAppName,TEXT("InfoTitleLen"),0,szFileName);
pMatchInfo->wDescribeLen=(WORD)GetPrivateProfileInt(strAppName,TEXT("InfoDescribeLen"),0,szFileName);
m_MatchInfo.Add(pMatchInfo);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
TCHAR szValue[32]=TEXT("");
for(BYTE i=0; i<m_cbMatchTime; i++)
{
strAppName.Format(TEXT("%dMatchDate%d"),m_wMatchID,i);
GetPrivateProfileString(strAppName,TEXT("TimeStart"),TEXT(""),szValue,15,szFileName);
//<2F><>ȡʱ<C8A1><CAB1>
SYSTEMTIME stTime;
CString strValue(szValue);
stTime.wYear=_ttoi(strValue.Left(4));
stTime.wMonth=_ttoi(strValue.Mid(4,2));
stTime.wDay=_ttoi(strValue.Mid(6,2));
stTime.wHour=_ttoi(strValue.Mid(8,2));
stTime.wMinute=_ttoi(strValue.Mid(10,2));
stTime.wSecond=_ttoi(strValue.Mid(12,2));
SYSTEMTIME st = {};
CTime TimeBegin(stTime);
TimeBegin.GetAsSystemTime(st);
FILETIME ft = {}, ftUTC = {};
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[i*2],&ftUTC,sizeof(ftUTC) );
GetPrivateProfileString(strAppName,TEXT("TimeEnd"),TEXT(""),szValue,15,szFileName);
//<2F><>ȡʱ<C8A1><CAB1>
strValue=CString(szValue);
stTime.wYear=_ttoi(strValue.Left(4));
stTime.wMonth=_ttoi(strValue.Mid(4,2));
stTime.wDay=_ttoi(strValue.Mid(6,2));
stTime.wHour=_ttoi(strValue.Mid(8,2));
stTime.wMinute=_ttoi(strValue.Mid(10,2));
stTime.wSecond=_ttoi(strValue.Mid(12,2));
CTime TimeEnd(stTime);
TimeEnd.GetAsSystemTime(st);
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[i*2+1],&ftUTC,sizeof(ftUTC) );
}
}
CMatchParameterDlg::~CMatchParameterDlg()
{
}
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedAdd()
{
if( m_cbMatchTime == MAX_MATCH_COUNT )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δﵽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),MB_ICONINFORMATION );
return;
}
CDlgAddMatchDate Dlg;
if( IDOK == Dlg.DoModal() )
{
//<2F><><EFBFBD>ӿ<EFBFBD>ʼʱ<CABC><CAB1>
SYSTEMTIME st = {};
Dlg.m_TimeBegin.GetAsSystemTime(st);
FILETIME ft = {}, ftUTC = {};
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[m_cbMatchTime*2],&ftUTC,sizeof(ftUTC) );
//<2F><><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>ʱ<EFBFBD><CAB1>
Dlg.m_TimeEnd.GetAsSystemTime(st);
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[m_cbMatchTime*2+1],&ftUTC,sizeof(ftUTC) );
m_cbMatchTime++;
UpdateMatchList();
}
return;
}
//<2F>޸<EFBFBD>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedModify()
{
POSITION pos = m_ListMatch.GetFirstSelectedItemPosition();
if( pos == NULL )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ҫ<EFBFBD>޸ĵij<EFBFBD><EFBFBD><EFBFBD>"),MB_ICONINFORMATION );
return;
}
//<2F><>ȡѡ<C8A1><D1A1><EFBFBD><EFBFBD>
int nItem = m_ListMatch.GetNextSelectedItem(pos);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DWORD_PTR dwMatchIndex = m_ListMatch.GetItemData(nItem);
//<2F><>ȡʱ<C8A1><CAB1>
FILETIME ftBegin = {};
CopyMemory( &ftBegin,&m_puiMatchDate[dwMatchIndex*2],sizeof(ftBegin) );
FILETIME ftEnd = {};
CopyMemory( &ftEnd,&m_puiMatchDate[dwMatchIndex*2+1],sizeof(ftEnd) );
CTime TimeBegin(ftBegin);
CTime TimeEnd(ftEnd);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
CDlgAddMatchDate Dlg;
Dlg.m_TimeBegin = TimeBegin;
Dlg.m_TimeEnd = TimeEnd;
//<2F><>ʾ<EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
if( IDOK == Dlg.DoModal() )
{
if( Dlg.m_TimeBegin != TimeBegin || Dlg.m_TimeEnd != TimeEnd )
{
//<2F><><EFBFBD>ӿ<EFBFBD>ʼʱ<CABC><CAB1>
SYSTEMTIME st = {};
Dlg.m_TimeBegin.GetAsSystemTime(st);
FILETIME ft = {},ftUTC = {};
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[dwMatchIndex*2],&ftUTC,sizeof(ftUTC) );
//<2F><><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>ʱ<EFBFBD><CAB1>
Dlg.m_TimeEnd.GetAsSystemTime(st);
::SystemTimeToFileTime(&st,&ft);
::LocalFileTimeToFileTime(&ft,&ftUTC);
CopyMemory( &m_puiMatchDate[dwMatchIndex*2+1],&ftUTC,sizeof(ftUTC) );
UpdateMatchList();
}
}
return;
}
//ɾ<><C9BE>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedDelete()
{
POSITION pos = m_ListMatch.GetFirstSelectedItemPosition();
if( pos == NULL )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ҫɾ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>"),MB_ICONINFORMATION );
return;
}
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
while( pos )
{
int nItem = m_ListMatch.GetNextSelectedItem(pos);
DWORD_PTR dwMatchIndex = m_ListMatch.GetItemData(nItem);
m_puiMatchDate[dwMatchIndex*2].QuadPart = 0L;
m_puiMatchDate[dwMatchIndex*2+1].QuadPart = 0L;
}
//ɾ<><C9BE>
BYTE cbMatchTime = m_cbMatchTime;
m_cbMatchTime = 0;
for( BYTE i = 0; i < cbMatchTime; i++ )
{
if( m_puiMatchDate[i*2].QuadPart != 0L )
{
m_puiMatchDate[m_cbMatchTime*2].QuadPart = m_puiMatchDate[i*2].QuadPart;
m_puiMatchDate[m_cbMatchTime*2+1].QuadPart = m_puiMatchDate[i*2+1].QuadPart;
m_cbMatchTime++;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
UpdateMatchList();
return;
}
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedAddInfo()
{
if( m_cbMatchTime == MAX_MATCH_COUNT )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δﵽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),MB_ICONINFORMATION );
return;
}
CDlgAddMatchInfo AddMatchInfo;
if(AddMatchInfo.DoModal()==IDOK)
{
int nItem = m_ListMatchInfo.GetItemCount();
CString strDesc;
m_ListMatchInfo.InsertItem(nItem, AddMatchInfo.m_strInfoTitle);
strDesc.Format(TEXT("%d"),AddMatchInfo.m_nInfoTitleLen);
m_ListMatchInfo.SetItem(nItem,1,LVIF_TEXT,strDesc,0,0,0,0,0);
m_ListMatchInfo.SetItem(nItem,2,LVIF_TEXT,AddMatchInfo.m_strInfoDesc,0,0,0,0,0);
strDesc.Format(TEXT("%d"),AddMatchInfo.m_nInfoDescLen);
m_ListMatchInfo.SetItem(nItem,3,LVIF_TEXT,strDesc,0,0,0,0,0);
CMD_GR_Match_Info *pMatchInfo=new CMD_GR_Match_Info;
ZeroMemory(pMatchInfo,sizeof(CMD_GR_Match_Info));
lstrcpyn(pMatchInfo->szTitle,AddMatchInfo.m_strInfoTitle,CountArray(pMatchInfo->szTitle));
lstrcpyn(pMatchInfo->szDescribe,AddMatchInfo.m_strInfoDesc,CountArray(pMatchInfo->szDescribe));
pMatchInfo->wDescribeLen=(WORD)AddMatchInfo.m_nInfoDescLen;
pMatchInfo->wTitleLen=(WORD)AddMatchInfo.m_nInfoTitleLen;
m_MatchInfo.Add(pMatchInfo);
}
return;
}
//<2F>޸<EFBFBD>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedModifyInfo()
{
POSITION pos = m_ListMatchInfo.GetFirstSelectedItemPosition();
if( pos == NULL )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ҫ<EFBFBD>޸ĵ<EFBFBD><EFBFBD><EFBFBD>Ϣ"),MB_ICONINFORMATION );
return;
}
//<2F><>ȡѡ<C8A1><D1A1><EFBFBD><EFBFBD>
int nItem = m_ListMatchInfo.GetNextSelectedItem(pos);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DWORD_PTR dwMatchIndex = m_ListMatchInfo.GetItemData(nItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
CDlgAddMatchInfo Dlg;
CMD_GR_Match_Info *pMatchInfo=m_MatchInfo.GetAt(nItem);
Dlg.m_strInfoTitle=pMatchInfo->szTitle;
Dlg.m_strInfoDesc=pMatchInfo->szDescribe;
Dlg.m_nInfoDescLen=(int)pMatchInfo->wDescribeLen;
Dlg.m_nInfoTitleLen=(int)pMatchInfo->wTitleLen;
//<2F><>ʾ<EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
if( IDOK == Dlg.DoModal() )
{
lstrcpyn(pMatchInfo->szDescribe,(LPCTSTR)Dlg.m_strInfoDesc.GetBuffer(), CountArray(pMatchInfo->szDescribe));
lstrcpyn(pMatchInfo->szTitle, (LPCTSTR)Dlg.m_strInfoTitle.GetBuffer(), CountArray(pMatchInfo->szTitle));
pMatchInfo->wDescribeLen=(WORD)Dlg.m_nInfoDescLen;
pMatchInfo->wTitleLen=(WORD)Dlg.m_nInfoTitleLen;
UpdateMatchInfoList();
}
return;
}
//ɾ<><C9BE>ʱ<EFBFBD><CAB1>
VOID CMatchParameterDlg::OnBnClickedDeleteInfo()
{
POSITION pos = m_ListMatchInfo.GetFirstSelectedItemPosition();
if( pos == NULL )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Ҫɾ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>"),MB_ICONINFORMATION );
return;
}
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
while( pos )
{
int nItem = m_ListMatchInfo.GetNextSelectedItem(pos);
DWORD_PTR dwMatchIndex = m_ListMatchInfo.GetItemData(nItem);
m_MatchInfo.RemoveAt(nItem);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
UpdateMatchInfoList();
return;
}
//<2F><><EFBFBD>¿ؼ<C2BF>
VOID CMatchParameterDlg::UpdateMatchList()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_ListMatch.DeleteAllItems();
for( BYTE i = 0; i < m_cbMatchTime; i++ )
{
FILETIME ftBegin = {}, ftLocalBegin = {};
FILETIME ftEnd = {}, ftLocalEnd = {};
CopyMemory( &ftBegin,&m_puiMatchDate[i*2],sizeof(ftBegin) );
CopyMemory( &ftEnd,&m_puiMatchDate[i*2+1],sizeof(ftEnd) );
FileTimeToLocalFileTime(&ftBegin,&ftLocalBegin);
FileTimeToLocalFileTime(&ftEnd,&ftLocalEnd);
SYSTEMTIME stBegin = {}, stEnd = {};
FileTimeToSystemTime(&ftLocalBegin,&stBegin);
FileTimeToSystemTime(&ftLocalEnd,&stEnd);
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD>
int nItem = m_ListMatch.GetItemCount();
CString str;
str.Format( TEXT("<EFBFBD><EFBFBD>%ld<6C><64>"),nItem+1 );
m_ListMatch.InsertItem( nItem,str );
//<2F><>ʼʱ<CABC><CAB1>
m_ListMatch.SetItem( nItem,1,LVIF_TEXT,GetTimeString(stBegin),0,0,0,0,0 );
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
m_ListMatch.SetItem( nItem,2,LVIF_TEXT,GetTimeString(stEnd),0,0,0,0,0 );
m_ListMatch.SetItemData(nItem,i);
}
}
//<2F><><EFBFBD>¿ؼ<C2BF>
VOID CMatchParameterDlg::UpdateMatchInfoList()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
m_ListMatchInfo.DeleteAllItems();
for(INT_PTR i = 0; i<m_MatchInfo.GetCount(); i++ )
{
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD>
CMD_GR_Match_Info *pMatchInfo=m_MatchInfo.GetAt(i);
int nItem = m_ListMatchInfo.GetItemCount();
CString strDesc;
m_ListMatchInfo.InsertItem(nItem, pMatchInfo->szTitle);
strDesc.Format(TEXT("%d"),pMatchInfo->wTitleLen);
m_ListMatchInfo.SetItem(nItem,1,LVIF_TEXT,strDesc,0,0,0,0,0);
m_ListMatchInfo.SetItem(nItem,2,LVIF_TEXT,pMatchInfo->szDescribe,0,0,0,0,0);
strDesc.Format(TEXT("%d"),pMatchInfo->wDescribeLen);
m_ListMatchInfo.SetItem(nItem,3,LVIF_TEXT,strDesc,0,0,0,0,0);
}
}
//<2F><>ȡʱ<C8A1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
LPCTSTR CMatchParameterDlg::GetTimeString( SYSTEMTIME &st )
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static TCHAR szTime[32] = TEXT("");
_sntprintf(szTime,CountArray(szTime),TEXT("%4d<34><64>%02d<32><64>%02d<32><64> %02dʱ%02d<32><64>%02d<32><64>"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
return szTime;
}
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
void CMatchParameterDlg::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
DDX_Control( pDX,IDC_LIST_MATCH,m_ListMatch );
DDX_Control( pDX,IDC_LIST_MATCH_INFO,m_ListMatchInfo);
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CMatchParameterDlg::OnInitDialog()
{
__super::OnInitDialog();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
m_ListMatch.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_ListMatch.InsertColumn( 0,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,62 );
m_ListMatch.InsertColumn( 1,TEXT("<EFBFBD><EFBFBD>ʼʱ<EFBFBD><EFBFBD>"),LVCFMT_LEFT,200 );
m_ListMatch.InsertColumn( 2,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>"),LVCFMT_LEFT,200 );
m_ListMatchInfo.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_ListMatchInfo.InsertColumn( 0,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,60 );
m_ListMatchInfo.InsertColumn( 1,TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,60 );
m_ListMatchInfo.InsertColumn( 2,TEXT("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,200 );
m_ListMatchInfo.InsertColumn( 3,TEXT("<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,60 );
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateMatchInfoList();
UpdateMatchList();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString strTemp;
GetDlgItem(IDC_EDIT_MATCH_NAME)->SetWindowText(m_pszMatchRoom);
strTemp.Format(TEXT("%d"),m_dwMatchFee);
GetDlgItem(IDC_EDIT_FEE)->SetWindowText(strTemp);
strTemp.Format(TEXT("%d"),m_lInitScore);
GetDlgItem(IDC_EDIT_INIT_SCORE)->SetWindowText(strTemp);
strTemp.Format(TEXT("%d"),m_wMatchGameCount);
GetDlgItem(IDC_EDIT_MATCH_GAME_COUNT)->SetWindowText(strTemp);
return FALSE;
}
void CMatchParameterDlg::OnOK()
{
//<2F><>ȡĿ¼
TCHAR szPath[MAX_PATH]=TEXT("");
GetCurrentDirectory(sizeof(szPath),szPath);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
TCHAR szFileName[MAX_PATH]=TEXT("");
_sntprintf(szFileName,sizeof(szFileName),TEXT("%s\\MatchOption.ini"),szPath);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString strTemp,strAppName,strValue;
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
strAppName.Format(TEXT("%dTimeRankings"),m_wMatchID);
strTemp.Format(TEXT("%d"),m_MatchInfo.GetCount());
WritePrivateProfileString(strAppName,TEXT("InfoItemCount"),strTemp,szFileName);
//д<><EFBFBD><EBB3A1>
strTemp.Format(TEXT("%d"),m_cbMatchTime);
WritePrivateProfileString(strAppName,TEXT("MatchCount"),strTemp,szFileName);
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GetDlgItem(IDC_EDIT_FEE)->GetWindowText(strTemp);
CT2CA strNum(strTemp);
m_dwMatchFee=atoi(strNum);
WritePrivateProfileString(strAppName,TEXT("MatchFee"),strTemp,szFileName);
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GetDlgItem(IDC_EDIT_MATCH_NAME)->GetWindowText(strTemp);
lstrcpyn(m_pszMatchRoom, strTemp, 32);
WritePrivateProfileString(strAppName,TEXT("MatchRoom"), m_pszMatchRoom,szFileName);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
GetDlgItem(IDC_EDIT_INIT_SCORE)->GetWindowText(strTemp);
CT2CA strScore(strTemp);
m_lInitScore=atoi(strScore);
WritePrivateProfileString(strAppName,TEXT("InitScore"), strTemp,szFileName);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GetDlgItem(IDC_EDIT_MATCH_GAME_COUNT)->GetWindowText(strTemp);
CT2CA strGameCount(strTemp);
m_wMatchGameCount=atoi(strGameCount);
WritePrivateProfileString(strAppName,TEXT("MatchGameCount"), strTemp,szFileName);
//д<><D0B4><EFBFBD><EFBFBD>Ϣ
for(INT_PTR i=0; i<m_MatchInfo.GetCount(); i++)
{
CMD_GR_Match_Info *pMatchInfo=m_MatchInfo.GetAt(i);
strAppName.Format(TEXT("%dItem%d"),m_wMatchID,i);
WritePrivateProfileString(strAppName,TEXT("InfoTitle"),pMatchInfo->szTitle,szFileName);
WritePrivateProfileString(strAppName,TEXT("InfoDescribe"),pMatchInfo->szDescribe,szFileName);
strValue.Format(TEXT("%d"),pMatchInfo->wTitleLen);
WritePrivateProfileString(strAppName,TEXT("InfoTitleLen"),strValue,szFileName);
strValue.Format(TEXT("%d"),pMatchInfo->wDescribeLen);
WritePrivateProfileString(strAppName,TEXT("InfoDescribeLen"),strValue,szFileName);
}
//д<><D0B4>ʱ<EFBFBD><CAB1>
for(BYTE i=0; i<m_cbMatchTime; i++)
{
//<2F><>ȡʱ<C8A1><CAB1>
FILETIME ftBegin = {};
CopyMemory( &ftBegin,&m_puiMatchDate[i*2],sizeof(ftBegin) );
FILETIME ftEnd = {};
CopyMemory( &ftEnd,&m_puiMatchDate[i*2+1],sizeof(ftEnd) );
CTime TimeBegin(ftBegin);
CTime TimeEnd(ftEnd);
strAppName.Format(TEXT("%dMatchDate%d"),m_wMatchID,i);
WritePrivateProfileString(strAppName,TEXT("TimeStart"),TimeBegin.Format("%Y%m%d%H%M%S"),szFileName);
WritePrivateProfileString(strAppName,TEXT("TimeEnd"),TimeEnd.Format("%Y%m%d%H%M%S"),szFileName);
}
CDialog::OnOK();
}
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDlgAddMatchDate::CDlgAddMatchDate(): CDialog(IDD_DATETIME_MATCH)
{
m_TimeBegin = CTime::GetCurrentTime();
m_TimeEnd = CTime::GetCurrentTime();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDlgAddMatchDate::~CDlgAddMatchDate()
{
}
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
void CDlgAddMatchDate::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
DDX_Control( pDX,IDC_DATE_BEGIN,m_CtrlDateBegin );
DDX_Control( pDX,IDC_TIME_BEGIN,m_CtrlTimeBegin );
DDX_Control( pDX,IDC_DATE_END,m_CtrlDateEnd );
DDX_Control( pDX,IDC_TIME_END,m_CtrlTimeEnd );
}
//<2F><>ʼ<EFBFBD><CABC>
BOOL CDlgAddMatchDate::OnInitDialog()
{
__super::OnInitDialog();
//<2F><><EFBFBD>¿ؼ<C2BF>
m_CtrlDateBegin.SetTime( &m_TimeBegin );
m_CtrlTimeBegin.SetTime( &m_TimeBegin );
m_CtrlDateEnd.SetTime( &m_TimeEnd );
m_CtrlTimeEnd.SetTime( &m_TimeEnd );
return TRUE;
}
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CDlgAddMatchDate::OnOK()
{
UpdateData();
//<2F><>ȡ<EFBFBD><C8A1>ʼʱ<CABC><CAB1>
CTime DateBegin;
m_CtrlDateBegin.GetTime( DateBegin );
CTime TimeBegin;
m_CtrlTimeBegin.GetTime( TimeBegin );
CTime Time1( DateBegin.GetYear(),DateBegin.GetMonth(),DateBegin.GetDay(),TimeBegin.GetHour(),TimeBegin.GetMinute(),TimeBegin.GetSecond() );
m_TimeBegin = Time1;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CTime DateEnd;
m_CtrlDateEnd.GetTime( DateEnd );
CTime TimeEnd;
m_CtrlTimeEnd.GetTime( TimeEnd );
CTime Time2( DateEnd.GetYear(),DateEnd.GetMonth(),DateEnd.GetDay(),TimeEnd.GetHour(),TimeEnd.GetMinute(),TimeEnd.GetSecond() );
m_TimeEnd = Time2;
//Ч<><D0A7>
if( m_TimeBegin >= m_TimeEnd )
{
AfxMessageBox( TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>ʼʱ<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),MB_ICONERROR );
return;
}
__super::OnOK();
}
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDlgAddMatchInfo::CDlgAddMatchInfo(): CDialog(IDD)
, m_strInfoTitle(_T(""))
, m_strInfoDesc(_T(""))
, m_nInfoTitleLen(0)
, m_nInfoDescLen(0)
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDlgAddMatchInfo::~CDlgAddMatchInfo()
{
}
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
void CDlgAddMatchInfo::DoDataExchange(CDataExchange* pDX)
{
__super::DoDataExchange(pDX);
}
//<2F><>ʼ<EFBFBD><CABC>
BOOL CDlgAddMatchInfo::OnInitDialog()
{
__super::OnInitDialog();
GetDlgItem(IDC_EDIT_DESC)->SetWindowText(m_strInfoDesc);
GetDlgItem(IDC_EDIT_TITLE)->SetWindowText(m_strInfoTitle);
CString strTemp;
strTemp.Format(TEXT("%d"),m_nInfoDescLen);
GetDlgItem(IDC_EDIT_DESC_LEN)->SetWindowText(strTemp);
strTemp.Format(TEXT("%d"),m_nInfoTitleLen);
GetDlgItem(IDC_EDIT_TITLE_LEN)->SetWindowText(strTemp);
return TRUE;
}
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID CDlgAddMatchInfo::OnOK()
{
GetDlgItem(IDC_EDIT_DESC)->GetWindowText(m_strInfoDesc);
GetDlgItem(IDC_EDIT_TITLE)->GetWindowText(m_strInfoTitle);
CString strTemp;
GetDlgItem(IDC_EDIT_DESC_LEN)->GetWindowText(strTemp);
CT2CA strNum(strTemp);
m_nInfoDescLen=atoi(strNum);
GetDlgItem(IDC_EDIT_TITLE_LEN)->GetWindowText(strTemp);
CT2CA strNum1(strTemp);
m_nInfoTitleLen=atoi(strNum1);
__super::OnOK();
}
//////////////////////////////////////////////////////////////////////////////////