#ifndef LOCKTIME_MATCH_HEAD_FILE #define LOCKTIME_MATCH_HEAD_FILE #pragma once //引入文件 #include "TableFrameHook.h" #include "MatchServiceHead.h" #include "DistributeManager.h" /////////////////////////////////////////////////////////////////////////////////////////// //时钟定义 #define IDI_CHECK_START_MATCH (IDI_MATCH_MODULE_START+1) //开始时钟 #define IDI_CHECK_END_MATCH (IDI_MATCH_MODULE_START+2) //结束时钟 //移除理由 #define REMOVE_BY_ENDMATCH 250 //比赛结束 /////////////////////////////////////////////////////////////////////////////////////////// //结构定义 //比赛状态 enum emMatchStatus { MatchStatus_Free = 0, MatchStatus_Playing, MatchStatus_End }; ////////////////////////////////////////////////////////////////////////////////////////// //定时赛 class CLockTimeMatch : public IGameMatchItem, public IMatchEventSink, IServerUserItemSink { //状态变量 protected: emMatchStatus m_MatchStatus; //比赛状态 //变量定义 protected: CDistributeManager m_DistributeManage; //分组管理 //比赛配置 protected: tagGameMatchOption * m_pMatchOption; //比赛配置 tagGameServiceOption * m_pGameServiceOption; //服务配置 tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性 //内核接口 protected: ITableFrame ** m_ppITableFrame; //框架接口 ITimerEngine * m_pITimerEngine; //时间引擎 IDBCorrespondManager * m_pIDataBaseEngine; //数据引擎 ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //网络引擎 //服务接口 protected: IMainServiceFrame * m_pIGameServiceFrame; //功能接口 IServerUserManager * m_pIServerUserManager; //用户管理 IAndroidUserManager * m_pAndroidUserManager; //机器管理 IServerUserItemSink * m_pIServerUserItemSink; //用户回调 //函数定义 public: //构造函数 CLockTimeMatch(); //析构函数 virtual ~CLockTimeMatch(void); //基础接口 public: //释放对象 virtual VOID Release(){ delete this; } //接口查询 virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer); //控制接口 public: //启动通知 virtual void OnStartService() { return; } //管理接口 public: //绑定桌子 virtual bool BindTableFrame(ITableFrame * pTableFrame, WORD wTableID); //初始化接口 virtual bool InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter); //系统事件 public: //时间事件 virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter); //数据库事件 virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //网络事件 public: //比赛事件 virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID); //用户接口 public: //用户积分 virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason); //用户状态 virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID = INVALID_TABLE, WORD wOldChairID = INVALID_CHAIR, bool bSendState = false); //用户权限 virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight, BYTE cbRightKind); //事件接口 public: //用户登录 virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem); //用户登出 virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem); //进入事件 virtual bool OnEventEnterMatch(DWORD dwSocketID, VOID* pData, DWORD dwUserIP, bool bIsMobile); //用户参赛 virtual bool OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, DWORD dwSocketID); //用户退赛 virtual bool OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank = NULL, DWORD dwContextID = INVALID_WORD); //功能函数 public: //游戏开始 virtual bool OnEventGameStart(ITableFrame *pITableFrame, WORD wChairCount); //游戏结束 virtual bool OnEventGameEnd(ITableFrame *pITableFrame, WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason); //用户事件 public: //用户坐下 virtual bool OnActionUserSitDown(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser); //用户起来 virtual bool OnActionUserStandUp(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser); //用户同意 virtual bool OnActionUserOnReady(WORD wTableID, WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize); //辅助函数 protected: //清除玩家 void ClearSameTableUser(DWORD dwUserID); //插入用户 void InserSameTableUser(DWORD dwUserID, DWORD dwTableUserID); //发送分数 bool SendMatchUserScore(IServerUserItem * pIServerUserItem); //移除分组 bool RemoveDistribute(IServerUserItem * pIServerUserItem); //插入用户 bool InsertDistribute(IServerUserItem * pIServerUserItem); //校验函数 private: //参赛校验 bool VerifyUserEnterMatch(IServerUserItem * pIServerUserItem); //时间校验 bool VerifyMatchTime(LPTSTR pszMessage, WORD wMaxCount, WORD & wMessageType); //辅助函数 protected: //分配用户 bool PerformDistribute(); //开始间隔 DWORD GetMatchStartInterval(); //发送比赛信息 void SendTableUserMatchInfo(ITableFrame *pITableFrame, WORD wChairID); //写入奖励 bool WriteUserAward(IServerUserItem *pIServerUserItem, tagMatchRankInfo * pMatchRankInfo); }; #endif