* @version : HUOSDK 8.0 */ namespace huolib\queue\job; use huolib\queue\constant\EventConst; use huolib\queue\controller\sdk\App; use huolib\queue\controller\sdk\Mem as MemCon; use huolib\queue\controller\sdk\Order as OrderCon; use huolib\queue\controller\sdk\Role as RoleCon; use huolib\queue\request\Channel; use huolib\queue\request\Common; use huolib\queue\request\Crash; use huolib\queue\request\Device; use huolib\queue\request\Game; use huolib\queue\request\Mem; use huolib\queue\request\Order; use huolib\queue\request\Role; use think\queue\Job; class SdkFire extends Fire { static $g_i = 0; /** * fire方法是消息队列默认调用的方法 * * @param Job $job 当前的任务对象 * @param array|mixed $data 发布任务时自定义的数据 */ public function fire(Job $job, $data) { self::$g_i++; $_is_job_done = $this->doJob($data); $runtime = round(microtime(true) - THINK_START_TIME, 10); // echo $runtime.' '.self::$g_i; if ($_is_job_done) { //如果任务执行成功, 记得删除任务 $job->delete(); // print("Hello Job has been done and deleted"."\n"); } else { if ($job->attempts() > 3) { //通过这个方法可以检查这个任务已经重试了几次了 // print("Hello Job has been retried more than 3 times!"."\n"); $job->delete(); // 也可以重新发布这个任务 // print("Hello Job will be availabe again after 2s."."\n"); //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行 } } } /** * 根据消息中的数据进行实际的业务处理 * * @param array $data 发布任务时自定义的数据 * * @return bool 任务执行的结果 */ public function doJob($data) { // try { $_com_rq = $this->setCommonData($data); $_channel_rq = $this->setChannelData($data); $_device_rq = $this->setDeviceData($data); $_game_rq = $this->setGameData($data); $_mem_rq = $this->setMemData($data); $_order_rq = $this->setOrderData($data); $_role_rq = $this->setRoleData($data); $_crash_rq = $this->setCrashData($data); switch ($_com_rq->getEvent()) { case EventConst::EVENT_APP_ACTIVATION: /* APP激活 */ $_rs = (new App())->activation($_com_rq, $_device_rq, $_game_rq, $_channel_rq); break; case EventConst::EVENT_APP_STARTUP: /* APP启动 */ $_rs = (new App())->startup($_com_rq, $_device_rq, $_game_rq, $_channel_rq); break; case EventConst::EVENT_APP_CRASH: /* APP崩溃 */ $_rs = (new App())->crash($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_crash_rq); break; case EventConst::EVENT_APP_HEARTBEAT: /* APP心跳 */ $_rs = (new App())->heartbeat($_com_rq, $_device_rq, $_game_rq, $_channel_rq); break; case EventConst::EVENT_MEM_REG: /* 玩家创建 */ $_rs = (new MemCon())->create($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq); break; case EventConst::EVENT_MEM_LOGIN: $_rs = (new MemCon())->online($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq); break; case EventConst::EVENT_MEM_LOGOUT: /* 玩家登出 */ $_rs = (new MemCon())->offline($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq); break; case EventConst::EVENT_ROLE_CREATE: /* 角色创建 */ $_rs = (new RoleCon())->create($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq); break; case EventConst::EVENT_ROLE_ONLINE: /* 角色登陆 */ $_rs = (new RoleCon())->online($_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq); break; case EventConst::EVENT_ROLE_LEVELUP: /* 角色升级 */ $_rs = (new RoleCon())->levelup( $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq ); break; case EventConst::EVENT_ROLE_OFFLINE: /* 角色登出 */ $_rs = (new RoleCon())->offline( $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq ); break; case EventConst::EVENT_ORDER_CREATE: $_rs = (new OrderCon())->create( /* 充值下单 */ $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq, $_order_rq ); break; case EventConst::EVENT_ORDER_SUCCESS: /* 充值成功 */ $_rs = (new OrderCon())->success( $_com_rq, $_device_rq, $_game_rq, $_channel_rq, $_mem_rq, $_role_rq, $_order_rq ); break; default: $_rs = false; } return $_rs; // } catch (\Exception $e) { // Log::write( // 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'&data='.json_encode($data) // .'&error_code='.$e->getCode().'&msg='.$e->getMessage(), Log::ERROR // ); // // return false; // } } /** * 设置公共参数 * * @param $data * * @return Common */ private function setCommonData($data) { $_com_rq = new Common(); $_com_rq->setData($data); return $_com_rq; } /** * 设置渠道数据 * * @param $data * * @return Channel */ private function setChannelData($data) { $_data = isset($data['agent']) ? $data['agent'] : []; $_channel_rq = new Channel(); $_channel_rq->setData($_data); return $_channel_rq; } /** * 设置设备数据 * * @param $data * * @return Device */ private function setDeviceData($data) { $_data = isset($data['device']) ? $data['device'] : []; $_device_rq = new Device(); $_device_rq->setData($_data); return $_device_rq; } /** * 设置游戏数据 * * @param $data * * @return Game */ private function setGameData($data) { $_data = isset($data['game']) ? $data['game'] : []; $_game_rq = new Game(); $_game_rq->setData($_data); return $_game_rq; } /** * 设置玩家数据 * * @param $data * * @return Mem */ private function setMemData($data) { $_data = isset($data['mem']) ? $data['mem'] : []; $_mem_rq = new Mem(); $_mem_rq->setData($_data); return $_mem_rq; } /** * 设置订单数据 * * @param $data * * @return Order */ private function setOrderData($data) { $_data = isset($data['order']) ? $data['order'] : []; $_order_rq = new Order(); $_order_rq->setData($_data); return $_order_rq; } /** * 设置角色数据 * * @param $data * * @return Role */ private function setRoleData($data) { $_data = isset($data['role']) ? $data['role'] : []; $_role_rq = new Role(); $_role_rq->setData($_data); return $_role_rq; } /** * 设置奔溃数据 * * @param $data * * @return Crash */ private function setCrashData($data) { $_data = isset($data['crash']) ? $data['crash'] : []; $_crash_rq = new Crash(); $_crash_rq->setData($_data); return $_crash_rq; } }