327 lines
9.9 KiB
C++
327 lines
9.9 KiB
C++
#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"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//数组说明
|
|
typedef CWHArray<CTableFrame *> CTableFrameArray; //桌子数组
|
|
typedef CMap<CTableFrame*,CTableFrame*,DWORD,DWORD> CTableFrameMap; //桌子容器
|
|
typedef CMap<DWORD,DWORD,IServerUserItem*,IServerUserItem*> CIServerUserItemMap;
|
|
typedef CWHArray <CMD_GR_Match_Info*> CMatchInfoArray;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//常量定义
|
|
#define MAX_MATCH_COUNT (512/(sizeof(ULARGE_INTEGER)*2)) //比赛场次
|
|
|
|
//比赛状态
|
|
#define MATCH_STATUS_NOT_STARTED 0 //没有开始
|
|
#define MATCH_STATUS_MATCHING 1 //比赛中
|
|
#define MATCH_STATUS_WAIT_FINISH 2 //等待结束
|
|
#define MATCH_STATUS_WAIT_START 3 //等待开始
|
|
#define MATCH_STATUS_FINISH 4 //比赛结束
|
|
|
|
#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
|
|
|
|
//比赛接口
|
|
interface IMatchService:public IUnknownEx
|
|
{
|
|
//启动事件
|
|
virtual bool OnAttemperEngineStart(IUnknownEx * pIUnknownEx)=NULL;
|
|
//停止事件
|
|
virtual bool OnAttemperEngineConclude(IUnknownEx * pIUnknownEx)=NULL;
|
|
//设置参数
|
|
virtual bool ModifyMatchParameter()=NULL;
|
|
//设置接口
|
|
virtual bool InitMatchService(IMainServiceFrame *pIMainServiceFrame, IDataBaseEngine *pIKernelDataBaseEngine,ITimerEngine *pITimerEngine,
|
|
tagGameServiceAttrib *pGameServiceAttrib,tagGameServiceOption *pGameServiceOption,CTableFrameArray &TableFrameArray)=NULL;
|
|
//用户报名
|
|
virtual bool OnUserJoinMatch(IServerUserItem * pIServerUserItem)=NULL;
|
|
//用户退赛
|
|
virtual bool OnUserQuitMatch(IServerUserItem * pIServerUserItem)=NULL;
|
|
//命令消息
|
|
virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)=NULL;
|
|
//时间事件
|
|
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)=NULL;
|
|
//报名人数
|
|
virtual DWORD GetSignUpUserCount()=NULL;
|
|
//设置规则
|
|
virtual VOID SetDistributeRule(BYTE cbDistributeRule)=NULL;
|
|
//插入分配
|
|
virtual bool InsertDistribute(IServerUserItem * pIServerUserItem)=NULL;
|
|
//寒事信息
|
|
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem)=NULL;
|
|
//数据库事件
|
|
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
|
|
{
|
|
//用户准备
|
|
virtual bool OnUserReay(IServerUserItem * pIServerUserItem,WORD wTableID,WORD wChairID)=NULL;
|
|
//游戏开始
|
|
virtual bool OnEventGameStart(WORD wTableID)=NULL;
|
|
//游戏结束
|
|
virtual bool OnEventGameEnd(WORD wTableID)=NULL;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
class CMatchParameterDlg:public CDialog
|
|
{
|
|
enum {IDD=IDD_DLG_MATCH_PARAMETER};
|
|
|
|
public:
|
|
WORD m_wMatchID; //比赛ID
|
|
BYTE &m_cbMatchTime; //比赛场次
|
|
ULARGE_INTEGER *m_puiMatchDate; //比赛时间
|
|
CMatchInfoArray &m_MatchInfo; //赛事信息
|
|
TCHAR *m_pszMatchRoom; //房间名称
|
|
DWORD &m_dwMatchFee; //报名费用
|
|
LONG &m_lInitScore; //初始积分
|
|
WORD &m_wMatchGameCount;
|
|
|
|
//控件变量
|
|
protected:
|
|
CListCtrl m_ListMatch; //比赛列表
|
|
CListCtrl m_ListMatchInfo; //比赛信息
|
|
|
|
public:
|
|
CMatchParameterDlg(CMatchInfoArray &MatchInfo,ULARGE_INTEGER *puiMatchDate,BYTE &cbMatchTime, TCHAR *pszMatchRoom,DWORD &dwMatchFee,
|
|
LONG &lInitScore, WORD &wMatchGameCount,WORD wMatchID);
|
|
virtual ~CMatchParameterDlg();
|
|
|
|
//重载函数
|
|
public:
|
|
//初始化函数
|
|
virtual BOOL OnInitDialog();
|
|
//数据交换
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
|
|
//消息映射
|
|
public:
|
|
//添加时间
|
|
VOID OnBnClickedAdd();
|
|
//修改时间
|
|
VOID OnBnClickedModify();
|
|
//删除时间
|
|
VOID OnBnClickedDelete();
|
|
//添加信息
|
|
VOID OnBnClickedAddInfo();
|
|
//修改信息
|
|
VOID OnBnClickedModifyInfo();
|
|
//删除信息
|
|
VOID OnBnClickedDeleteInfo();
|
|
|
|
|
|
//辅助函数
|
|
private:
|
|
//更新控件
|
|
VOID UpdateMatchList();
|
|
//更新控件
|
|
VOID UpdateMatchInfoList();
|
|
//获取时间字符串
|
|
LPCTSTR GetTimeString( SYSTEMTIME &st );
|
|
DECLARE_MESSAGE_MAP()
|
|
protected:
|
|
virtual void OnOK();
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
class CTimeRankingsMatch:public IMatchService, public IMatchTableFrameNotify
|
|
{
|
|
//变量定义
|
|
public:
|
|
DWORD m_dwMatchFee; //比赛费用
|
|
IMainServiceFrame * m_pIMainServiceFrame; //服务接口
|
|
IDataBaseEngine * m_pIKernelDataBaseEngine; //数据引擎
|
|
tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性
|
|
tagGameServiceOption * m_pGameServiceOption; //服务配置
|
|
CDistributeManager m_DistributeManage; //分组管理
|
|
ITimerEngine * m_pITimerEngine; //时间引擎
|
|
CTableFrameArray m_TableFrameArray; //桌子数组
|
|
|
|
//比赛配置
|
|
public:
|
|
CMatchInfoArray m_MatchInfo; //赛事信息
|
|
CIServerUserItemMap m_ServerUserItemMap; //参赛人员
|
|
BYTE m_cbMatchTime; //比赛场次
|
|
ULARGE_INTEGER m_uiMatchDate[MAX_MATCH_COUNT*2]; //比赛时间
|
|
CMatchParameterDlg *m_pParameterDlg; //配置参数
|
|
TCHAR m_szMatchName[32]; //比赛名称
|
|
WORD m_wMatchID; //比赛ID
|
|
LONG m_lInitScore; //初始积分
|
|
WORD m_wMatchGameCount; //比赛局数
|
|
CMD_GR_MatchRank * m_pMatchRank; //比赛得名
|
|
WORD m_wRankCount; //获奖人数
|
|
|
|
//状态变量
|
|
protected:
|
|
BYTE m_cbMatchStatus; //比赛状态
|
|
CTime m_TimeMatchStart; //比赛开始
|
|
CTime m_TimeMatchOver; //比赛结束
|
|
BYTE m_cbCurMatch; //当前比赛
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CTimeRankingsMatch(WORD wMatchID);
|
|
//析构函数
|
|
virtual ~CTimeRankingsMatch(void);
|
|
|
|
//基础接口
|
|
public:
|
|
//释放对象
|
|
virtual VOID Release(){delete this;}
|
|
//接口查询
|
|
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
|
|
|
|
//比赛接口
|
|
public:
|
|
//启动事件
|
|
virtual bool OnAttemperEngineStart(IUnknownEx * pIUnknownEx);
|
|
//停止事件
|
|
virtual bool OnAttemperEngineConclude(IUnknownEx * pIUnknownEx);
|
|
//设置参数
|
|
virtual bool ModifyMatchParameter();
|
|
//设置接口
|
|
virtual bool InitMatchService(IMainServiceFrame *pIMainServiceFrame, IDataBaseEngine *pIKernelDataBaseEngine,ITimerEngine *pITimerEngine,
|
|
tagGameServiceAttrib *pGameServiceAttrib,tagGameServiceOption *pGameServiceOption,CTableFrameArray &TableFrameArray);
|
|
//用户报名
|
|
virtual bool OnUserJoinMatch(IServerUserItem * pIServerUserItem);
|
|
//用户退赛
|
|
virtual bool OnUserQuitMatch(IServerUserItem * pIServerUserItem);
|
|
//命令消息
|
|
virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
|
|
//时间事件
|
|
virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
|
|
//报名人数
|
|
virtual DWORD GetSignUpUserCount(){return (DWORD)m_ServerUserItemMap.GetCount();}
|
|
//设置规则
|
|
virtual VOID SetDistributeRule(BYTE cbDistributeRule){m_DistributeManage.SetDistributeRule(cbDistributeRule);}
|
|
//插入分配
|
|
virtual bool InsertDistribute(IServerUserItem * pIServerUserItem);
|
|
//寒事信息
|
|
virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem);
|
|
//数据库事件
|
|
virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
|
|
|
|
//桌子通知
|
|
public:
|
|
//用户准备
|
|
virtual bool OnUserReay(IServerUserItem * pIServerUserItem,WORD wTableID,WORD wChairID);
|
|
//游戏开始
|
|
virtual bool OnEventGameStart(WORD wTableID){return true;}
|
|
//游戏结束
|
|
virtual bool OnEventGameEnd(WORD wTableID);
|
|
|
|
//运行函数
|
|
protected:
|
|
//开始下一场比赛
|
|
VOID StartNextMatch();
|
|
//分配用户
|
|
bool PerformDistribute();
|
|
//获取时间字符串
|
|
LPCTSTR GetTimeString( SYSTEMTIME &st );
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//添加比赛日期类
|
|
class CDlgAddMatchDate : public CDialog
|
|
{
|
|
//定义变量
|
|
public:
|
|
CTime m_TimeBegin; //开始时间
|
|
CTime m_TimeEnd; //结束时间
|
|
|
|
//控件变量
|
|
protected:
|
|
CDateTimeCtrl m_CtrlDateBegin; //开始日期
|
|
CDateTimeCtrl m_CtrlTimeBegin; //开始时间
|
|
CDateTimeCtrl m_CtrlDateEnd; //结束日期
|
|
CDateTimeCtrl m_CtrlTimeEnd; //结束时间
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CDlgAddMatchDate();
|
|
//析构函数
|
|
virtual ~CDlgAddMatchDate();
|
|
|
|
//重载函数
|
|
protected:
|
|
//数据交换
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
//初始化
|
|
virtual BOOL OnInitDialog();
|
|
//确定函数
|
|
VOID OnOK();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
//添加比赛信息类
|
|
class CDlgAddMatchInfo : public CDialog
|
|
{
|
|
enum {IDD=IDD_MATCH_INFO};
|
|
//控件变量
|
|
public:
|
|
CString m_strInfoTitle; //信息标题
|
|
CString m_strInfoDesc; //信息描述
|
|
int m_nInfoTitleLen; //标题长度
|
|
int m_nInfoDescLen; //描述长度
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CDlgAddMatchInfo();
|
|
//析构函数
|
|
virtual ~CDlgAddMatchInfo();
|
|
|
|
//重载函数
|
|
protected:
|
|
//数据交换
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
//初始化
|
|
virtual BOOL OnInitDialog();
|
|
//确定函数
|
|
VOID OnOK();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
};
|
|
|
|
class CMatchGroup
|
|
{
|
|
//变量定义
|
|
protected:
|
|
DWORD m_dwMatchID; //比赛ID
|
|
CTableFrameArray m_TableFrameArray; //桌子数组
|
|
CIServerUserItemMap m_ServerUserItemMap; //参赛人员
|
|
BYTE m_cbCurRound; //当前轮数
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
#endif
|