1395 lines
41 KiB
C++
1395 lines
41 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "ImmediateMatch.h"
|
|||
|
|
#include "..\<5C><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\DataBasePacket.h"
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new DEBUG_NEW
|
|||
|
|
#undef THIS_FILE
|
|||
|
|
static char THIS_FILE[] = __FILE__;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#define INVALID_VALUE 0xFFFF //<2F><>Чֵ
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
|
|||
|
|
#define IDI_DISTRIBUTE_USER (IDI_MATCH_MODULE_START+50) //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CImmediateMatch::CImmediateMatch()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pMatchOption=NULL;
|
|||
|
|
m_pGameServiceOption=NULL;
|
|||
|
|
m_pGameServiceAttrib=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
m_ppITableFrame=NULL;
|
|||
|
|
m_pCurMatchGroup=NULL;
|
|||
|
|
|
|||
|
|
//<2F>ں˽ӿ<CBBD>
|
|||
|
|
m_pITimerEngine=NULL;
|
|||
|
|
m_pIDataBaseEngine=NULL;
|
|||
|
|
m_pITCPNetworkEngineEvent=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
m_pIGameServiceFrame=NULL;
|
|||
|
|
m_pIServerUserManager=NULL;
|
|||
|
|
m_pAndroidUserManager=NULL;
|
|||
|
|
m_pIServerUserItemSink=NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CImmediateMatch::~CImmediateMatch(void)
|
|||
|
|
{
|
|||
|
|
SafeDeleteArray(m_ppITableFrame);
|
|||
|
|
|
|||
|
|
m_LoopTimer.RemoveAll();
|
|||
|
|
SafeDelete(m_pCurMatchGroup);
|
|||
|
|
m_MatchGroup.Append(m_OverMatchGroup);
|
|||
|
|
for (int i=0; i<m_MatchGroup.GetCount(); i++)
|
|||
|
|
{
|
|||
|
|
SafeDelete(m_MatchGroup[i]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_MatchGroup.RemoveAll();
|
|||
|
|
m_OverMatchGroup.RemoveAll();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
VOID* CImmediateMatch::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
|
|||
|
|
{
|
|||
|
|
QUERYINTERFACE(IGameMatchItem,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE(IServerUserItemSink,Guid,dwQueryVer);
|
|||
|
|
QUERYINTERFACE_IUNKNOWNEX(IGameMatchItem,Guid,dwQueryVer);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>֪ͨ
|
|||
|
|
void CImmediateMatch::OnStartService()
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (m_pCurMatchGroup==NULL)
|
|||
|
|
{
|
|||
|
|
m_pCurMatchGroup=new CImmediateGroup((DWORD)time(NULL),m_pMatchOption,this);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ͬʱ9<CAB1><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (int i=0;i<79;i++)
|
|||
|
|
{
|
|||
|
|
m_LoopTimer.Add(i);
|
|||
|
|
}
|
|||
|
|
m_pITimerEngine->SetTimer(IDI_CHECK_OVER_MATCH,60000L,TIMES_INFINITY,0);
|
|||
|
|
m_pITimerEngine->SetTimer(IDI_DELETE_OVER_MATCH, 6000,TIMES_INFINITY,0);
|
|||
|
|
//#ifdef _DEBUG
|
|||
|
|
// m_pITimerEngine->SetTimer(IDI_ANDROID_SIGNUP,1000,TIMES_INFINITY,0);
|
|||
|
|
//#else
|
|||
|
|
// m_pITimerEngine->SetTimer(IDI_ANDROID_SIGNUP,3000,TIMES_INFINITY,0);
|
|||
|
|
//#endif
|
|||
|
|
|
|||
|
|
InsertNullTable();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::BindTableFrame(ITableFrame * pTableFrame,WORD wTableID)
|
|||
|
|
{
|
|||
|
|
if(pTableFrame==NULL || wTableID>m_pGameServiceOption->wTableCount)
|
|||
|
|
{
|
|||
|
|
ASSERT(false);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CTableFrameHook * pTableFrameHook=new CTableFrameHook();
|
|||
|
|
pTableFrameHook->InitTableFrameHook(QUERY_OBJECT_PTR_INTERFACE(pTableFrame,IUnknownEx));
|
|||
|
|
pTableFrameHook->SetMatchEventSink(QUERY_OBJECT_PTR_INTERFACE(this,IUnknownEx));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
pTableFrame->SetTableFrameHook(QUERY_OBJECT_PTR_INTERFACE(pTableFrameHook,IUnknownEx));
|
|||
|
|
m_ppITableFrame[wTableID]=pTableFrame;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
bool CImmediateMatch::InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pMatchOption=MatchManagerParameter.pGameMatchOption;
|
|||
|
|
m_pGameServiceOption=MatchManagerParameter.pGameServiceOption;
|
|||
|
|
m_pGameServiceAttrib=MatchManagerParameter.pGameServiceAttrib;
|
|||
|
|
|
|||
|
|
//<2F>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pITimerEngine=MatchManagerParameter.pITimerEngine;
|
|||
|
|
m_pIDataBaseEngine=MatchManagerParameter.pICorrespondManager;
|
|||
|
|
m_pITCPNetworkEngineEvent=MatchManagerParameter.pTCPNetworkEngine;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIGameServiceFrame=MatchManagerParameter.pIMainServiceFrame;
|
|||
|
|
m_pIServerUserManager=MatchManagerParameter.pIServerUserManager;
|
|||
|
|
m_pAndroidUserManager=MatchManagerParameter.pIAndroidUserManager;
|
|||
|
|
m_pIServerUserItemSink=MatchManagerParameter.pIServerUserItemSink;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CImmediateGroup::m_wChairCount=m_pGameServiceAttrib->wChairCount;
|
|||
|
|
if (m_ppITableFrame==NULL)
|
|||
|
|
{
|
|||
|
|
m_ppITableFrame=new ITableFrame*[m_pGameServiceOption->wTableCount];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)
|
|||
|
|
{
|
|||
|
|
if(dwTimerID>=IDI_GROUP_TIMER_START)
|
|||
|
|
{
|
|||
|
|
for (INT_PTR i=m_MatchGroup.GetCount()-1;i>=0;i--)
|
|||
|
|
{
|
|||
|
|
//<2F>鿴<EFBFBD><E9BFB4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
if (m_MatchGroup[i]->m_LoopTimer==((dwTimerID-IDI_GROUP_TIMER_START)/10))
|
|||
|
|
{
|
|||
|
|
m_MatchGroup[i]->OnTimeMessage(dwTimerID-(m_MatchGroup[i]->m_LoopTimer*10),dwBindParameter);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch(dwTimerID)
|
|||
|
|
{
|
|||
|
|
case IDI_CHECK_OVER_MATCH:
|
|||
|
|
{
|
|||
|
|
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> <20><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (INT_PTR i=m_MatchGroup.GetCount()-1;i>=0;i--)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
|
m_MatchGroup[i]->CheckMatchUser();
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
case IDI_DELETE_OVER_MATCH:
|
|||
|
|
{
|
|||
|
|
for (int i=0;m_OverMatchGroup.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
CImmediateGroup * pOverMatch=m_OverMatchGroup[i];
|
|||
|
|
m_OverMatchGroup.RemoveAt(i--);
|
|||
|
|
SafeDelete(pOverMatch);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
|
|||
|
|
{
|
|||
|
|
switch (wRequestID)
|
|||
|
|
{
|
|||
|
|
case DBO_GR_MATCH_SIGNUP_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
if(pIServerUserItem==NULL) return true;
|
|||
|
|
if(wDataSize>sizeof(DBO_GR_MatchSingupResult)) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
DBO_GR_MatchSingupResult * pMatchSignupResult = (DBO_GR_MatchSingupResult*)pData;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
if(pMatchSignupResult->bResultCode==false)
|
|||
|
|
{
|
|||
|
|
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,pMatchSignupResult->szDescribeString,SMT_EJECT);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(m_pCurMatchGroup->OnUserSignUpMatch(pIServerUserItem)==false)
|
|||
|
|
{
|
|||
|
|
SendRoomMessage(pIServerUserItem, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>"),SMT_CHAT);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
m_OnMatchUserItem.Add(pIServerUserItem);
|
|||
|
|
SendMatchInfo(NULL);
|
|||
|
|
if(m_pIGameServiceFrame!=NULL)
|
|||
|
|
{
|
|||
|
|
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_CHAT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ҹ<EFBFBD><D2B8><EFBFBD>
|
|||
|
|
if(pIServerUserItem->IsAndroidUser()==false)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
CMD_GR_MatchGoldUpdate MatchGoldUpdate;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
MatchGoldUpdate.lCurrGold=pMatchSignupResult->lCurrGold;
|
|||
|
|
MatchGoldUpdate.lCurrIngot=pMatchSignupResult->lCurrIngot;
|
|||
|
|
MatchGoldUpdate.dwCurrExprience=pIServerUserItem->GetUserInfo()->dwExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_GOLDUPDATE,&MatchGoldUpdate,sizeof(MatchGoldUpdate));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case DBO_GR_MATCH_UNSIGNUP_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
if(pIServerUserItem==NULL) return true;
|
|||
|
|
if(wDataSize>sizeof(DBO_GR_MatchSingupResult)) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
DBO_GR_MatchSingupResult * pMatchSignupResult = (DBO_GR_MatchSingupResult*)pData;
|
|||
|
|
|
|||
|
|
//<2F>˷<EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
if(pMatchSignupResult->bResultCode==false)
|
|||
|
|
{
|
|||
|
|
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,pMatchSignupResult->szDescribeString,SMT_EJECT);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
pIServerUserItem->SetUserMatchStatus(MUS_NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LPCTSTR pszMatchFeeType[]={TEXT("<EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>"),TEXT("Ԫ<EFBFBD><EFBFBD>")};
|
|||
|
|
if(m_pMatchOption->cbMatchFeeType<CountArray(pszMatchFeeType))
|
|||
|
|
{
|
|||
|
|
//<2F>˷<EFBFBD>֪ͨ
|
|||
|
|
TCHAR szDescribe[128]=TEXT("");
|
|||
|
|
_sntprintf_s(szDescribe,CountArray(szDescribe),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%I64d%s<><73>"),m_pMatchOption->lMatchFee,pszMatchFeeType[m_pMatchOption->cbMatchFeeType]);
|
|||
|
|
m_pIGameServiceFrame->SendRoomMessage(pIServerUserItem,szDescribe,SMT_EJECT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ҹ<EFBFBD><D2B8><EFBFBD>
|
|||
|
|
if(pIServerUserItem->IsAndroidUser()==false)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
CMD_GR_MatchGoldUpdate MatchGoldUpdate;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
MatchGoldUpdate.lCurrGold=pMatchSignupResult->lCurrGold;
|
|||
|
|
MatchGoldUpdate.lCurrIngot=pMatchSignupResult->lCurrIngot;
|
|||
|
|
MatchGoldUpdate.dwCurrExprience=pIServerUserItem->GetUserInfo()->dwExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_GOLDUPDATE,&MatchGoldUpdate,sizeof(MatchGoldUpdate));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case DBO_GR_MATCH_RANK_LIST: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
|
|||
|
|
ASSERT(wDataSize<=sizeof(DBO_GR_MatchRankList));
|
|||
|
|
if(wDataSize>sizeof(DBO_GR_MatchRankList)) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
DBO_GR_MatchRankList * pMatchRankList = (DBO_GR_MatchRankList*)pData;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
IServerUserItem * pIRewardUserItem=NULL;
|
|||
|
|
tagMatchRankInfo * pMatchRankInfo=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>
|
|||
|
|
for(WORD wIndex=0;wIndex<pMatchRankList->wUserCount;wIndex++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pMatchRankInfo=&pMatchRankList->MatchRankInfo[wIndex];
|
|||
|
|
pIRewardUserItem=m_pIServerUserManager->SearchUserItem(pMatchRankInfo->dwUserID);
|
|||
|
|
if(pIRewardUserItem==NULL || pIRewardUserItem->IsAndroidUser()==true) continue;
|
|||
|
|
|
|||
|
|
//д<>뽱<EFBFBD><EBBDB1>
|
|||
|
|
WriteUserAward(pIRewardUserItem,pMatchRankInfo);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CImmediateGroup * pImmediateGroup=NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
|
|||
|
|
for (int i=0;i<m_MatchGroup.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
if(m_MatchGroup[i]->m_dwMatchNO==pMatchRankList->dwMatchNO)
|
|||
|
|
{
|
|||
|
|
pImmediateGroup=m_MatchGroup[i];
|
|||
|
|
|
|||
|
|
if(pImmediateGroup!=NULL)
|
|||
|
|
{
|
|||
|
|
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pImmediateGroup->RearrangeUserSeat();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ϳɱ<CDBF><C9B1><EFBFBD>״̬
|
|||
|
|
BYTE cbMatchStatus=MatchStatus_Null;
|
|||
|
|
SendGroupData(MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus),pImmediateGroup);
|
|||
|
|
|
|||
|
|
//<2F><>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
|||
|
|
m_LoopTimer.Add(pImmediateGroup->m_LoopTimer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
POSITION pos=pImmediateGroup->m_OnMatchUserMap.GetStartPosition();
|
|||
|
|
IServerUserItem *pITempUserItem=NULL;
|
|||
|
|
DWORD dwUserID=0;
|
|||
|
|
WORD wQuitUserCount=0;
|
|||
|
|
WORD wMatchUserCount=(WORD)pImmediateGroup->m_OnMatchUserMap.GetCount();
|
|||
|
|
while(pos!=NULL)
|
|||
|
|
{
|
|||
|
|
pImmediateGroup->m_OnMatchUserMap.GetNextAssoc(pos,dwUserID, pITempUserItem);
|
|||
|
|
if (pITempUserItem!=NULL)
|
|||
|
|
{
|
|||
|
|
pITempUserItem->SetUserMatchStatus(MUS_NULL);
|
|||
|
|
if (true==OnEventUserQuitMatch(pITempUserItem,0))
|
|||
|
|
wQuitUserCount++;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool bAndroidUser=pITempUserItem->IsAndroidUser();
|
|||
|
|
//bool bTrusteeUser=pITempUserItem->IsTrusteeUser();
|
|||
|
|
bool bClientReady=pITempUserItem->IsClientReady();
|
|||
|
|
//if (bAndroidUser==false && bTrusteeUser==true && bClientReady==false)
|
|||
|
|
if (bAndroidUser==false && bClientReady==false)
|
|||
|
|
{
|
|||
|
|
//<2F>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD>
|
|||
|
|
WORD wTableID=pITempUserItem->GetTableID();
|
|||
|
|
if (wTableID!=INVALID_TABLE)
|
|||
|
|
{
|
|||
|
|
//״̬<D7B4>ж<EFBFBD>
|
|||
|
|
ASSERT (pITempUserItem->GetUserStatus()!=US_PLAYING);
|
|||
|
|
SendGameMessage(pITempUserItem,TEXT(""),SMT_CLOSE_GAME);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for(int m=0;m<pImmediateGroup->m_MatchTableArray.GetCount();m++)
|
|||
|
|
{
|
|||
|
|
if(pITempUserItem->GetTableID()==pImmediateGroup->m_MatchTableArray[m]->wTableID)
|
|||
|
|
{
|
|||
|
|
pImmediateGroup->m_MatchTableArray[m]->pTableFrame->PerformStandUpAction(pITempUserItem);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD>
|
|||
|
|
if (pITempUserItem->GetBindIndex()==INVALID_WORD)
|
|||
|
|
{
|
|||
|
|
pITempUserItem->SetUserStatus(US_NULL,INVALID_TABLE,INVALID_CHAIR);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(wQuitUserCount==wMatchUserCount);
|
|||
|
|
if (wQuitUserCount!=wMatchUserCount)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣"),TraceLevel_Exception);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (int j=0;pImmediateGroup->m_MatchTableArray.GetCount();)
|
|||
|
|
{
|
|||
|
|
tagTableFrameInfo* pTempTable=pImmediateGroup->m_MatchTableArray[j];
|
|||
|
|
pImmediateGroup->m_MatchTableArray.RemoveAt(j);
|
|||
|
|
SafeDelete(pTempTable);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_MatchGroup.RemoveAt(i);
|
|||
|
|
m_OverMatchGroup.Add(pImmediateGroup);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case DBO_GR_MATCH_REWARD_RESULT: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
if(pIServerUserItem==NULL) return true;
|
|||
|
|
if(wDataSize>sizeof(DBR_GR_MatchRewardResult)) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_MatchRewardResult * pMatchRewardResult = (DBR_GR_MatchRewardResult*)pData;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
if(pMatchRewardResult->bResultCode==true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
CMD_GR_MatchGoldUpdate MatchGoldUpdate;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
MatchGoldUpdate.lCurrGold=pMatchRewardResult->lCurrGold;
|
|||
|
|
MatchGoldUpdate.lCurrIngot=pMatchRewardResult->lCurrIngot;
|
|||
|
|
MatchGoldUpdate.dwCurrExprience=pMatchRewardResult->dwCurrExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_GOLDUPDATE,&MatchGoldUpdate,sizeof(MatchGoldUpdate));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
bool CImmediateMatch::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(SCORE));
|
|||
|
|
if(wDataSize!=sizeof(SCORE)) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
SCORE lMatchFee=*(SCORE*)pData;
|
|||
|
|
if(lMatchFee!=m_pMatchOption->lMatchFee)return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_MatchSignup MatchSignup;
|
|||
|
|
ZeroMemory(&MatchSignup,sizeof(MatchSignup));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
MatchSignup.dwUserID=pIServerUserItem->GetUserID();
|
|||
|
|
MatchSignup.lMatchFee=m_pMatchOption->lMatchFee;
|
|||
|
|
MatchSignup.dwInoutIndex=pIServerUserItem->GetInoutIndex();
|
|||
|
|
MatchSignup.dwClientAddr=pIServerUserItem->GetClientAddr();
|
|||
|
|
MatchSignup.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
MatchSignup.dwMatchNO=m_pCurMatchGroup->m_dwMatchNO;
|
|||
|
|
MatchSignup.cbMatchType = m_pMatchOption->cbMatchType;
|
|||
|
|
lstrcpyn(MatchSignup.szMachineID,pIServerUserItem->GetMachineID(),CountArray(MatchSignup.szMachineID));
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(MatchSignup.dwUserID,DBR_GR_MATCH_SIGNUP,dwSocketID,&MatchSignup,sizeof(MatchSignup));
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
OnEventUserQuitMatch(pIServerUserItem,0,0,dwSocketID);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD>¼
|
|||
|
|
bool CImmediateMatch::OnEventUserLogon(IServerUserItem * pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
return SendMatchInfo(pIServerUserItem);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB>dz<EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventUserLogout(IServerUserItem * pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventEnterMatch(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile)
|
|||
|
|
{
|
|||
|
|
//<2F>ֻ<EFBFBD><D6BB>û<EFBFBD>
|
|||
|
|
if(bIsMobile == true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
CMD_GR_LogonMobile * pLogonMobile=(CMD_GR_LogonMobile *)pData;
|
|||
|
|
pLogonMobile->szPassword[CountArray(pLogonMobile->szPassword)-1]=0;
|
|||
|
|
pLogonMobile->szMachineID[CountArray(pLogonMobile->szMachineID)-1]=0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_LogonMobile LogonMobile;
|
|||
|
|
ZeroMemory(&LogonMobile,sizeof(LogonMobile));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LogonMobile.dwUserID=pLogonMobile->dwUserID;
|
|||
|
|
LogonMobile.dwClientAddr=dwUserIP;
|
|||
|
|
LogonMobile.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
LogonMobile.dwMatchNO=m_pMatchOption->dwMatchNO;
|
|||
|
|
LogonMobile.cbDeviceType=pLogonMobile->cbDeviceType;
|
|||
|
|
LogonMobile.wBehaviorFlags=pLogonMobile->wBehaviorFlags;
|
|||
|
|
LogonMobile.wPageTableCount=pLogonMobile->wPageTableCount;
|
|||
|
|
lstrcpyn(LogonMobile.szPassword,pLogonMobile->szPassword,CountArray(LogonMobile.szPassword));
|
|||
|
|
lstrcpyn(LogonMobile.szMachineID,pLogonMobile->szMachineID,CountArray(LogonMobile.szMachineID));
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(LogonMobile.dwUserID,DBR_GR_LOGON_MOBILE,dwSocketID,&LogonMobile,sizeof(LogonMobile));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
CMD_GR_LogonUserID * pLogonUserID=(CMD_GR_LogonUserID *)pData;
|
|||
|
|
pLogonUserID->szPassword[CountArray(pLogonUserID->szPassword)-1]=0;
|
|||
|
|
pLogonUserID->szMachineID[CountArray(pLogonUserID->szMachineID)-1]=0;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_LogonUserID LogonUserID;
|
|||
|
|
ZeroMemory(&LogonUserID,sizeof(LogonUserID));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LogonUserID.dwClientAddr=dwUserIP;
|
|||
|
|
LogonUserID.dwUserID=pLogonUserID->dwUserID;
|
|||
|
|
LogonUserID.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
LogonUserID.dwMatchNO=m_pMatchOption->dwMatchNO;
|
|||
|
|
lstrcpyn(LogonUserID.szPassword,pLogonUserID->szPassword,CountArray(LogonUserID.szPassword));
|
|||
|
|
lstrcpyn(LogonUserID.szMachineID,pLogonUserID->szMachineID,CountArray(LogonUserID.szMachineID));
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(LogonUserID.dwUserID,DBR_GR_LOGON_USERID,dwSocketID,&LogonUserID,sizeof(LogonUserID));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID)
|
|||
|
|
{
|
|||
|
|
ASSERT(pIServerUserItem!=NULL);
|
|||
|
|
if (pIServerUserItem == NULL)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD>û<EFBFBD>ָ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>!"),TraceLevel_Warning);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(CServerRule::IsForfendRoomEnter(m_pGameServiceOption->dwServerRule))
|
|||
|
|
{
|
|||
|
|
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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),SMT_CHAT|SMT_EJECT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
WORD wTableCount=GetNullTable();
|
|||
|
|
if(wTableCount<m_pMatchOption->MatchType.Immediate.wStartUserCount/CImmediateGroup::m_wChairCount)
|
|||
|
|
{
|
|||
|
|
CString str;
|
|||
|
|
str.Format( TEXT("<EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF>Ա<EFBFBD><D4B1><EFBFBD>"),m_pMatchOption->MatchType.Immediate.wStartUserCount/CImmediateGroup::m_wChairCount-wTableCount);
|
|||
|
|
SendRoomMessage(pIServerUserItem,str,SMT_CHAT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
if(m_pCurMatchGroup==NULL || m_pCurMatchGroup->m_enMatchStatus==MatchStatus_Wait)
|
|||
|
|
{
|
|||
|
|
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><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),SMT_CHAT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
INT_PTR dwUserCount=m_OnMatchUserItem.GetCount();
|
|||
|
|
for (INT_PTR i=0;i<dwUserCount;i++)
|
|||
|
|
{
|
|||
|
|
if(m_OnMatchUserItem[i]->GetUserID()==pIServerUserItem->GetUserID())
|
|||
|
|
{
|
|||
|
|
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>"),SMT_CHAT|SMT_EJECT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(m_LoopTimer.GetCount()==0)
|
|||
|
|
{
|
|||
|
|
SendRoomMessage(pIServerUserItem, TEXT("<EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Եȡ<EFBFBD>"),SMT_CHAT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(pIServerUserItem->GetUserStatus()!=US_FREE || pIServerUserItem->GetTableID()!=INVALID_TABLE)
|
|||
|
|
{
|
|||
|
|
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>"),SMT_CHAT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (m_pMatchOption->MatchType.Immediate.dwInitalScore==0&&pIServerUserItem->GetUserScore()<m_pMatchOption->MatchType.Immediate.dwInitalBase*m_pMatchOption->MatchType.Immediate.wMinEnterGold+m_pMatchOption->lMatchFee)
|
|||
|
|
{
|
|||
|
|
TCHAR szMsg[256]=TEXT("");
|
|||
|
|
_sntprintf_s(szMsg,CountArray(szMsg),TEXT("<EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ľ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>ܲμӱ<CEBC><D3B1><EFBFBD><EFBFBD><EFBFBD>"),
|
|||
|
|
m_pMatchOption->MatchType.Immediate.dwInitalBase*m_pMatchOption->MatchType.Immediate.wMinEnterGold+m_pMatchOption->lMatchFee);
|
|||
|
|
SendRoomMessage(pIServerUserItem, szMsg,SMT_CHAT|SMT_EJECT);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>˿۱<CBBF><DBB1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(m_pMatchOption->lMatchFee>0 && pIServerUserItem->IsAndroidUser()==false)
|
|||
|
|
{
|
|||
|
|
ASSERT(m_pIGameServiceFrame!=NULL);
|
|||
|
|
if(m_pIGameServiceFrame==NULL)
|
|||
|
|
{
|
|||
|
|
CTraceService::TraceString(TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>!"),TraceLevel_Warning);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
CMD_GR_Match_Fee MatchFee;
|
|||
|
|
MatchFee.lMatchFee=m_pMatchOption->lMatchFee;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
|
if(MatchFee.lMatchFee>0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LPCTSTR pszMatchFeeType[]={TEXT("<EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>"),TEXT("Ԫ<EFBFBD><EFBFBD>")};
|
|||
|
|
if(m_pMatchOption->cbMatchFeeType<CountArray(pszMatchFeeType))
|
|||
|
|
{
|
|||
|
|
_sntprintf_s(MatchFee.szNotifyContent,CountArray(MatchFee.szNotifyContent),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %I64d %s<><73>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),m_pMatchOption->lMatchFee,pszMatchFeeType[m_pMatchOption->cbMatchFeeType]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
WORD wDataSize=sizeof(MatchFee)-sizeof(MatchFee.szNotifyContent);
|
|||
|
|
wDataSize+=CountStringBuffer(MatchFee.szNotifyContent);
|
|||
|
|
m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_FEE,&MatchFee,wDataSize);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD>
|
|||
|
|
if(m_pMatchOption->lMatchFee==0 || pIServerUserItem->IsAndroidUser()==true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
if(pIServerUserItem->IsAndroidUser()==true && (m_pCurMatchGroup->m_wAndroidUserCount >=
|
|||
|
|
m_pMatchOption->MatchType.Immediate.wAndroidUserCount))
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return OnEventSocketMatch(SUB_GR_MATCH_FEE,&m_pMatchOption->lMatchFee,sizeof(SCORE),pIServerUserItem,dwSocketID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
m_OnMatchUserItem.Add(pIServerUserItem);
|
|||
|
|
SendMatchInfo(NULL);
|
|||
|
|
if(m_pIGameServiceFrame!=NULL)
|
|||
|
|
{
|
|||
|
|
SCORE lScore=SCORE(m_pMatchOption->lMatchFee)*-1;
|
|||
|
|
/*if(m_pMatchOption->MatchType.Immediate.dwInitalScore==0)
|
|||
|
|
{
|
|||
|
|
pIServerUserItem->GetUserInfo()->lScore+=lScore;
|
|||
|
|
m_pIServerUserItemSink->OnEventUserItemScore(pIServerUserItem,SCORE_REASON_MATCH_FEE);
|
|||
|
|
}*/
|
|||
|
|
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_CHAT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank, DWORD dwContextID)
|
|||
|
|
{
|
|||
|
|
ASSERT(pIServerUserItem!=NULL);
|
|||
|
|
if (pIServerUserItem==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ״̬
|
|||
|
|
if (pIServerUserItem->GetUserStatus()>=US_PLAYING)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE cbUserEnlist=pIServerUserItem->GetUserMatchStatus();
|
|||
|
|
if (cbUserEnlist==MS_MATCHING)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(RemoveMatchUserItem(pIServerUserItem))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT_PTR nGroupCount=m_MatchGroup.GetCount();
|
|||
|
|
for (INT_PTR i=0;i<nGroupCount;i++)
|
|||
|
|
{
|
|||
|
|
CImmediateGroup *pMatch=m_MatchGroup[i];
|
|||
|
|
if(pMatch->OnUserQuitMatch(pIServerUserItem))
|
|||
|
|
{
|
|||
|
|
//if(pMatch->m_enMatchStatus!=MatchStatus_Signup && pMatch->m_enMatchStatus!=MatchStatus_Wait)
|
|||
|
|
//{
|
|||
|
|
// SendRoomMessage(pIServerUserItem, TEXT("<22><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>ӭ<EFBFBD><D3AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), SMT_CHAT|SMT_EJECT);
|
|||
|
|
//}
|
|||
|
|
if (pMatch->m_enMatchStatus!=MatchStatus_Null)
|
|||
|
|
{
|
|||
|
|
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><EFBFBD><EFBFBD>"), SMT_CHAT|SMT_EJECT);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(m_pCurMatchGroup->OnUserQuitMatch(pIServerUserItem))
|
|||
|
|
{
|
|||
|
|
//<2F>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(m_pMatchOption->lMatchFee>0 && !pIServerUserItem->IsAndroidUser())
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_MatchSignup MatchSignup;
|
|||
|
|
MatchSignup.dwUserID=pIServerUserItem->GetUserID();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
MatchSignup.lMatchFee=m_pMatchOption->lMatchFee;
|
|||
|
|
MatchSignup.dwInoutIndex=pIServerUserItem->GetInoutIndex();
|
|||
|
|
MatchSignup.dwClientAddr=pIServerUserItem->GetClientAddr();
|
|||
|
|
MatchSignup.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
MatchSignup.dwMatchNO=m_pCurMatchGroup->m_dwMatchNO;
|
|||
|
|
MatchSignup.cbMatchType = m_pMatchOption->cbMatchType;
|
|||
|
|
lstrcpyn(MatchSignup.szMachineID,pIServerUserItem->GetMachineID(),CountArray(MatchSignup.szMachineID));
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(MatchSignup.dwUserID,DBR_GR_MATCH_UNSIGNUP,dwContextID,&MatchSignup,sizeof(MatchSignup));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (m_pCurMatchGroup->m_enMatchStatus!=MatchStatus_Null)
|
|||
|
|
{
|
|||
|
|
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><EFBFBD><EFBFBD>"), SMT_CHAT|SMT_EJECT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SendMatchInfo(NULL);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
SendMatchInfo(NULL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pIServerUserItem!=NULL);
|
|||
|
|
if (pIServerUserItem==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
CImmediateGroup * pImmediateGroup = static_cast<CImmediateGroup *>(pIServerUserItem->GetMatchData());
|
|||
|
|
if(pImmediateGroup==NULL)
|
|||
|
|
{
|
|||
|
|
return m_pIServerUserItemSink->OnEventUserItemScore(pIServerUserItem,cbReason);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
|
SendGroupUserScore(pIServerUserItem,pImmediateGroup);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
tagUserInfo * pUserInfo = pIServerUserItem->GetUserInfo();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CMD_GR_MobileUserScore MobileUserScore;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MobileUserScore.dwUserID=pUserInfo->dwUserID;
|
|||
|
|
MobileUserScore.UserScore.dwWinCount=pUserInfo->dwWinCount;
|
|||
|
|
MobileUserScore.UserScore.dwLostCount=pUserInfo->dwLostCount;
|
|||
|
|
MobileUserScore.UserScore.dwDrawCount=pUserInfo->dwDrawCount;
|
|||
|
|
MobileUserScore.UserScore.dwFleeCount=pUserInfo->dwFleeCount;
|
|||
|
|
MobileUserScore.UserScore.dwExperience=pUserInfo->dwExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MobileUserScore.UserScore.lScore=pUserInfo->lScore;
|
|||
|
|
MobileUserScore.UserScore.lScore+=pIServerUserItem->GetTrusteeScore();
|
|||
|
|
MobileUserScore.UserScore.lScore+=pIServerUserItem->GetFrozenedScore();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIGameServiceFrame->SendDataBatchToMobileUser(pIServerUserItem->GetTableID(),MDM_GR_USER,SUB_GR_USER_SCORE,&MobileUserScore,sizeof(MobileUserScore));
|
|||
|
|
|
|||
|
|
//<2F><>ʱд<CAB1><D0B4>
|
|||
|
|
if ((CServerRule::IsImmediateWriteScore(m_pGameServiceOption->dwServerRule)==true)&&(pIServerUserItem->IsVariation()==true))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_WriteGameScore WriteGameScore;
|
|||
|
|
ZeroMemory(&WriteGameScore,sizeof(WriteGameScore));
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
|
|||
|
|
WriteGameScore.dwUserID=pIServerUserItem->GetUserID();
|
|||
|
|
WriteGameScore.dwDBQuestID=pIServerUserItem->GetDBQuestID();
|
|||
|
|
WriteGameScore.dwClientAddr=pIServerUserItem->GetClientAddr();
|
|||
|
|
WriteGameScore.dwInoutIndex=pIServerUserItem->GetInoutIndex();
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
pIServerUserItem->DistillVariation(WriteGameScore.VariationInfo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
WriteGameScore.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
WriteGameScore.dwMatchNO=pImmediateGroup->m_dwMatchNO;
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(WriteGameScore.dwUserID,DBR_GR_WRITE_GAME_SCORE,0L,&WriteGameScore,sizeof(WriteGameScore), TRUE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD>״̬
|
|||
|
|
bool CImmediateMatch::OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID, WORD wOldChairID)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(pIServerUserItem->GetUserStatus()==US_FREE) pIServerUserItem->SetMatchData(NULL);
|
|||
|
|
|
|||
|
|
//<2F>ص<EFBFBD><D8B5>ӿ<EFBFBD>
|
|||
|
|
if(m_pIServerUserItemSink!=NULL)
|
|||
|
|
{
|
|||
|
|
return m_pIServerUserItemSink->OnEventUserItemStatus(pIServerUserItem,wOldTableID,wOldChairID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
|
|||
|
|
bool CImmediateMatch::OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight)
|
|||
|
|
{
|
|||
|
|
if(m_pIServerUserItemSink!=NULL)
|
|||
|
|
{
|
|||
|
|
return m_pIServerUserItemSink->OnEventUserItemRight(pIServerUserItem,dwAddRight,dwRemoveRight,bGameRight);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventMatchStart(CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
ASSERT(pMatch==m_pCurMatchGroup&&m_LoopTimer.GetCount()>0);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD> <20><><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pMatch->m_LoopTimer=m_LoopTimer[0];
|
|||
|
|
m_LoopTimer.RemoveAt(0);
|
|||
|
|
m_MatchGroup.Add(pMatch);
|
|||
|
|
|
|||
|
|
//<><D7BC><EFBFBD>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pCurMatchGroup=new CImmediateGroup((DWORD)time(NULL),m_pMatchOption,this);
|
|||
|
|
|
|||
|
|
SendMatchInfo(NULL);
|
|||
|
|
BYTE cbMatchStatus=MS_MATCHING;
|
|||
|
|
SendGroupData( MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus),pMatch);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::OnEventMatchOver(CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(pMatch!=NULL)
|
|||
|
|
{
|
|||
|
|
DBR_GR_MatchOver MatchOver;
|
|||
|
|
ZeroMemory(&MatchOver,sizeof(MatchOver));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MatchOver.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
MatchOver.dwMatchNO=pMatch->m_dwMatchNO;
|
|||
|
|
MatchOver.cbMatchType=MATCH_TYPE_IMMEDIATE;
|
|||
|
|
MatchOver.wServerID=m_pGameServiceOption->wServerID;
|
|||
|
|
|
|||
|
|
//<2F><>ȡʱ<C8A1><CAB1>
|
|||
|
|
MatchOver.MatchStartTime=pMatch->m_MatchStartTime;
|
|||
|
|
CTime::GetCurrentTime().GetAsSystemTime(MatchOver.MatchEndTime);
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(0,DBR_GR_MATCH_OVER,0,&MatchOver,sizeof(MatchOver));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>رն<D8B1>ʱ<EFBFBD><CAB1>
|
|||
|
|
bool CImmediateMatch::KillGameTimer(DWORD dwTimerID,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
m_pITimerEngine->KillTimer(dwTimerID);
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
bool CImmediateMatch::SetGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
return m_pITimerEngine->SetTimer(dwTimerID,dwElapse,dwRepeat,dwBindParameter);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::SendMatchInfo(IServerUserItem * pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
CMD_GR_Match_Num MatchNum;
|
|||
|
|
MatchNum.dwWaitting=(DWORD)m_pCurMatchGroup->m_OnMatchUserMap.GetCount();
|
|||
|
|
MatchNum.dwTotal=m_pMatchOption->MatchType.Immediate.wStartUserCount;
|
|||
|
|
if(pIServerUserItem==NULL)
|
|||
|
|
{
|
|||
|
|
m_pIGameServiceFrame->SendData(BG_ALL_CLIENT,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_GR_MATCH,SUB_GR_MATCH_NUM,&MatchNum, sizeof(MatchNum));
|
|||
|
|
INT_PTR dwUserCount=m_OnMatchUserItem.GetCount();
|
|||
|
|
for (INT_PTR i=0;i<dwUserCount;i++)
|
|||
|
|
{
|
|||
|
|
if(m_OnMatchUserItem[i]==pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
BYTE cbMatchStatus=pIServerUserItem->GetUserMatchStatus();
|
|||
|
|
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus));
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tagUserInfo *pUserScore=pIServerUserItem->GetUserInfo();
|
|||
|
|
pUserScore->dwWinCount=pUserScore->dwLostCount=pUserScore->dwFleeCount=pUserScore->dwDrawCount=pUserScore->cbGender=0;
|
|||
|
|
if((SCORE)m_pMatchOption->MatchType.Immediate.dwInitalScore!=0)
|
|||
|
|
{
|
|||
|
|
pUserScore->lScore=(LONG)m_pMatchOption->MatchType.Immediate.dwInitalScore;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return SendGroupUserScore(pIServerUserItem, NULL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
bool CImmediateMatch::SendGroupUserMessage(LPCTSTR pStrMessage,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
POSITION pos=pMatch->m_OnMatchUserMap.GetStartPosition();
|
|||
|
|
IServerUserItem *pUserItem=NULL;
|
|||
|
|
DWORD dwUserID=0;
|
|||
|
|
while(pos!=NULL)
|
|||
|
|
{
|
|||
|
|
pMatch->m_OnMatchUserMap.GetNextAssoc(pos,dwUserID, pUserItem);
|
|||
|
|
SendGameMessage(pUserItem,pStrMessage, SMT_CHAT|SMT_TABLE_ROLL);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::SendGroupUserScore(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CMD_GR_UserScore UserScore;
|
|||
|
|
ZeroMemory(&UserScore,sizeof(UserScore));
|
|||
|
|
|
|||
|
|
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
UserScore.dwUserID=pUserInfo->dwUserID;
|
|||
|
|
UserScore.UserScore.dwWinCount=pUserInfo->dwWinCount;
|
|||
|
|
UserScore.UserScore.dwLostCount=pUserInfo->dwLostCount;
|
|||
|
|
UserScore.UserScore.dwDrawCount=pUserInfo->dwDrawCount;
|
|||
|
|
UserScore.UserScore.dwFleeCount=pUserInfo->dwFleeCount;
|
|||
|
|
UserScore.UserScore.dwExperience=pUserInfo->dwExperience;
|
|||
|
|
UserScore.UserScore.lLoveLiness=pUserInfo->lLoveLiness;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//UserScore.UserScore.lIngot=pUserInfo->lIngot;
|
|||
|
|
UserScore.UserScore.lGrade=pUserInfo->lGrade;
|
|||
|
|
UserScore.UserScore.lInsure=pUserInfo->lInsure;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
UserScore.UserScore.lScore=pUserInfo->lScore;
|
|||
|
|
|
|||
|
|
if(pMatch!=NULL)
|
|||
|
|
{
|
|||
|
|
POSITION pos=pMatch->m_OnMatchUserMap.GetStartPosition();
|
|||
|
|
IServerUserItem *pUserItem=NULL;
|
|||
|
|
DWORD dwUserID=0;
|
|||
|
|
while(pos!=NULL)
|
|||
|
|
{
|
|||
|
|
pMatch->m_OnMatchUserMap.GetNextAssoc(pos,dwUserID, pUserItem);
|
|||
|
|
m_pIGameServiceFrame->SendData(pUserItem,MDM_GR_USER,SUB_GR_USER_SCORE,&UserScore,sizeof(UserScore));
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return m_pIGameServiceFrame->SendData(BG_COMPUTER,MDM_GR_USER,SUB_GR_USER_SCORE,&UserScore,sizeof(UserScore));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
bool CImmediateMatch::SendGroupUserStatus(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(pIServerUserItem!=NULL);
|
|||
|
|
ASSERT(pIServerUserItem->IsClientReady()==true);
|
|||
|
|
if (pIServerUserItem->IsClientReady()==false) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CMD_GR_UserStatus UserStatus;
|
|||
|
|
ZeroMemory(&UserStatus,sizeof(UserStatus));
|
|||
|
|
|
|||
|
|
tagUserInfo * pUserData=pIServerUserItem->GetUserInfo();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
UserStatus.dwUserID=pUserData->dwUserID;
|
|||
|
|
UserStatus.UserStatus.wTableID=pUserData->wTableID;
|
|||
|
|
UserStatus.UserStatus.wChairID=pUserData->wChairID;
|
|||
|
|
UserStatus.UserStatus.cbUserStatus=pUserData->cbUserStatus;
|
|||
|
|
|
|||
|
|
POSITION pos=pMatch->m_OnMatchUserMap.GetStartPosition();
|
|||
|
|
IServerUserItem *pUserItem=NULL;
|
|||
|
|
DWORD dwUserID=0;
|
|||
|
|
while(pos!=NULL)
|
|||
|
|
{
|
|||
|
|
pMatch->m_OnMatchUserMap.GetNextAssoc(pos,dwUserID, pUserItem);
|
|||
|
|
if(pUserItem->IsClientReady())
|
|||
|
|
m_pIGameServiceFrame->SendData(pUserItem,MDM_GR_USER,SUB_GR_USER_STATUS,&UserStatus,sizeof(UserStatus));
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Ϣ
|
|||
|
|
bool CImmediateMatch::SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType)
|
|||
|
|
{
|
|||
|
|
ASSERT(pIServerUserItem!=-NULL);
|
|||
|
|
if (pIServerUserItem==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((pIServerUserItem->GetBindIndex()!=INVALID_WORD)&&(pIServerUserItem->IsClientReady()==true)&&(pIServerUserItem->IsAndroidUser()==false))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
CMD_CM_SystemMessage Message;
|
|||
|
|
Message.wType=wMessageType;
|
|||
|
|
lstrcpyn(Message.szString,lpszMessage,CountArray(Message.szString));
|
|||
|
|
Message.wLength=CountStringBuffer(Message.szString);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wSendSize=sizeof(Message)-sizeof(Message.szString)+Message.wLength*sizeof(TCHAR);
|
|||
|
|
return m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_GF_FRAME,SUB_GF_SYSTEM_MESSAGE,&Message,wSendSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
bool CImmediateMatch::SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType)
|
|||
|
|
{
|
|||
|
|
ASSERT(pIServerUserItem!=-NULL);
|
|||
|
|
if (pIServerUserItem==NULL) return false;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pIServerUserItem->GetBindIndex()!=INVALID_WORD && false==pIServerUserItem->IsAndroidUser())
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
CMD_CM_SystemMessage Message;
|
|||
|
|
Message.wType=wMessageType;
|
|||
|
|
|
|||
|
|
lstrcpyn(Message.szString,lpszMessage,CountArray(Message.szString));
|
|||
|
|
Message.wLength=CountStringBuffer(Message.szString);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD wSendSize=sizeof(Message)-sizeof(Message.szString)+Message.wLength*sizeof(TCHAR);
|
|||
|
|
return m_pIGameServiceFrame->SendData(pIServerUserItem,MDM_CM_SYSTEM,SUB_CM_SYSTEM_MESSAGE,&Message,wSendSize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CImmediateMatch::SendGroupData(WORD wMainCmdID, WORD wSubCmdID, void * pData, WORD wDataSize,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
POSITION pos=pMatch->m_OnMatchUserMap.GetStartPosition();
|
|||
|
|
IServerUserItem *pUserItem=NULL;
|
|||
|
|
DWORD dwUserID=0;
|
|||
|
|
while(pos!=NULL)
|
|||
|
|
{
|
|||
|
|
pMatch->m_OnMatchUserMap.GetNextAssoc(pos,dwUserID, pUserItem);
|
|||
|
|
m_pIGameServiceFrame->SendData(pUserItem,wMainCmdID,wSubCmdID,pData,wDataSize);
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool CImmediateMatch::SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
|
|||
|
|
{
|
|||
|
|
if(pIServerUserItem!=NULL)
|
|||
|
|
return m_pIGameServiceFrame->SendData(pIServerUserItem,wMainCmdID,wSubCmdID,pData,wDataSize);
|
|||
|
|
else
|
|||
|
|
return m_pIGameServiceFrame->SendData(BG_ALL_CLIENT, wMainCmdID,wSubCmdID, pData, wDataSize);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Ϊ<><CEAA><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void CImmediateMatch::InsertNullTable()
|
|||
|
|
{
|
|||
|
|
for (int i=0;i<m_pGameServiceOption->wTableCount;i++)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
|||
|
|
WORD nCurTableCount=(WORD)m_pCurMatchGroup->m_MatchTableArray.GetCount();
|
|||
|
|
if(nCurTableCount>=m_pMatchOption->MatchType.Immediate.wStartUserCount/m_pGameServiceAttrib->wChairCount)break;
|
|||
|
|
|
|||
|
|
BOOL bIsInsert=true;
|
|||
|
|
for (int j=0;j<m_MatchGroup.GetCount();j++)
|
|||
|
|
{
|
|||
|
|
WORD wMatchGroupTableCount=(WORD)m_MatchGroup[j]->m_MatchTableArray.GetCount();
|
|||
|
|
for (int k=0;k<wMatchGroupTableCount;k++)
|
|||
|
|
{
|
|||
|
|
WORD wTableID=m_MatchGroup[j]->m_MatchTableArray[k]->wTableID;
|
|||
|
|
if(i==wTableID){bIsInsert=false;break;}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if( bIsInsert&&m_ppITableFrame[i]->GetNullChairCount()==m_pGameServiceAttrib->wChairCount)
|
|||
|
|
{
|
|||
|
|
tagTableFrameInfo * pTableFrameInfo=new tagTableFrameInfo;
|
|||
|
|
ZeroMemory(pTableFrameInfo,sizeof(tagTableFrameInfo));
|
|||
|
|
pTableFrameInfo->wTableID=i;
|
|||
|
|
pTableFrameInfo->pTableFrame=m_ppITableFrame[i];
|
|||
|
|
pTableFrameInfo->dwBaseScore=m_pMatchOption->MatchType.Immediate.dwInitalBase;
|
|||
|
|
ITableFrameHook * pFrameHook=QUERY_OBJECT_PTR_INTERFACE(m_ppITableFrame[i]->GetTableFrameHook(),ITableFrameHook);
|
|||
|
|
pFrameHook->SetMatchEventSink(QUERY_OBJECT_PTR_INTERFACE(m_pCurMatchGroup,IUnknownEx));
|
|||
|
|
m_pCurMatchGroup->AddMatchTable(pTableFrameInfo);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>еĻ<D0B5><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
IAndroidUserItem * CImmediateMatch::GetFreeAndroidUserItem()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(m_pAndroidUserManager->GetAndroidCount()==0) return NULL;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
|
tagAndroidUserInfo AndroidSimulate;
|
|||
|
|
m_pAndroidUserManager->GetAndroidUserInfo(AndroidSimulate,ANDROID_SIMULATE|ANDROID_PASSIVITY|ANDROID_INITIATIVE);
|
|||
|
|
|
|||
|
|
if(AndroidSimulate.wFreeUserCount==0)
|
|||
|
|
return NULL;
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for(WORD i=0; i<AndroidSimulate.wFreeUserCount;i++)
|
|||
|
|
{
|
|||
|
|
if(AndroidSimulate.pIAndroidUserFree[i]->GetMeUserItem()->GetUserMatchStatus()==MatchStatus_Null)
|
|||
|
|
{
|
|||
|
|
ASSERT(AndroidSimulate.pIAndroidUserFree[i]->GetUserID()==AndroidSimulate.pIAndroidUserFree[i]->GetMeUserItem()->GetUserID());
|
|||
|
|
return AndroidSimulate.pIAndroidUserFree[i];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB><EFBFBD>̭
|
|||
|
|
bool CImmediateMatch::OnUserOut(IServerUserItem *pUserItem,LPCTSTR szReason,WORD wLen,WORD wRank,CImmediateGroup *pMatch)
|
|||
|
|
{
|
|||
|
|
if(pUserItem==NULL)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
pUserItem->SetUserMatchStatus(MUS_NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB>û<EFBFBD>
|
|||
|
|
for (INT_PTR i=0;i<pMatch->m_FreeUserArray.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
if(pMatch->m_FreeUserArray[i]->GetUserID()==pUserItem->GetUserID())
|
|||
|
|
{
|
|||
|
|
pMatch->m_FreeUserArray.RemoveAt(i);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wLen>0 && szReason!=NULL)
|
|||
|
|
{
|
|||
|
|
CString str(szReason, wLen);
|
|||
|
|
SendGameMessage(pUserItem,str,SMT_EJECT|SMT_CHAT|SMT_CLOSE_GAME);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
RemoveMatchUserItem(pUserItem);
|
|||
|
|
|
|||
|
|
BYTE cbMatchStatus=MatchStatus_Null;
|
|||
|
|
m_pIGameServiceFrame->SendData(pUserItem, MDM_GR_MATCH, SUB_GR_MATCH_STATUS, &cbMatchStatus, sizeof(cbMatchStatus));
|
|||
|
|
|
|||
|
|
if(pMatch==m_pCurMatchGroup)
|
|||
|
|
{
|
|||
|
|
if(pUserItem!=NULL && !pUserItem->IsAndroidUser())
|
|||
|
|
{
|
|||
|
|
if(m_pMatchOption->lMatchFee>0)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_MatchSignup MatchSignup;
|
|||
|
|
ZeroMemory(&MatchSignup,sizeof(MatchSignup));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
MatchSignup.dwUserID=pUserItem->GetUserID();
|
|||
|
|
MatchSignup.lMatchFee=m_pMatchOption->lMatchFee;
|
|||
|
|
MatchSignup.dwInoutIndex=pUserItem->GetInoutIndex();
|
|||
|
|
MatchSignup.dwClientAddr=pUserItem->GetClientAddr();
|
|||
|
|
MatchSignup.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
MatchSignup.dwMatchNO=m_pCurMatchGroup->m_dwMatchNO;
|
|||
|
|
MatchSignup.cbMatchType = m_pMatchOption->cbMatchType;
|
|||
|
|
lstrcpyn(MatchSignup.szMachineID,pUserItem->GetMachineID(),CountArray(MatchSignup.szMachineID));
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(MatchSignup.dwUserID,DBR_GR_MATCH_UNSIGNUP,0,&MatchSignup,sizeof(MatchSignup));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
LPCTSTR pszMatchFeeType[]={TEXT("<EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD>"),TEXT("Ԫ<EFBFBD><EFBFBD>")};
|
|||
|
|
if(m_pMatchOption->cbMatchFeeType<CountArray(pszMatchFeeType))
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
TCHAR szMessage[128]=TEXT("");
|
|||
|
|
_sntprintf_s(szMessage,CountArray(szMessage),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> %I64d %s<><73>"),m_pMatchOption->lMatchFee,pszMatchFeeType[m_pMatchOption->cbMatchFeeType]);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
m_pIGameServiceFrame->SendRoomMessage(pUserItem,szMessage,SMT_EJECT|SMT_CHAT|SMT_CLOSE_ROOM);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
CServerRule::SetForfendRoomEnter(static_cast<DWORD>(m_pGameServiceOption->dwServerRule),true);
|
|||
|
|
}
|
|||
|
|
else if(m_pIDataBaseEngine!=NULL)
|
|||
|
|
{
|
|||
|
|
/*DBR_GR_MatchReward MatchReward;
|
|||
|
|
ZeroMemory(&MatchReward,sizeof(MatchReward));
|
|||
|
|
|
|||
|
|
MatchReward.dwMatchID=m_pMatchOption->dwMatchID;
|
|||
|
|
MatchReward.dwUserID=pUserItem->GetUserID();
|
|||
|
|
MatchReward.dwMatchNO=pMatch->m_dwMatchNO;
|
|||
|
|
MatchReward.wRank=wRank;
|
|||
|
|
MatchReward.lMatchScore=pUserItem->GetUserScore();
|
|||
|
|
MatchReward.dwClientAddr=pUserItem->GetClientAddr();
|
|||
|
|
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(MatchReward.dwUserID,DBR_GR_MATCH_REWARD, 0, &MatchReward, sizeof(MatchReward));*/
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<>뽱<EFBFBD><EBBDB1>
|
|||
|
|
bool CImmediateMatch::WriteUserAward(IServerUserItem *pIServerUserItem,tagMatchRankInfo * pMatchRankInfo)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
ASSERT(pIServerUserItem!=NULL && pMatchRankInfo!=NULL);
|
|||
|
|
if(pIServerUserItem==NULL || pMatchRankInfo==NULL) return false;
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD>ж<EFBFBD>
|
|||
|
|
bool bWriteReward=(pMatchRankInfo->lRewardGold+pMatchRankInfo->dwRewardIngot+pMatchRankInfo->dwRewardExperience)>0;
|
|||
|
|
|
|||
|
|
//д<>뽱<EFBFBD><EBBDB1>
|
|||
|
|
if(bWriteReward==true)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CMD_GR_MatchResult MatchResult;
|
|||
|
|
ZeroMemory(&MatchResult,sizeof(MatchResult));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MatchResult.lGold+=pMatchRankInfo->lRewardGold;
|
|||
|
|
MatchResult.dwIngot+=pMatchRankInfo->dwRewardIngot;
|
|||
|
|
MatchResult.dwExperience+=pMatchRankInfo->dwRewardExperience;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
|
_sntprintf_s(MatchResult.szDescribe,CountArray(MatchResult.szDescribe),TEXT("%s, <20><>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>%s<>л<EFBFBD><D0BB>õ<EFBFBD>%d<><64>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>"),
|
|||
|
|
pIServerUserItem->GetNickName(),m_pMatchOption->szMatchName,pMatchRankInfo->wRankID);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>Ϣ
|
|||
|
|
tagUserInfo * pUserInfo=pIServerUserItem->GetUserInfo();
|
|||
|
|
//pUserInfo->lIngot+=pMatchRankInfo->dwRewardIngot;
|
|||
|
|
pUserInfo->dwExperience+=pMatchRankInfo->dwRewardExperience;
|
|||
|
|
SendGroupUserScore(pIServerUserItem, NULL);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pIServerUserItem->IsAndroidUser()==false)
|
|||
|
|
{
|
|||
|
|
m_pIGameServiceFrame->SendData(pIServerUserItem, MDM_GR_MATCH, SUB_GR_MATCH_RESULT, &MatchResult, sizeof(MatchResult));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
TCHAR szMessage[256]=TEXT("");
|
|||
|
|
_sntprintf_s(szMessage,CountArray(szMessage),TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӭ<EFBFBD><D3AD><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εı<CEB5><C4B1><EFBFBD><EFBFBD><EFBFBD>"),pMatchRankInfo->wRankID);
|
|||
|
|
SendGameMessage(pIServerUserItem, szMessage, SMT_CLOSE_GAME);
|
|||
|
|
SendRoomMessage(pIServerUserItem, szMessage, SMT_CHAT|SMT_EJECT);
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//д<><D0B4><EFBFBD><EFBFBD>¼
|
|||
|
|
if(m_pIDataBaseEngine!=NULL)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
DBR_GR_MatchReward MatchReward;
|
|||
|
|
ZeroMemory(&MatchReward,sizeof(MatchReward));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
|||
|
|
MatchReward.dwUserID=pIServerUserItem->GetUserID();
|
|||
|
|
MatchReward.lRewardGold=pMatchRankInfo->lRewardGold;
|
|||
|
|
MatchReward.dwRewardIngot=pMatchRankInfo->dwRewardIngot;
|
|||
|
|
MatchReward.dwRewardExperience=pMatchRankInfo->dwRewardExperience;
|
|||
|
|
MatchReward.dwClientAddr=pIServerUserItem->GetClientAddr();
|
|||
|
|
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_pIDataBaseEngine->PostDataBaseRequest(MatchReward.dwUserID,DBR_GR_MATCH_REWARD,0,&MatchReward,sizeof(MatchReward));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
WORD CImmediateMatch::GetNullTable()
|
|||
|
|
{
|
|||
|
|
WORD wTableCount=0;
|
|||
|
|
for (int i=0;i<m_pGameServiceOption->wTableCount;i++)
|
|||
|
|
{
|
|||
|
|
BOOL bIsInsert=true;
|
|||
|
|
for (int j=0;j<m_MatchGroup.GetCount();j++)
|
|||
|
|
{
|
|||
|
|
WORD wMatchGroupTableCount=(WORD)m_MatchGroup[j]->m_MatchTableArray.GetCount();
|
|||
|
|
for (int k=0;k<wMatchGroupTableCount;k++)
|
|||
|
|
{
|
|||
|
|
WORD wTableID=m_MatchGroup[j]->m_MatchTableArray[k]->wTableID;
|
|||
|
|
if(i==wTableID){bIsInsert=false;break;}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if( bIsInsert&&m_ppITableFrame[i]->GetNullChairCount()==m_pGameServiceAttrib->wChairCount)
|
|||
|
|
{
|
|||
|
|
wTableCount++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return wTableCount;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CImmediateMatch::DeleteUserItem(DWORD dwUserIndex)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
if (m_pITCPNetworkEngineEvent == NULL)
|
|||
|
|
{
|
|||
|
|
throw 0;
|
|||
|
|
}
|
|||
|
|
m_pITCPNetworkEngineEvent->OnEventTCPNetworkShut(dwUserIndex,0,0L);
|
|||
|
|
}
|
|||
|
|
catch (...)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ASSERT(FALSE);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|||
|
|
bool CImmediateMatch::RemoveMatchUserItem(IServerUserItem *pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
for (INT_PTR i=0;i<m_OnMatchUserItem.GetCount();i++)
|
|||
|
|
{
|
|||
|
|
//<2F><>ȡ<EFBFBD>û<EFBFBD>
|
|||
|
|
IServerUserItem * pOnLineUserItem=m_OnMatchUserItem[i];
|
|||
|
|
|
|||
|
|
//<2F>û<EFBFBD><C3BB>ж<EFBFBD>
|
|||
|
|
if (pOnLineUserItem==pIServerUserItem)
|
|||
|
|
{
|
|||
|
|
ASSERT(pOnLineUserItem->GetUserID()==pIServerUserItem->GetUserID());
|
|||
|
|
|
|||
|
|
m_OnMatchUserItem.RemoveAt(i);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|