Files

327 lines
9.9 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#ifndef MATCH_SERVICE_HEAD_H
#define MATCH_SERVICE_HEAD_H
#include "resource.h"
#pragma once
#include "Stdafx.h"
#include "DistributeManager.h"
#include "TableFrame.h"
#include "afxwin.h"
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
typedef CWHArray<CTableFrame *> CTableFrameArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef CMap<CTableFrame*,CTableFrame*,DWORD,DWORD> CTableFrameMap; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef CMap<DWORD,DWORD,IServerUserItem*,IServerUserItem*> CIServerUserItemMap;
typedef CWHArray <CMD_GR_Match_Info*> CMatchInfoArray;
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_MATCH_COUNT (512/(sizeof(ULARGE_INTEGER)*2)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>״̬
#define MATCH_STATUS_NOT_STARTED 0 //û<>п<EFBFBD>ʼ
#define MATCH_STATUS_MATCHING 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MATCH_STATUS_WAIT_FINISH 2 //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
#define MATCH_STATUS_WAIT_START 3 //<2F>ȴ<EFBFBD><C8B4><EFBFBD>ʼ
#define MATCH_STATUS_FINISH 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef _UNICODE
#define VER_IMatchService INTERFACE_VERSION(1,1)
static const GUID IID_IMatchService={0x6e733049,0x0f23,0x40c2,0x00ad,0xec,0xcb,0x87,0x76,0xb6,0x3e,0xf5};
#else
#define VER_IMatchService INTERFACE_VERSION(1,1)
static const GUID IID_IMatchService={0x24725b64,0x0e46,0x4ca3,0x0091,0xc7,0x4a,0x8a,0x78,0x69,0x06,0x83};
#endif
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
interface IMatchService:public IUnknownEx
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnAttemperEngineStart(IUnknownEx * pIUnknownEx)=NULL;
//ֹͣ<CDA3>¼<EFBFBD>
virtual bool OnAttemperEngineConclude(IUnknownEx * pIUnknownEx)=NULL;
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
virtual bool ModifyMatchParameter()=NULL;
//<2F><><EFBFBD>ýӿ<C3BD>
virtual bool InitMatchService(IMainServiceFrame *pIMainServiceFrame, IDataBaseEngine *pIKernelDataBaseEngine,ITimerEngine *pITimerEngine,
tagGameServiceAttrib *pGameServiceAttrib,tagGameServiceOption *pGameServiceOption,CTableFrameArray &TableFrameArray)=NULL;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnUserJoinMatch(IServerUserItem * pIServerUserItem)=NULL;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnUserQuitMatch(IServerUserItem * pIServerUserItem)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)=NULL;
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual DWORD GetSignUpUserCount()=NULL;
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
virtual VOID SetDistributeRule(BYTE cbDistributeRule)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool InsertDistribute(IServerUserItem * pIServerUserItem)=NULL;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem)=NULL;
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)=NULL;
};
//////////////////////////////////////////////////////////////////////////////////
#ifdef _UNICODE
#define VER_IMatchTableFrameNotify INTERFACE_VERSION(1,1)
static const GUID IID_IMatchTableFrameNotify={0x726112e4,0x7820,0x4e49,0x00af,0x69,0xe5,0x39,0x6e,0x71,0xb2,0xfb};
#else
#define VER_IMatchTableFrameNotify INTERFACE_VERSION(1,1)
static const GUID IID_IMatchTableFrameNotify={0xdfc52f50,0x0692,0x430a,0x00aa,0x44,0x4d,0xda,0x2d,0xd3,0x08,0xd8};
#endif
interface IMatchTableFrameNotify: public IUnknownEx
{
//<2F>û<EFBFBD>׼<EFBFBD><D7BC>
virtual bool OnUserReay(IServerUserItem * pIServerUserItem,WORD wTableID,WORD wChairID)=NULL;
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
virtual bool OnEventGameStart(WORD wTableID)=NULL;
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual bool OnEventGameEnd(WORD wTableID)=NULL;
};
//////////////////////////////////////////////////////////////////////////////////
class CMatchParameterDlg:public CDialog
{
enum {IDD=IDD_DLG_MATCH_PARAMETER};
public:
WORD m_wMatchID; //<2F><><EFBFBD><EFBFBD>ID
BYTE &m_cbMatchTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULARGE_INTEGER *m_puiMatchDate; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CMatchInfoArray &m_MatchInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
TCHAR *m_pszMatchRoom; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD &m_dwMatchFee; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LONG &m_lInitScore; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
WORD &m_wMatchGameCount;
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
protected:
CListCtrl m_ListMatch; //<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
CListCtrl m_ListMatchInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
CMatchParameterDlg(CMatchInfoArray &MatchInfo,ULARGE_INTEGER *puiMatchDate,BYTE &cbMatchTime, TCHAR *pszMatchRoom,DWORD &dwMatchFee,
LONG &lInitScore, WORD &wMatchGameCount,WORD wMatchID);
virtual ~CMatchParameterDlg();
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
public:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual BOOL OnInitDialog();
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
virtual void DoDataExchange(CDataExchange* pDX);
//<2F><>Ϣӳ<CFA2><D3B3>
public:
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
VOID OnBnClickedAdd();
//<2F>޸<EFBFBD>ʱ<EFBFBD><CAB1>
VOID OnBnClickedModify();
//ɾ<><C9BE>ʱ<EFBFBD><CAB1>
VOID OnBnClickedDelete();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
VOID OnBnClickedAddInfo();
//<2F>޸<EFBFBD><DEB8><EFBFBD>Ϣ
VOID OnBnClickedModifyInfo();
//ɾ<><C9BE><EFBFBD><EFBFBD>Ϣ
VOID OnBnClickedDeleteInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private:
//<2F><><EFBFBD>¿ؼ<C2BF>
VOID UpdateMatchList();
//<2F><><EFBFBD>¿ؼ<C2BF>
VOID UpdateMatchInfoList();
//<2F><>ȡʱ<C8A1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
LPCTSTR GetTimeString( SYSTEMTIME &st );
DECLARE_MESSAGE_MAP()
protected:
virtual void OnOK();
};
//////////////////////////////////////////////////////////////////////////
class CTimeRankingsMatch:public IMatchService, public IMatchTableFrameNotify
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
DWORD m_dwMatchFee; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IMainServiceFrame * m_pIMainServiceFrame; //<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
IDataBaseEngine * m_pIKernelDataBaseEngine; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServiceAttrib * m_pGameServiceAttrib; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagGameServiceOption * m_pGameServiceOption; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDistributeManager m_DistributeManage; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ITimerEngine * m_pITimerEngine; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTableFrameArray m_TableFrameArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
CMatchInfoArray m_MatchInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
CIServerUserItemMap m_ServerUserItemMap; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
BYTE m_cbMatchTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULARGE_INTEGER m_uiMatchDate[MAX_MATCH_COUNT*2]; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CMatchParameterDlg *m_pParameterDlg; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
TCHAR m_szMatchName[32]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD m_wMatchID; //<2F><><EFBFBD><EFBFBD>ID
LONG m_lInitScore; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
WORD m_wMatchGameCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_MatchRank * m_pMatchRank; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD m_wRankCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
protected:
BYTE m_cbMatchStatus; //<2F><><EFBFBD><EFBFBD>״̬
CTime m_TimeMatchStart; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
CTime m_TimeMatchOver; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE m_cbCurMatch; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CTimeRankingsMatch(WORD wMatchID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CTimeRankingsMatch(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><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnAttemperEngineStart(IUnknownEx * pIUnknownEx);
//ֹͣ<CDA3>¼<EFBFBD>
virtual bool OnAttemperEngineConclude(IUnknownEx * pIUnknownEx);
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
virtual bool ModifyMatchParameter();
//<2F><><EFBFBD>ýӿ<C3BD>
virtual bool InitMatchService(IMainServiceFrame *pIMainServiceFrame, IDataBaseEngine *pIKernelDataBaseEngine,ITimerEngine *pITimerEngine,
tagGameServiceAttrib *pGameServiceAttrib,tagGameServiceOption *pGameServiceOption,CTableFrameArray &TableFrameArray);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnUserJoinMatch(IServerUserItem * pIServerUserItem);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnUserQuitMatch(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
//ʱ<><CAB1><EFBFBD>¼<EFBFBD>
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual DWORD GetSignUpUserCount(){return (DWORD)m_ServerUserItemMap.GetCount();}
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
virtual VOID SetDistributeRule(BYTE cbDistributeRule){m_DistributeManage.SetDistributeRule(cbDistributeRule);}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool InsertDistribute(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF>¼<EFBFBD>
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
//<2F><><EFBFBD><EFBFBD>֪ͨ
public:
//<2F>û<EFBFBD>׼<EFBFBD><D7BC>
virtual bool OnUserReay(IServerUserItem * pIServerUserItem,WORD wTableID,WORD wChairID);
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
virtual bool OnEventGameStart(WORD wTableID){return true;}
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual bool OnEventGameEnd(WORD wTableID);
//<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
protected:
//<2F><>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID StartNextMatch();
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool PerformDistribute();
//<2F><>ȡʱ<C8A1><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
LPCTSTR GetTimeString( SYSTEMTIME &st );
};
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CDlgAddMatchDate : public CDialog
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
CTime m_TimeBegin; //<2F><>ʼʱ<CABC><CAB1>
CTime m_TimeEnd; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
protected:
CDateTimeCtrl m_CtrlDateBegin; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
CDateTimeCtrl m_CtrlTimeBegin; //<2F><>ʼʱ<CABC><CAB1>
CDateTimeCtrl m_CtrlDateEnd; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDateTimeCtrl m_CtrlTimeEnd; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDlgAddMatchDate();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CDlgAddMatchDate();
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
protected:
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
virtual void DoDataExchange(CDataExchange* pDX);
//<2F><>ʼ<EFBFBD><CABC>
virtual BOOL OnInitDialog();
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID OnOK();
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
class CDlgAddMatchInfo : public CDialog
{
enum {IDD=IDD_MATCH_INFO};
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
public:
CString m_strInfoTitle; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CString m_strInfoDesc; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
int m_nInfoTitleLen; //<2F><><EFBFBD><EFBFBD><E2B3A4>
int m_nInfoDescLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDlgAddMatchInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CDlgAddMatchInfo();
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
protected:
//<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
virtual void DoDataExchange(CDataExchange* pDX);
//<2F><>ʼ<EFBFBD><CABC>
virtual BOOL OnInitDialog();
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID OnOK();
DECLARE_MESSAGE_MAP()
};
class CMatchGroup
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
DWORD m_dwMatchID; //<2F><><EFBFBD><EFBFBD>ID
CTableFrameArray m_TableFrameArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CIServerUserItemMap m_ServerUserItemMap; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
BYTE m_cbCurRound; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
};
//////////////////////////////////////////////////////////////////////////////////
#endif