Files

208 lines
6.4 KiB
C
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#ifndef IMMEDIATE_MATCH_HEAD_FILE
#define IMMEDIATE_MATCH_HEAD_FILE
#pragma once
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#include "TableFrameHook.h"
#include "MatchServiceHead.h"
#include "MatchServiceManager.h"
#include "ImmediateGroup.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>
//<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagMatchTimerItem
{
//DWORD dwTimerID; //<2F><>ʱ<EFBFBD><CAB1> ID
DWORD dwRealID; //ʵ<><CAB5>ID
DWORD dwRepeatTimes; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
WPARAM wBindParam; //<2F>󶨲<EFBFBD><F3B6A8B2><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagMatchReward
{
DWORD dwGold; //<2F><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>
DWORD dwMedal; //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
DWORD dwExperience; //<2F><><EFBFBD><EFBFBD><E9BDB1>
};
///////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><E9B6A8>
typedef CWHArray<BYTE> CMatchLoopTimerArray;
typedef CWHArray<CImmediateGroup *> CMatchGroupArray;
typedef CWHArray<tagMatchReward*> CMatchRewardArray;
typedef CWHArray<tagMatchTimerItem *> CTimerItemPtr;
typedef CWHArray<CTableFrameHook *> CMatchTableArray;
typedef CWHArray<IServerUserItem *> CMatchUserItemArray;
///////////////////////////////////////////////////////////////////////////////////////////
//<2F><>ʱ<EFBFBD><CAB1>
class CImmediateMatch : public IGameMatchItem,public IImmediateGroupSink,IServerUserItemSink
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CMatchTableArray m_MatchTableArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
protected:
CMatchUserItemArray m_OnMatchUserItem; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
CMatchLoopTimerArray m_LoopTimer; //ѭ<><D1AD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CMatchGroupArray m_MatchGroup; //<2F><><EFBFBD>еı<D0B5><C4B1><EFBFBD><EFBFBD><EFBFBD>
CMatchGroupArray m_OverMatchGroup; //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
CImmediateGroup * m_pCurMatchGroup; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<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>
CImmediateMatch();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CImmediateMatch(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();
//<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>¼
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><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><EFBFBD><EFBFBD>¼<EFBFBD>
public:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
virtual bool OnEventMatchStart(CImmediateGroup *pMatch);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventMatchOver(CImmediateGroup *pMatch);
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ӿ<EFBFBD>
public:
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool KillGameTimer(DWORD dwTimerID,CImmediateGroup *pMatch);
//<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool SetGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter,CImmediateGroup *pMatch);
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendGroupUserMessage(LPCTSTR pStrMessage,CImmediateGroup *pMatch);
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
virtual bool SendGroupUserScore(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch);
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool SendGroupUserStatus(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendGroupData(WORD wMainCmdID, WORD wSubCmdID, void * pData, WORD wDataSize,CImmediateGroup *pMatch);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
virtual void InsertNullTable();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual IAndroidUserItem * GetFreeAndroidUserItem();
//<2F>û<EFBFBD><C3BB><EFBFBD>̭
virtual bool OnUserOut(IServerUserItem *pUserItem,LPCTSTR szReason,WORD wLen,WORD wRank,CImmediateGroup *pMatch);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
private:
//<2F><>ȡ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
WORD GetNullTable();
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
bool DeleteUserItem(DWORD dwUserIndex);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool RemoveMatchUserItem(IServerUserItem *pIServerUserItem);
//д<><EFBFBD><EBBDB1>
bool WriteUserAward(IServerUserItem *pIServerUserItem,tagMatchRankInfo * pMatchRankInfo);
};
#endif