<?php


namespace EasySwoole\EasySwoole;


use App\Crontab\ElasticSearchGoodsNewCrontab;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\Crontab\Crontab;
use App\Crontab\BalanceCrontab;
use App\Crontab\XcxWarningCrontab;
use EasySwoole\ORM\DbManager;
use EasySwoole\ORM\Db\Connection;
use EasySwoole\ORM\Db\Config;
use App\Crontab\ElasticSearchGoodsCrontab;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');

        //获取系统配置
        $mysql_conf = \EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL');
        $config = new Config();
        $config->setDatabase($mysql_conf['database']);
        $config->setUser($mysql_conf['user']);
        $config->setPassword($mysql_conf['password']);
        $config->setHost($mysql_conf['host']);
        $config->setTimeout($mysql_conf['timeout']); // 超时时间
        //连接池配置
        $config->setGetObjectTimeout($mysql_conf['getObjectTimeout']); //设置获取连接池对象超时时间
        $config->setIntervalCheckTime($mysql_conf['intervalCheckTime']); //设置检测连接存活执行回收和创建的周期
        $config->setMaxIdleTime($mysql_conf['maxIdleTime']); //连接池对象最大闲置时间(秒)
        $config->setMinObjectNum($mysql_conf['minObjectNum']); //设置最小连接池存在连接对象数量
        $config->setMaxObjectNum($mysql_conf['maxObjectNum']); //设置最大连接池存在连接对象数量
        $config->setAutoPing($mysql_conf['autoPing']); //设置自动ping客户端链接的间隔

        DbManager::getInstance()->addConnection(new Connection($config));
    }

    public static function mainServerCreate(EventRegister $register)
    {
    	###### 注册一个定时任务 ######
        // 配置定时任务
        $crontabConfig = new \EasySwoole\Crontab\Config();

        // 1.设置执行定时任务的 socket 服务的 socket 文件存放的位置，默认值为 当前文件所在目录
        // 这里设置为框架的 Temp 目录
        $crontabConfig->setTempDir(EASYSWOOLE_TEMP_DIR);

        // 2.设置执行定时任务的 socket 服务的名称，默认值为 'EasySwoole'
        $crontabConfig->setServerName('EasySwoole');

        // 3.设置用来执行定时任务的 worker 进程数，默认值为 3
        $crontabConfig->setWorkerNum(3);

        // 4.设置定时任务执行出现异常的异常捕获回调
        $crontabConfig->setOnException(function (\Throwable $throwable) {
            // 定时任务执行发生异常时触发（如果未在定时任务类的 onException 中进行捕获异常则会触发此异常回调）
        });

        // 创建定时任务实例
//        $crontab = new Crontab($crontabConfig);
        $crontab = \EasySwoole\EasySwoole\Crontab\Crontab::getInstance($crontabConfig);

        // 注册定时任务
        $crontab->register(new BalanceCrontab());
        $crontab->register(new ElasticSearchGoodsCrontab());
        $crontab->register(new ElasticSearchGoodsNewCrontab());
        $crontab->attachToServer(ServerManager::getInstance()->getSwooleServer());

    }
}