1375 lines
40 KiB
C++
1375 lines
40 KiB
C++
|
|
#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();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|