Files

226 lines
7.6 KiB
C
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#ifndef LOCKTIME_MATCH_HEAD_FILE
#define LOCKTIME_MATCH_HEAD_FILE
#pragma once
#include <vector>
#include <map>
using std::vector;
using std::map;
#include "NDSTLExtend.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#include "TableFrameHook.h"
#include "MatchServiceHead.h"
#include "DistributeManager.h"
#include "..\<5C><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\DataBasePacket.h"
///////////////////////////////////////////////////////////////////////////////////////////
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_CHECK_START_MATCH (IDI_MATCH_MODULE_START+1) //<2F><>ʼʱ<CABC><CAB1>
#define IDI_CHECK_END_MATCH (IDI_MATCH_MODULE_START+2) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define IDI_SWITCH_STATUS (IDI_MATCH_MODULE_START+3) //<2F>л<EFBFBD>״̬
#define IDI_LOAD_RANKDATA (IDI_MATCH_MODULE_START+4) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
#define REMOVE_BY_ENDMATCH 250 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////////////////////////////////////
//<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////////////////////
//<2F><>ʱ<EFBFBD><CAB1>
class CLockTimeMatch : public IGameMatchItem,public IMatchEventSink,IServerUserItemSink
{
typedef map<DWORD, tagMatchScore*> tagMatchScorePtrMap;
typedef vector<tagMatchScore*> tagMatchScorePtrVector;
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
protected:
BYTE m_MatchStatus; //<2F><><EFBFBD><EFBFBD>״̬
CTime m_TimeLastMatch; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CDistributeManager m_DistributeManage; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
tagMatchScorePtrMap m_AllMatchScorePtrMap; //<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>map;
tagMatchScorePtrVector m_AllMatchScorePtrVector; //<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵķ<D2B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vector;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
tagGameMatchOption * m_pMatchOption; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServiceOption * m_pGameServiceOption; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServiceAttrib * m_pGameServiceAttrib; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ں˽ӿ<CBBD>
protected:
ITableFrame ** m_ppITableFrame; //<2F><><EFBFBD>ܽӿ<DCBD>
ITimerEngine * m_pITimerEngine; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IDBCorrespondManager * m_pIDataBaseEngine; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
protected:
IMainServiceFrame * m_pIGameServiceFrame; //<2F><><EFBFBD>ܽӿ<DCBD>
IServerUserManager * m_pIServerUserManager; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
IAndroidUserManager * m_pAndroidUserManager; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IServerUserItemSink * m_pIServerUserItemSink; //<2F>û<EFBFBD><C3BB>ص<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CLockTimeMatch();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CLockTimeMatch(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release(){ delete this; }
//<2F>ӿڲ<D3BF>ѯ
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//<2F><><EFBFBD>ƽӿ<C6BD>
public:
//<2F><><EFBFBD><EFBFBD>֪ͨ
virtual void OnStartService() { return ; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool BindTableFrame(ITableFrame * pTableFrame,WORD wTableID);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӿ<EFBFBD>
virtual bool InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter);
//ϵͳ<CFB5>¼<EFBFBD>
public:
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//<2F>û<EFBFBD><C3BB>ӿ<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F>û<EFBFBD>״̬
virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID=INVALID_TABLE, WORD wOldChairID=INVALID_CHAIR);
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight=true);
//<2F>¼<EFBFBD><C2BC>ӿ<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD>¼
virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem);
//<2F>û<EFBFBD><C3BB>dz<EFBFBD>
virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnEventEnterMatch(DWORD dwSocketID ,VOID* pData,DWORD dwUserIP, bool bIsMobile);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason,DWORD dwSocketID);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank=NULL, DWORD dwContextID=INVALID_WORD);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
virtual bool OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount);
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual bool OnEventGameEnd(ITableFrame *pITableFrame,WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F>û<EFBFBD><C3BB>¼<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD>ͬ<EFBFBD><CDAC>
virtual bool OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
virtual bool OnActionUserOnStart(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize){ return true; }
virtual bool OnActionUserStartGame(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize){ return true; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ClearSameTableUser(DWORD dwUserID);
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
void InserSameTableUser(DWORD dwUserID,DWORD dwTableUserID);
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
bool SendMatchUserScore(IServerUserItem * pIServerUserItem);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
bool RemoveDistribute(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool InsertDistribute(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
bool SendMatchUserInitScore(IServerUserItem * pIServerUserItem);
//У<><EFBFBD><E9BAAF>
private:
//<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
bool VerifyUserEnterMatch(IServerUserItem * pIServerUserItem);
//ʱ<><CAB1>У<EFBFBD><D0A3>
bool VerifyMatchTime(LPTSTR pszMessage,WORD wMaxCount,WORD & wMessageType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool SendMatchInfo(IServerUserItem * pIServerUserItem);
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ;
bool IsRoundMatchMode();
//<2F><><EFBFBD><EFBFBD>ģʽ;
bool IsNormalMatchMode();
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>У<EFBFBD><D0A3>;
bool VerifySignupMatchTime(LPTSTR pszMessage, WORD wMaxCount, WORD & wMessageType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool PerformDistribute();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
DWORD GetMatchStartInterval();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD GetUserRank(IServerUserItem *pUserItem, ITableFrame *pITableFrame);
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ
void SendTableUserMatchInfo(ITableFrame *pITableFrame, WORD wChairID);
void SendTableUserMatchInfo(IServerUserItem* pIServerUserItem);
//д<><EFBFBD><EBBDB1>
bool WriteUserAward(IServerUserItem *pIServerUserItem,tagMatchRankInfo * pMatchRankInfo);
//<2F><><EFBFBD><EFBFBD>״̬
void UpdateMatchStatus();
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
VOID PerformAllUserStandUp(ITableFrame *pITableFrame);
//<2F><><EFBFBD><EFBFBD><E3B3A1>;
DWORD CalcMatchNo();
//<2F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>tagMatchScore;
void ReleaseMatchScore();
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>tagMatchScore;
void CreateNewMatchScore(IServerUserItem *pIServerUserItem);
//<2F><><EFBFBD>뵽m_AllMatchScorePtrMap<61><70>
void InsertAllMatchScoreMap(IServerUserItem *pIServerUserItem);
//find tagMatchScore;
tagMatchScore* FindMatchScore(IServerUserItem *pIServerUserItem);
//update tagMatchScore;
void UpdateMatchScore(IServerUserItem *pIServerUserItem, bool bFinish);
//sort tagMatchScore;
void SortMatchScoreVector();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>RankID;
DWORD GetUserRank(IServerUserItem *pUserItem);
//<2F><><EFBFBD><EFBFBD>CMD_GR_Match_Rank_Info<66><6F><EFBFBD><EFBFBD>;
void GetCMDGRMatchRankInfo(CMD_GR_Match_Rank_Info* pRankInfo, WORD& refRankSize);
//send SUB_GR_MATCH_JOIN_RESULT
void SendMatchJoinResult(IServerUserItem* pIServerUserItem, WORD wSuccess, LPCTSTR lpszMessage);
//<2F><><EFBFBD>뵽m_AllMatchScorePtrMap<61><70>
void InsertAllMatchScoreMap(tagMatchRankDataInfo * pMatchRankDataInfo);
//send SUB_GR_MATCH_PLAYERFINISH msg;
void SendMatchPlayerFinish(IServerUserItem* pIServerUserItem);
//send SUB_GR_MATCH_WAIT_TIP msg;
void SendMatchWaitTip(IServerUserItem* pIServerUserItem);
};
#endif