诸暨麻将添加redis
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

210 行
7.1 KiB

  1. #ifndef IMMEDIATE_MATCH_HEAD_FILE
  2. #define IMMEDIATE_MATCH_HEAD_FILE
  3. #pragma once
  4. //引入文件
  5. #include "TableFrameHook.h"
  6. #include "MatchServiceHead.h"
  7. #include "MatchServiceManager.h"
  8. #include "ImmediateGroup.h"
  9. ///////////////////////////////////////////////////////////////////////////////////////////
  10. //时钟定义
  11. #define IDI_CHECK_START_MATCH (IDI_MATCH_MODULE_START+1) //开始时钟
  12. #define IDI_CHECK_END_MATCH (IDI_MATCH_MODULE_START+2) //结束时钟
  13. //移除理由
  14. #define REMOVE_BY_ENDMATCH 250 //比赛结束
  15. ///////////////////////////////////////////////////////////////////////////////////////////
  16. //结构定义
  17. //定时器子项
  18. struct tagMatchTimerItem
  19. {
  20. //DWORD dwTimerID; //定时器 ID
  21. DWORD dwRealID; //实际ID
  22. DWORD dwRepeatTimes; //重复次数
  23. WPARAM wBindParam; //绑定参数
  24. };
  25. //比赛奖励
  26. struct tagMatchReward
  27. {
  28. DWORD dwGold; //金币奖励
  29. DWORD dwMedal; //奖牌奖励
  30. DWORD dwExperience; //经验奖励
  31. };
  32. ///////////////////////////////////////////////////////////////////////////////////////////
  33. //类型定义
  34. //数组定义
  35. typedef CWHArray<BYTE> CMatchLoopTimerArray;
  36. typedef CWHArray<CImmediateGroup *> CMatchGroupArray;
  37. typedef CWHArray<tagMatchReward*> CMatchRewardArray;
  38. typedef CWHArray<tagMatchTimerItem *> CTimerItemPtr;
  39. typedef CWHArray<CTableFrameHook *> CMatchTableArray;
  40. typedef CWHArray<IServerUserItem *> CMatchUserItemArray;
  41. ///////////////////////////////////////////////////////////////////////////////////////////
  42. //即时赛
  43. class CImmediateMatch : public IGameMatchItem, public IImmediateGroupSink, IServerUserItemSink
  44. {
  45. //变量定义
  46. protected:
  47. CMatchTableArray m_MatchTableArray; //比赛桌子
  48. //存储变量
  49. protected:
  50. CMatchUserItemArray m_OnMatchUserItem; //参赛用户
  51. CMatchLoopTimerArray m_LoopTimer; //循环定时器
  52. //比赛分组
  53. protected:
  54. CMatchGroupArray m_MatchGroup; //进行的比赛组
  55. CMatchGroupArray m_OverMatchGroup; //结束的比赛组
  56. CImmediateGroup * m_pCurMatchGroup; //当前比赛组
  57. //比赛属性
  58. protected:
  59. CMD_GR_MatchDesc m_MatchDesc; //信息描述
  60. //比赛配置
  61. protected:
  62. tagGameMatchOption * m_pMatchOption; //比赛配置
  63. tagGameServiceOption * m_pGameServiceOption; //服务配置
  64. tagGameServiceAttrib * m_pGameServiceAttrib; //服务属性
  65. //内核接口
  66. protected:
  67. ITableFrame ** m_ppITableFrame; //框架接口
  68. ITimerEngine * m_pITimerEngine; //时间引擎
  69. IDBCorrespondManager * m_pIDataBaseEngine; //数据引擎
  70. ITCPNetworkEngineEvent * m_pITCPNetworkEngineEvent; //网络引擎
  71. //服务接口
  72. protected:
  73. IMainServiceFrame * m_pIGameServiceFrame; //功能接口
  74. IServerUserManager * m_pIServerUserManager; //用户管理
  75. IAndroidUserManager * m_pAndroidUserManager; //机器管理
  76. IServerUserItemSink * m_pIServerUserItemSink; //用户回调
  77. //函数定义
  78. public:
  79. //构造函数
  80. CImmediateMatch();
  81. //析构函数
  82. virtual ~CImmediateMatch(void);
  83. //基础接口
  84. public:
  85. //释放对象
  86. virtual VOID Release(){ delete this; }
  87. //接口查询
  88. virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
  89. //控制接口
  90. public:
  91. //启动通知
  92. virtual void OnStartService();
  93. //管理接口
  94. public:
  95. //绑定桌子
  96. virtual bool BindTableFrame(ITableFrame * pTableFrame, WORD wTableID);
  97. //初始化接口
  98. virtual bool InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter);
  99. //系统事件
  100. public:
  101. //时间事件
  102. virtual bool OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter);
  103. //数据库事件
  104. virtual bool OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize);
  105. //网络事件
  106. public:
  107. //比赛事件
  108. virtual bool OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID);
  109. //用户事件
  110. public:
  111. //用户登录
  112. virtual bool OnEventUserLogon(IServerUserItem * pIServerUserItem);
  113. //用户登出
  114. virtual bool OnEventUserLogout(IServerUserItem * pIServerUserItem);
  115. //进入事件
  116. virtual bool OnEventEnterMatch(DWORD dwSocketID, VOID* pData, DWORD dwUserIP, bool bIsMobile);
  117. //用户参赛
  118. virtual bool OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, DWORD dwSocketID);
  119. //用户退赛
  120. virtual bool OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank = NULL, DWORD dwContextID = INVALID_WORD);
  121. //用户接口
  122. public:
  123. //用户积分
  124. virtual bool OnEventUserItemScore(IServerUserItem * pIServerUserItem, BYTE cbReason);
  125. //用户状态
  126. virtual bool OnEventUserItemStatus(IServerUserItem * pIServerUserItem, WORD wOldTableID = INVALID_TABLE, WORD wOldChairID = INVALID_CHAIR, bool bSendState = false);
  127. //用户权限
  128. virtual bool OnEventUserItemRight(IServerUserItem *pIServerUserItem, DWORD dwAddRight, DWORD dwRemoveRight, BYTE cbRightKind);
  129. //比赛事件
  130. public:
  131. //开始比赛
  132. virtual bool OnEventMatchStart(CImmediateGroup *pMatch);
  133. //比赛结束
  134. virtual bool OnEventMatchOver(CImmediateGroup *pMatch);
  135. //定时器接口
  136. public:
  137. //删除定时器
  138. virtual bool KillGameTimer(DWORD dwTimerID, CImmediateGroup *pMatch);
  139. //设置定时器
  140. virtual bool SetGameTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter, CImmediateGroup *pMatch);
  141. //发送函数
  142. public:
  143. //发送数据
  144. virtual bool SendMatchInfo(IServerUserItem * pIServerUserItem);
  145. //发送信息
  146. virtual bool SendGroupUserMessage(LPCTSTR pStrMessage, CImmediateGroup *pMatch);
  147. //发送分数
  148. virtual bool SendGroupUserScore(IServerUserItem * pIServerUserItem, CImmediateGroup *pMatch);
  149. //发送状态
  150. virtual bool SendGroupUserStatus(IServerUserItem * pIServerUserItem, CImmediateGroup *pMatch);
  151. //发送消息
  152. virtual bool SendGameMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType);
  153. //发送消息
  154. virtual bool SendRoomMessage(IServerUserItem * pIServerUserItem, LPCTSTR lpszMessage, WORD wMessageType);
  155. //发送数据
  156. virtual bool SendGroupData(WORD wMainCmdID, WORD wSubCmdID, void * pData, WORD wDataSize, CImmediateGroup *pMatch);
  157. //发送数据
  158. virtual bool SendData(IServerUserItem * pIServerUserItem, WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize);
  159. //功能函数
  160. public:
  161. //插入空的桌子
  162. virtual void InsertNullTable();
  163. //获取机器人
  164. virtual IAndroidUserItem * GetFreeAndroidUserItem();
  165. //用户淘汰
  166. virtual bool OnUserOut(IServerUserItem *pUserItem, LPCTSTR szReason, WORD wLen, WORD wRank, CImmediateGroup *pMatch);
  167. //内部功能
  168. private:
  169. //获取空的桌子
  170. WORD GetNullTable();
  171. //删除用户
  172. bool DeleteUserItem(DWORD dwUserIndex);
  173. //移除参赛用户
  174. bool RemoveMatchUserItem(IServerUserItem *pIServerUserItem);
  175. //写入奖励
  176. bool WriteUserAward(IServerUserItem *pIServerUserItem, tagMatchRankInfo * pMatchRankInfo);
  177. };
  178. #endif