Files

273 lines
8.7 KiB
C
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#ifndef IMMEDIATE_GROUP_HEAD_FILE
#define IMMEDIATE_GROUP_HEAD_FILE
#pragma once
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#include "TableFrameHook.h"
#include "MatchServiceHead.h"
///////////////////////////////////////////////////////////////////////////////////////////////////////
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_DELETE_OVER_MATCH (IDI_MATCH_MODULE_START+1) //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
#define IDI_CHECK_OVER_MATCH (IDI_MATCH_MODULE_START+2) //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_GROUP_TIMER_START (IDI_MATCH_MODULE_START+10) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĶ<DAB5>ʱ<EFBFBD><CAB1>
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_CHECK_MATCH_GROUP (IDI_GROUP_TIMER_START+1) //<2F><>Ѳ<EFBFBD><D1B2><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_WAITTABLE_FIRST_ROUND (IDI_GROUP_TIMER_START+2) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
#define IDI_WAITTABLE_RAND_TABLE (IDI_GROUP_TIMER_START+3) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_SWITCH_WAIT_TIME (IDI_GROUP_TIMER_START+4) //<2F><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
#define IDI_ALL_DISMISS_GAME (IDI_GROUP_TIMER_START+5) //ȫ<><C8AB><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2>Ϸ
#define IDI_LASTMATCHRESULT (IDI_GROUP_TIMER_START+6) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IDI_ENTER_NEXT_ROUND (IDI_GROUP_TIMER_START+7) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѭ<EFBFBD><D1AD>
#define IDI_TABLE_REQUEST_USER (IDI_GROUP_TIMER_START+8) //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ʱ<>Ӷ<EFBFBD><D3B6><EFBFBD>
#define IDI_CONTINUE_GAME 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
#define IDI_LEAVE_TABLE 2 //<2F><EFBFBD><EBBFAA><EFBFBD><EFBFBD>
#define IDI_CHECK_TABLE_START 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ(<28><><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD>׼<EFBFBD><D7BC><EFBFBD>󲻿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>)
///////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>״̬
enum enMatchStatus
{
MatchStatus_Null=0, //<2F><>״̬
MatchStatus_Signup, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MatchStatus_Wait, //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
MatchStatus_FirstRound //<2F><><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
struct tagMatchTimer
{
DWORD dwTimerID; //<2F><>ʱ<EFBFBD><CAB1>ID
int iElapse; //ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
WPARAM wParam; //<2F><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
LPARAM lParam; //<2F><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagMatchRanking
{
DWORD dwUserID; //<2F>û<EFBFBD>I D
SCORE lScore; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
LONG lExpand; //<2F><>չֵ
IServerUserItem * pUserItem; //<2F>û<EFBFBD><C3BB>ӿ<EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagTableFrameInfo
{
ITableFrame * pTableFrame; //<2F><><EFBFBD>ӽӿ<D3BD>
WORD wTableID; //<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
DWORD dwBaseScore; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE cbPlayCount; //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool bRoundTableFinish; //<2F><><EFBFBD>ɱ<EFBFBD>ʶ
bool bSwtichTableFinish; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bWaitForNextInnings; //<2F>ȴ<EFBFBD><C8B4>¾<EFBFBD>
};
///////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><E9B6A8>
typedef CWHArray<tagMatchTimer *> CUserMatchTimerArray;
typedef CWHArray<tagMatchScore *> CUserMatchScoreArray;
typedef CWHArray<IServerUserItem *> CMatchUserItemArray;
typedef CWHArray<tagTableFrameInfo *> CTableFrameMananerArray;
//<2F>ֵ䶨<D6B5><E4B6A8>
typedef CMap<DWORD,DWORD,IServerUserItem *, IServerUserItem *> CUserItemMap;
typedef CMap<IServerUserItem *, IServerUserItem *, DWORD, DWORD> CUserSeatMap;
///////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F>ӿڶ<D3BF><DAB6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CImmediateGroup;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
interface IImmediateGroupSink
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
public:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
virtual bool OnEventMatchStart(CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnEventMatchOver(CImmediateGroup *pMatch)=NULL;
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ӿ<EFBFBD>
public:
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool KillGameTimer(DWORD dwTimerID,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool SetGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendGroupUserMessage(LPCTSTR pStrMessage,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
virtual bool SendGroupUserScore(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool SendGroupUserStatus(IServerUserItem * pIServerUserItem,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendGroupData(WORD wMainCmdID, WORD wSubCmdID, void * pData, WORD wDataSize,CImmediateGroup *pMatch)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)=NULL;
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
virtual void InsertNullTable()=NULL;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual IAndroidUserItem * GetFreeAndroidUserItem()=NULL;
//<2F>û<EFBFBD><C3BB><EFBFBD>̭
virtual bool OnUserOut(IServerUserItem *pUserItem,LPCTSTR szReason,WORD wLen,WORD wRank,CImmediateGroup *pMatch)=NULL;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CImmediateGroup: public IMatchEventSink
{
friend class CImmediateMatch;
//״̬<D7B4><CCAC>Ϣ
protected:
DWORD m_dwCurBase; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
DWORD m_dwMatchNO; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enMatchStatus m_enMatchStatus; //<2F><><EFBFBD><EFBFBD><EFBFBD>׶<EFBFBD>
BYTE m_LoopTimer; //ѭ<><D1AD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
WORD m_wAndroidUserCount; //<2F><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>
SYSTEMTIME m_MatchStartTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
tagGameMatchOption * m_pMatchOption; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IImmediateGroupSink * m_pMatchSink; //<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
protected:
CUserItemMap m_OnMatchUserMap; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
CMatchUserItemArray m_FreeUserArray; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
CTableFrameMananerArray m_MatchTableArray; //Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CUserMatchTimerArray m_MatchTimerArray; //<2F><><EFBFBD><EFBFBD>ר<EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
protected:
static WORD m_wChairCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CImmediateGroup(DWORD dwMatchNO,tagGameMatchOption * pGameMatchOption,IImmediateGroupSink *pIImmediateGroupSink);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CImmediateGroup();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release(){}
//<2F>ӿڲ<D3BF>ѯ
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//<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><C3BB>¼<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool OnUserSignUpMatch(IServerUserItem *pUserItem);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
BOOL OnUserQuitMatch(IServerUserItem *pUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void MatchOver();
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
void EfficacyStartMatch();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CheckMatchUser();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD SortMapUser(tagMatchScore score[]);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void RearrangeUserSeat(bool bDismissGame=true);
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
bool OnTimeMessage(DWORD dwTimerID, WPARAM dwBindParameter);
WORD GetUserRank(IServerUserItem *pUserItem, ITableFrame *pITableFrame=NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
VOID SendWaitTip(ITableFrame *pTableFrame, WORD wChairID=INVALID_CHAIR);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void AddMatchTable(tagTableFrameInfo* pTableFrameInfo){m_MatchTableArray.Add(pTableFrameInfo);}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ר<EFBFBD>ýӿ<C3BD>
tagTableFrameInfo* GetTableInterface(ITableFrame* ITable);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
void TabelRequestUser(bool bPrecedeSit=true);
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϣ
void SendGroupBox(LPCTSTR pStrMessage);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>
void AllUserExitTable(ITableFrame *pITableFrame);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
void ContinueGame(ITableFrame *pITableFrame);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
WORD GetPrecedeSitUser(DWORD dwCurTime);
//ʵ<>ָú<D6B8><C3BA><EFBFBD><EFBFBD>ɱ<EFBFBD>֤Free<65><65>Ψһ
void InsertFreeGroup(IServerUserItem *pUserItem);
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ
void SendTableUserMatchInfo(ITableFrame *pITableFrame, WORD wChairID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
void FirstRoundRuleInningsGameEnd(ITableFrame *pITableFrame);
//<2F><><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CheckRoundTableFinish();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CheckSwitchTableFinish();
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
void SetRoundTableFinish(ITableFrame *pITableFrame);
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
void SetSwitchTableFinish(ITableFrame *pITableFrame);
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void CaptureMatchTimer();
//ɱ<><C9B1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void AllKillMatchTimer();
//ɱ<><C9B1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
bool KillMatchTimer(INT_PTR dwIndexID);
//ɱ<><C9B1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
bool KillMatchTimer(DWORD dwTimerID, WPARAM wParam);
//Ͷ<>ݶ<EFBFBD>ʱ<EFBFBD><CAB1>
void PostMatchTimer(DWORD dwTimerID, int iElapse, WPARAM wParam=0, LPARAM lParam=0);
//ɱ<><C9B1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void KillMatchGameTimer(DWORD dwTimerID);
//<2F><EFBFBD><E8B6A8>ʱ<EFBFBD><CAB1>
void SetMatchGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter);
};
#endif