SdkFire.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * Sdk.php UTF-8
  4. * Sdk队列消费
  5. *
  6. * @date : 2018/5/30 16:28
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huolib\queue\job;
  13. use huolib\queue\constant\EventConst;
  14. use huolib\queue\controller\sdk\App;
  15. use huolib\queue\controller\sdk\Mem as MemCon;
  16. use huolib\queue\controller\sdk\Order as OrderCon;
  17. use huolib\queue\controller\sdk\Role as RoleCon;
  18. use huolib\queue\request\Channel;
  19. use huolib\queue\request\Common;
  20. use huolib\queue\request\Crash;
  21. use huolib\queue\request\Device;
  22. use huolib\queue\request\Game;
  23. use huolib\queue\request\Mem;
  24. use huolib\queue\request\Order;
  25. use huolib\queue\request\Role;
  26. use think\queue\Job;
  27. class SdkFire extends Fire {
  28. static $g_i = 0;
  29. /**
  30. * fire方法是消息队列默认调用的方法
  31. *
  32. * @param Job $job 当前的任务对象
  33. * @param array|mixed $data 发布任务时自定义的数据
  34. */
  35. public function fire(Job $job, $data) {
  36. self::$g_i++;
  37. $_is_job_done = $this->doJob($data);
  38. $runtime = round(microtime(true) - THINK_START_TIME, 10);
  39. // echo $runtime.' '.self::$g_i;
  40. if ($_is_job_done) {
  41. //如果任务执行成功, 记得删除任务
  42. $job->delete();
  43. // print("<info>Hello Job has been done and deleted"."</info>\n");
  44. } else {
  45. if ($job->attempts() > 3) {
  46. //通过这个方法可以检查这个任务已经重试了几次了
  47. // print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
  48. $job->delete();
  49. // 也可以重新发布这个任务
  50. // print("<info>Hello Job will be availabe again after 2s."."</info>\n");
  51. //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
  52. }
  53. }
  54. }
  55. /**
  56. * 根据消息中的数据进行实际的业务处理
  57. *
  58. * @param array $data 发布任务时自定义的数据
  59. *
  60. * @return bool 任务执行的结果
  61. */
  62. public function doJob($data) {
  63. // try {
  64. $_com_rq = $this->setCommonData($data);
  65. $_channel_rq = $this->setChannelData($data);
  66. $_device_rq = $this->setDeviceData($data);
  67. $_game_rq = $this->setGameData($data);
  68. $_mem_rq = $this->setMemData($data);
  69. $_order_rq = $this->setOrderData($data);
  70. $_role_rq = $this->setRoleData($data);
  71. $_crash_rq = $this->setCrashData($data);
  72. switch ($_com_rq->getEvent()) {
  73. case EventConst::EVENT_APP_ACTIVATION:
  74. /* APP激活 */
  75. $_rs = (new App())->activation($_com_rq, $_device_rq, $_game_rq, $_channel_rq);
  76. break;
  77. case EventConst::EVENT_APP_STARTUP:
  78. /* APP启动 */
  79. $_rs = (new App())->startup($_com_rq, $_device_rq, $_game_rq, $_channel_rq);
  80. break;
  81. case EventConst::EVENT_APP_CRASH:
  82. /* APP崩溃 */
  83. $_rs = (new App())->crash($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_crash_rq);
  84. break;
  85. case EventConst::EVENT_APP_HEARTBEAT:
  86. /* APP心跳 */
  87. $_rs = (new App())->heartbeat($_com_rq, $_device_rq, $_game_rq, $_channel_rq);
  88. break;
  89. case EventConst::EVENT_MEM_REG:
  90. /* 玩家创建 */
  91. $_rs = (new MemCon())->create($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq);
  92. break;
  93. case EventConst::EVENT_MEM_LOGIN:
  94. $_rs = (new MemCon())->online($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq);
  95. break;
  96. case EventConst::EVENT_MEM_LOGOUT:
  97. /* 玩家登出 */
  98. $_rs = (new MemCon())->offline($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq);
  99. break;
  100. case EventConst::EVENT_ROLE_CREATE:
  101. /* 角色创建 */
  102. $_rs = (new RoleCon())->create($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq);
  103. break;
  104. case EventConst::EVENT_ROLE_ONLINE:
  105. /* 角色登陆 */
  106. $_rs = (new RoleCon())->online($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq);
  107. break;
  108. case EventConst::EVENT_ROLE_LEVELUP:
  109. /* 角色升级 */
  110. $_rs = (new RoleCon())->levelup(
  111. $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq
  112. );
  113. break;
  114. case EventConst::EVENT_ROLE_OFFLINE:
  115. /* 角色登出 */
  116. $_rs = (new RoleCon())->offline(
  117. $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq
  118. );
  119. break;
  120. case EventConst::EVENT_ORDER_CREATE:
  121. $_rs = (new OrderCon())->create(
  122. /* 充值下单 */
  123. $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq, $_order_rq
  124. );
  125. break;
  126. case EventConst::EVENT_ORDER_SUCCESS:
  127. /* 充值成功 */
  128. $_rs = (new OrderCon())->success(
  129. $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq, $_order_rq
  130. );
  131. break;
  132. default:
  133. $_rs = false;
  134. }
  135. return $_rs;
  136. // } catch (\Exception $e) {
  137. // Log::write(
  138. // 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'&data='.json_encode($data)
  139. // .'&error_code='.$e->getCode().'&msg='.$e->getMessage(), Log::ERROR
  140. // );
  141. //
  142. // return false;
  143. // }
  144. }
  145. /**
  146. * 设置公共参数
  147. *
  148. * @param $data
  149. *
  150. * @return Common
  151. */
  152. private function setCommonData($data) {
  153. $_com_rq = new Common();
  154. $_com_rq->setData($data);
  155. return $_com_rq;
  156. }
  157. /**
  158. * 设置渠道数据
  159. *
  160. * @param $data
  161. *
  162. * @return Channel
  163. */
  164. private function setChannelData($data) {
  165. $_data = isset($data['agent']) ? $data['agent'] : [];
  166. $_channel_rq = new Channel();
  167. $_channel_rq->setData($_data);
  168. return $_channel_rq;
  169. }
  170. /**
  171. * 设置设备数据
  172. *
  173. * @param $data
  174. *
  175. * @return Device
  176. */
  177. private function setDeviceData($data) {
  178. $_data = isset($data['device']) ? $data['device'] : [];
  179. $_device_rq = new Device();
  180. $_device_rq->setData($_data);
  181. return $_device_rq;
  182. }
  183. /**
  184. * 设置游戏数据
  185. *
  186. * @param $data
  187. *
  188. * @return Game
  189. */
  190. private function setGameData($data) {
  191. $_data = isset($data['game']) ? $data['game'] : [];
  192. $_game_rq = new Game();
  193. $_game_rq->setData($_data);
  194. return $_game_rq;
  195. }
  196. /**
  197. * 设置玩家数据
  198. *
  199. * @param $data
  200. *
  201. * @return Mem
  202. */
  203. private function setMemData($data) {
  204. $_data = isset($data['mem']) ? $data['mem'] : [];
  205. $_mem_rq = new Mem();
  206. $_mem_rq->setData($_data);
  207. return $_mem_rq;
  208. }
  209. /**
  210. * 设置订单数据
  211. *
  212. * @param $data
  213. *
  214. * @return Order
  215. */
  216. private function setOrderData($data) {
  217. $_data = isset($data['order']) ? $data['order'] : [];
  218. $_order_rq = new Order();
  219. $_order_rq->setData($_data);
  220. return $_order_rq;
  221. }
  222. /**
  223. * 设置角色数据
  224. *
  225. * @param $data
  226. *
  227. * @return Role
  228. */
  229. private function setRoleData($data) {
  230. $_data = isset($data['role']) ? $data['role'] : [];
  231. $_role_rq = new Role();
  232. $_role_rq->setData($_data);
  233. return $_role_rq;
  234. }
  235. /**
  236. * 设置奔溃数据
  237. *
  238. * @param $data
  239. *
  240. * @return Crash
  241. */
  242. private function setCrashData($data) {
  243. $_data = isset($data['crash']) ? $data['crash'] : [];
  244. $_crash_rq = new Crash();
  245. $_crash_rq->setData($_data);
  246. return $_crash_rq;
  247. }
  248. }