<?php

namespace App\Tasks;

use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Support\Facades\Log;

class SendNoticeTask extends Task
{
    private $data;
    private $PushTask = false;
    private $TaskNum;
    public function __construct($keyword, $data, $toUser, $TaskNum=1, $is_ignore=0)
    {
        if (is_array($data)) {
            $data = json_encode($data);
        }
        $this->data = [
            'data' => $data,
            'touser'=> $toUser,
            'is_ignore' => $is_ignore,
            'keyword' => $keyword
        ];
        $this->TaskNum = $TaskNum;
    }
    // 处理任务的逻辑,运行在Task进程中,不能投递任务
    public function handle()
    {
//        return true;
        $time = date('H');
        if (20 < $time || $time < 9) {//不发通知时段处理
            return true;
        }

        try {
            $Url = config('website.IC_AUTH_API').'/hprose/HttpSendMsg';
            $res = json_decode(reportCurl($Url, $this->data, true, ['MsgToken:fg368hjk4567wtbk8']), true);
            if (!isset($res['errcode']) || $res['errcode'] !== 0) {
                ErrorLog(ErrorCode(001, 9), '消息系统消息发送失败');
                $this->PushTask = true;
            }
            return true;
        } catch (\Exception $e) {
            SendErrMsg($e);
            ErrorLog(ErrorCode(001, 9), '消息发送出现致命错误');
            $this->PushTask = true;//重试任务
        }
    }

    public function finish()
    {
        //消息推送失败,任务重试,第一次为4分钟后,第二次为10分钟后,第三次为18分钟后
        if ($this->PushTask === true && $this->TaskNum < 4) {
            $this->TaskNum ++;
            $task = new SendNoticeTask(
                $this->data['keyword'],
                $this->data['data'],
                $this->data['touser'],
                $this->TaskNum,
                $this->data['is_ignore']
            );
            $task -> delay(60*2*$this->TaskNum);
            Task::deliver($task);
        }
    }
}