* @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;
}
}