诸暨麻将添加redis
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 
 

238 рядки
5.8 KiB

  1. #include "StdAfx.h"
  2. #include "AfxTempl.h"
  3. #include "LockTimeMatch.h"
  4. #include "ImmediateMatch.h"
  5. #include "MatchServiceManager.h"
  6. //////////////////////////////////////////////////////////////////////////
  7. //构造函数
  8. CMatchServiceManager::CMatchServiceManager(void)
  9. {
  10. //状态变量
  11. m_bIsService = false;
  12. //设置变量
  13. m_pIGameMatchItem = NULL;
  14. return;
  15. }
  16. //析构函数
  17. CMatchServiceManager::~CMatchServiceManager(void)
  18. {
  19. //释放指针
  20. if (m_pIGameMatchItem != NULL) SafeDelete(m_pIGameMatchItem);
  21. }
  22. //停止服务
  23. bool CMatchServiceManager::StopService()
  24. {
  25. //状态判断
  26. ASSERT(m_bIsService == true);
  27. //设置状态
  28. m_bIsService = false;
  29. //释放指针
  30. if (m_pIGameMatchItem != NULL) SafeRelease(m_pIGameMatchItem);
  31. return true;
  32. }
  33. //启动服务
  34. bool CMatchServiceManager::StartService()
  35. {
  36. //状态判断
  37. ASSERT(m_bIsService == false);
  38. if (m_bIsService == true) return false;
  39. //设置状态
  40. m_bIsService = true;
  41. //启动通知
  42. if (m_pIGameMatchItem != NULL) m_pIGameMatchItem->OnStartService();
  43. return true;
  44. }
  45. //接口查询
  46. void * CMatchServiceManager::QueryInterface(const IID & Guid, DWORD dwQueryVer)
  47. {
  48. QUERYINTERFACE(IMatchServiceManager, Guid, dwQueryVer);
  49. QUERYINTERFACE_IUNKNOWNEX(IMatchServiceManager, Guid, dwQueryVer);
  50. return NULL;
  51. }
  52. //创建比赛
  53. bool CMatchServiceManager::CreateGameMatch(BYTE cbMatchType)
  54. {
  55. //接口判断
  56. ASSERT(m_pIGameMatchItem == NULL);
  57. if (m_pIGameMatchItem != NULL) return false;
  58. try
  59. {
  60. //定时赛
  61. if (cbMatchType == MATCH_TYPE_LOCKTIME)
  62. {
  63. m_pIGameMatchItem = new CLockTimeMatch();
  64. if (m_pIGameMatchItem == NULL) throw TEXT("定时赛创建失败!");
  65. }
  66. //即时赛
  67. if (cbMatchType == MATCH_TYPE_IMMEDIATE)
  68. {
  69. m_pIGameMatchItem = new CImmediateMatch();
  70. if (m_pIGameMatchItem == NULL) throw TEXT("即时赛创建失败!");
  71. }
  72. }
  73. catch (...)
  74. {
  75. ASSERT(FALSE);
  76. return false;
  77. }
  78. return m_pIGameMatchItem != NULL;
  79. }
  80. //初始化桌子框架
  81. bool CMatchServiceManager::BindTableFrame(ITableFrame * pTableFrame, WORD wTableID)
  82. {
  83. ASSERT(m_pIGameMatchItem != NULL);
  84. if (m_pIGameMatchItem != NULL)
  85. {
  86. return m_pIGameMatchItem->BindTableFrame(pTableFrame, wTableID);
  87. }
  88. return true;
  89. }
  90. //初始化接口
  91. bool CMatchServiceManager::InitMatchInterface(tagMatchManagerParameter & MatchManagerParameter)
  92. {
  93. ASSERT(m_pIGameMatchItem != NULL);
  94. if (m_pIGameMatchItem != NULL)
  95. {
  96. return m_pIGameMatchItem->InitMatchInterface(MatchManagerParameter);
  97. }
  98. return true;
  99. }
  100. //时间事件
  101. bool CMatchServiceManager::OnEventTimer(DWORD dwTimerID, WPARAM dwBindParameter)
  102. {
  103. ASSERT(m_pIGameMatchItem != NULL);
  104. if (m_pIGameMatchItem != NULL)
  105. {
  106. return m_pIGameMatchItem->OnEventTimer(dwTimerID, dwBindParameter);
  107. }
  108. return true;
  109. }
  110. //数据库事件
  111. bool CMatchServiceManager::OnEventDataBase(WORD wRequestID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize)
  112. {
  113. ASSERT(m_pIGameMatchItem != NULL);
  114. if (m_pIGameMatchItem != NULL)
  115. {
  116. return m_pIGameMatchItem->OnEventDataBase(wRequestID, pIServerUserItem, pData, wDataSize);
  117. }
  118. return true;
  119. }
  120. //命令消息
  121. bool CMatchServiceManager::OnEventSocketMatch(WORD wSubCmdID, VOID * pData, WORD wDataSize, IServerUserItem * pIServerUserItem, DWORD dwSocketID)
  122. {
  123. ASSERT(m_pIGameMatchItem != NULL);
  124. if (m_pIGameMatchItem != NULL)
  125. {
  126. return m_pIGameMatchItem->OnEventSocketMatch(wSubCmdID, pData, wDataSize, pIServerUserItem, dwSocketID);
  127. }
  128. return true;
  129. }
  130. //用户登录
  131. bool CMatchServiceManager::OnEventUserLogon(IServerUserItem * pIServerUserItem)
  132. {
  133. ASSERT(m_pIGameMatchItem != NULL);
  134. if (m_pIGameMatchItem != NULL)
  135. {
  136. return m_pIGameMatchItem->OnEventUserLogon(pIServerUserItem);
  137. }
  138. return true;
  139. }
  140. //用户登出
  141. bool CMatchServiceManager::OnEventUserLogout(IServerUserItem * pIServerUserItem)
  142. {
  143. ASSERT(m_pIGameMatchItem != NULL);
  144. if (m_pIGameMatchItem != NULL)
  145. {
  146. return m_pIGameMatchItem->OnEventUserLogout(pIServerUserItem);
  147. }
  148. return true;
  149. }
  150. //进入比赛
  151. bool CMatchServiceManager::OnEventEnterMatch(DWORD dwSocketID, VOID* pData, DWORD dwUserIP, bool bIsMobile)
  152. {
  153. ASSERT(m_pIGameMatchItem != NULL);
  154. if (m_pIGameMatchItem != NULL)
  155. {
  156. return m_pIGameMatchItem->OnEventEnterMatch(dwSocketID, pData, dwUserIP, bIsMobile);
  157. }
  158. return true;
  159. }
  160. //用户参赛
  161. bool CMatchServiceManager::OnEventUserJoinMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, DWORD dwSocketID)
  162. {
  163. ASSERT(m_pIGameMatchItem != NULL);
  164. if (m_pIGameMatchItem != NULL)
  165. {
  166. return m_pIGameMatchItem->OnEventUserJoinMatch(pIServerUserItem, cbReason, dwSocketID);
  167. }
  168. return true;
  169. }
  170. //用户退赛
  171. bool CMatchServiceManager::OnEventUserQuitMatch(IServerUserItem * pIServerUserItem, BYTE cbReason, WORD *pBestRank, DWORD dwContextID)
  172. {
  173. ASSERT(m_pIGameMatchItem != NULL);
  174. if (m_pIGameMatchItem != NULL)
  175. {
  176. return m_pIGameMatchItem->OnEventUserQuitMatch(pIServerUserItem, cbReason, pBestRank, dwContextID);
  177. }
  178. return true;
  179. }
  180. //用户接口
  181. IUnknownEx * CMatchServiceManager::GetServerUserItemSink()
  182. {
  183. ASSERT(m_pIGameMatchItem != NULL);
  184. if (m_pIGameMatchItem != NULL)
  185. {
  186. return QUERY_OBJECT_PTR_INTERFACE(m_pIGameMatchItem, IServerUserItemSink);
  187. }
  188. return NULL;
  189. }
  190. //////////////////////////////////////////////////////////////////////////////////
  191. //组件创建函数
  192. DECLARE_CREATE_MODULE(MatchServiceManager);
  193. //////////////////////////////////////////////////////////////////////////