诸暨麻将添加redis
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

342 行
9.0 KiB

  1. #include "StdAfx.h"
  2. #include "UserTaskManager.h"
  3. //////////////////////////////////////////////////////////////////////////////////
  4. //构造函数
  5. CUserTaskManager::CUserTaskManager()
  6. {
  7. //初始化表
  8. m_TaskParameterMap.InitHashTable(TASK_MAX_COUNT + 1);
  9. }
  10. //析构函数
  11. CUserTaskManager::~CUserTaskManager()
  12. {
  13. //删除缓冲
  14. for (INT_PTR nIndex = 0; nIndex < m_UserTaskEntryBuffer.GetCount(); nIndex++)
  15. {
  16. SafeDelete(m_UserTaskEntryBuffer[nIndex]);
  17. }
  18. //删除缓冲
  19. for (INT_PTR nIndex = 0; nIndex < m_TaskParameterBuffer.GetCount(); nIndex++)
  20. {
  21. SafeDelete(m_TaskParameterBuffer[nIndex]);
  22. }
  23. //变量定义
  24. WORD wKey = 0;
  25. DWORD dwKey = 0;
  26. POSITION Position = NULL;
  27. //删除参数
  28. tagTaskParameter * pTaskParameter = NULL;
  29. Position = m_TaskParameterMap.GetStartPosition();
  30. while (Position != NULL)
  31. {
  32. m_TaskParameterMap.GetNextAssoc(Position, wKey, pTaskParameter);
  33. SafeDelete(pTaskParameter);
  34. }
  35. //删除任务
  36. tagUserTaskEntry * pUserTaskEntry = NULL;
  37. Position = m_UserTaskEntryMap.GetStartPosition();
  38. while (Position != NULL)
  39. {
  40. m_UserTaskEntryMap.GetNextAssoc(Position, dwKey, pUserTaskEntry);
  41. SafeDelete(pUserTaskEntry);
  42. }
  43. //移除元素
  44. m_TaskParameterMap.RemoveAll();
  45. m_UserTaskEntryMap.RemoveAll();
  46. m_TaskParameterBuffer.RemoveAll();
  47. m_UserTaskEntryBuffer.RemoveAll();
  48. }
  49. //接口查询
  50. VOID * CUserTaskManager::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
  51. {
  52. QUERYINTERFACE(IUserTaskManagerSink, Guid, dwQueryVer);
  53. QUERYINTERFACE_IUNKNOWNEX(IUserTaskManagerSink, Guid, dwQueryVer);
  54. return NULL;
  55. }
  56. //添加参数
  57. bool CUserTaskManager::AddTaskParameter(tagTaskParameter TaskParameter[], WORD wPatemterCount)
  58. {
  59. //参数校验
  60. if (wPatemterCount == 0 || TaskParameter == NULL) return false;
  61. //变量定义
  62. for (WORD i = 0; i<wPatemterCount; i++)
  63. {
  64. //变量定义
  65. tagTaskParameter * pTaskParameter = NULL;
  66. //查找现存
  67. if (m_TaskParameterBuffer.GetCount()>0)
  68. {
  69. //查找任务
  70. for (INT_PTR nIndex = 0; nIndex < m_TaskParameterBuffer.GetCount(); nIndex++)
  71. {
  72. if (m_TaskParameterBuffer[nIndex]->wTaskID == TaskParameter[i].wTaskID)
  73. {
  74. pTaskParameter = m_TaskParameterBuffer[nIndex];
  75. m_TaskParameterBuffer.RemoveAt(nIndex);
  76. break;
  77. }
  78. }
  79. }
  80. //创建对象
  81. if (pTaskParameter == NULL)
  82. {
  83. try
  84. {
  85. pTaskParameter = new tagTaskParameter;
  86. if (pTaskParameter == NULL) throw(TEXT("内存不足!"));
  87. }
  88. catch (...)
  89. {
  90. ASSERT(FALSE);
  91. break;
  92. }
  93. }
  94. //拷贝数据
  95. CopyMemory(pTaskParameter, &TaskParameter[i], sizeof(tagTaskParameter));
  96. //保存任务
  97. m_TaskParameterMap[pTaskParameter->wTaskID] = pTaskParameter;
  98. }
  99. return true;
  100. }
  101. //移除参数
  102. VOID CUserTaskManager::RemoveTaskParameter()
  103. {
  104. //变量定义
  105. WORD wKey = 0;
  106. POSITION Position = NULL;
  107. //移除参数
  108. tagTaskParameter * pTaskParameter = NULL;
  109. Position = m_TaskParameterMap.GetStartPosition();
  110. while (Position != NULL)
  111. {
  112. m_TaskParameterMap.GetNextAssoc(Position, wKey, pTaskParameter);
  113. m_TaskParameterBuffer.Add(pTaskParameter);
  114. }
  115. //移除严肃
  116. m_TaskParameterMap.RemoveAll();
  117. }
  118. //查找参数
  119. tagTaskParameter * CUserTaskManager::SearchTaskParameter(WORD wTaskID)
  120. {
  121. //变量定义
  122. tagTaskParameter * pTaskParameter = NULL;
  123. m_TaskParameterMap.Lookup(wTaskID, pTaskParameter);
  124. return pTaskParameter;
  125. }
  126. //枚举参数
  127. tagTaskParameter * CUserTaskManager::EnumTaskParameter(POSITION & Position)
  128. {
  129. //参数调整
  130. if (Position == NULL) Position = m_TaskParameterMap.GetStartPosition();
  131. if (Position == NULL) return NULL;
  132. //变量定义
  133. WORD wKey = 0;
  134. tagTaskParameter * pTaskParameter = NULL;
  135. m_TaskParameterMap.GetNextAssoc(Position, wKey, pTaskParameter);
  136. return pTaskParameter;
  137. }
  138. //设置任务
  139. VOID CUserTaskManager::SetUserTaskInfo(DWORD dwUserID, tagUserTaskInfo UserTaskInfo[], WORD wTaskCount)
  140. {
  141. //参数校验
  142. ASSERT(wTaskCount > 0 && UserTaskInfo != NULL);
  143. if (wTaskCount == 0 || UserTaskInfo == NULL) return;
  144. //变量定义
  145. tagUserTaskEntry * pUserTaskEntry = NULL;
  146. tagUserTaskEntry * pUserTaskEntryHead = NULL;
  147. //查找对象
  148. m_UserTaskEntryMap.Lookup(dwUserID, pUserTaskEntryHead);
  149. //查找链表尾部
  150. while (pUserTaskEntryHead != NULL && pUserTaskEntryHead->pNextTaskEntry)
  151. {
  152. pUserTaskEntryHead = pUserTaskEntryHead->pNextTaskEntry;
  153. }
  154. //变量定义
  155. for (WORD i = 0; i < wTaskCount; i++)
  156. {
  157. //创建对象
  158. pUserTaskEntry = CreateUserTaskEntry();
  159. if (pUserTaskEntry == NULL) break;
  160. //设置对象
  161. pUserTaskEntry->cbTaskStatus = UserTaskInfo[i].cbTaskStatus;
  162. pUserTaskEntry->wTaskProgress = UserTaskInfo[i].wTaskProgress;
  163. pUserTaskEntry->dwResidueTime = UserTaskInfo[i].dwResidueTime;
  164. pUserTaskEntry->dwLastUpdateTime = UserTaskInfo[i].dwLastUpdateTime;
  165. //查找参数
  166. m_TaskParameterMap.Lookup(UserTaskInfo[i].wTaskID, pUserTaskEntry->pTaskParameter);
  167. //链接任务
  168. if (pUserTaskEntryHead != NULL)
  169. {
  170. pUserTaskEntryHead->pNextTaskEntry = pUserTaskEntry;
  171. pUserTaskEntryHead = pUserTaskEntryHead->pNextTaskEntry;
  172. }
  173. //设置链表头
  174. if (i == 0 && pUserTaskEntryHead == NULL)
  175. {
  176. pUserTaskEntryHead = pUserTaskEntry;
  177. m_UserTaskEntryMap[dwUserID] = pUserTaskEntryHead;
  178. }
  179. }
  180. return;
  181. }
  182. //移除任务
  183. VOID CUserTaskManager::RemoveUserTask(DWORD dwUserID)
  184. {
  185. //查找对象
  186. tagUserTaskEntry * pUserTaskEntry = NULL;
  187. if (m_UserTaskEntryMap.Lookup(dwUserID, pUserTaskEntry) == TRUE)
  188. {
  189. //添加到缓冲
  190. while (pUserTaskEntry != NULL)
  191. {
  192. m_UserTaskEntryBuffer.Add(pUserTaskEntry);
  193. pUserTaskEntry = pUserTaskEntry->pNextTaskEntry;
  194. }
  195. //移除对象
  196. m_UserTaskEntryMap.RemoveKey(dwUserID);
  197. }
  198. }
  199. //获取任务
  200. tagUserTaskEntry * CUserTaskManager::GetUserTaskEntry(DWORD dwUserID)
  201. {
  202. //变量定义
  203. tagUserTaskEntry * pUserTaskEntry = NULL;
  204. m_UserTaskEntryMap.Lookup(dwUserID, pUserTaskEntry);
  205. return pUserTaskEntry;
  206. }
  207. //获取任务
  208. tagUserTaskEntry * CUserTaskManager::GetUserTaskEntry(DWORD dwUserID, BYTE cbTaskStatus)
  209. {
  210. //变量定义
  211. tagUserTaskEntry * pUserTaskEntry = NULL;
  212. m_UserTaskEntryMap.Lookup(dwUserID, pUserTaskEntry);
  213. if (pUserTaskEntry == NULL) return NULL;
  214. //变量定义
  215. tagUserTaskEntry * pUserTaskEntryHead = NULL;
  216. tagUserTaskEntry * pUserTaskEntryLink = NULL;
  217. //遍历链表
  218. while (pUserTaskEntry != NULL)
  219. {
  220. if (pUserTaskEntry->cbTaskStatus == cbTaskStatus)
  221. {
  222. if (pUserTaskEntryHead == NULL)
  223. {
  224. pUserTaskEntryHead = pUserTaskEntry;
  225. pUserTaskEntryLink = pUserTaskEntryHead;
  226. }
  227. else
  228. {
  229. pUserTaskEntryLink->pNextStatusEntry = pUserTaskEntry;
  230. pUserTaskEntryLink = pUserTaskEntryLink->pNextStatusEntry;
  231. }
  232. pUserTaskEntryLink->pNextStatusEntry = NULL;
  233. }
  234. pUserTaskEntry = pUserTaskEntry->pNextTaskEntry;
  235. }
  236. return pUserTaskEntryHead;
  237. }
  238. //创建任务
  239. tagUserTaskEntry * CUserTaskManager::CreateUserTaskEntry()
  240. {
  241. //变量定义
  242. tagUserTaskEntry * pUserTaskEntry = NULL;
  243. //查找缓冲
  244. if (m_UserTaskEntryBuffer.GetCount() > 0)
  245. {
  246. pUserTaskEntry = m_UserTaskEntryBuffer[0];
  247. m_UserTaskEntryBuffer.RemoveAt(0);
  248. }
  249. //创建任务
  250. if (pUserTaskEntry == NULL)
  251. {
  252. try
  253. {
  254. pUserTaskEntry = new tagUserTaskEntry;
  255. if (pUserTaskEntry == NULL) throw TEXT("内存不足,资源申请失败!");
  256. }
  257. catch (...)
  258. {
  259. ASSERT(FALSE);
  260. SafeDelete(pUserTaskEntry);
  261. }
  262. }
  263. //初始内存
  264. ZeroMemory(pUserTaskEntry, sizeof(tagUserTaskEntry));
  265. return pUserTaskEntry;
  266. }
  267. //重置对象
  268. VOID CUserTaskManager::ResetTaskManager()
  269. {
  270. //移除参数
  271. RemoveTaskParameter();
  272. //变量定义
  273. DWORD dwKey = 0;
  274. POSITION Position = NULL;
  275. //移除任务
  276. tagUserTaskEntry * pUserTaskEntry = NULL;
  277. Position = m_UserTaskEntryMap.GetStartPosition();
  278. while (Position != NULL)
  279. {
  280. m_UserTaskEntryMap.GetNextAssoc(Position, dwKey, pUserTaskEntry);
  281. m_UserTaskEntryBuffer.Add(pUserTaskEntry);
  282. }
  283. //移除元素
  284. m_TaskParameterMap.RemoveAll();
  285. m_UserTaskEntryMap.RemoveAll();
  286. }
  287. //////////////////////////////////////////////////////////////////////////////////