Ejemplo n.º 1
0
 public function OnWorkerStop(\swoole_server &$server, &$worker_id)
 {
     DILog(DI_SERVER_NAME . " Worker Stop {$worker_id}" . "/Count<handler>" . count(DIHandler()));
 }
Ejemplo n.º 2
0
/**
 * 加载Handler文件
 * @param string $handlerFile Handler的文件完整路径
 * @param array $whiteList Handler的白名单
 * @param array $blackList Handler的黑名单
 * @param string $namespace Handler的命名空间
 * @param \swoole_server $server 要注入到Handler中的当前进程的swoole_server对象
 * @return boolean 加载是否成功
 */
function DILoadHandler($handlerFile, $whiteList, $blackList, $namespace = '', \swoole_server &$server)
{
    if (is_array($handlerFile)) {
        foreach ($handlerFile as $handlerFile) {
            DILoadHandler($handlerFile, $whiteList, $blackList, $namespace, $server);
        }
    } else {
        if (file_exists($handlerFile)) {
            $fileName = array_pop(explode('/', $handlerFile));
            $sortClassName = str_ireplace('.php', '', $fileName);
            $className = $namespace . '\\' . $sortClassName;
            //黑白名单判定逻辑,黑名单优先。
            if ($whiteList) {
                if (array_search($sortClassName, $whiteList) === false) {
                    return;
                }
            }
            if (array_search($sortClassName, $blackList) !== false) {
                return;
            }
            require_cache($handlerFile);
            $DIHandlerClass = new \ReflectionClass("\\DIServer\\Handler");
            try {
                $handlerClass = new \ReflectionClass($className);
                if ($handlerClass->isSubclassOf($DIHandlerClass)) {
                    $handler = $handlerClass->newInstanceArgs(['server' => $server]);
                    DIHandler($handler);
                }
            } catch (\ReflectionException $ex) {
                DILog("ReflectionException On {$handlerFile}:{$ex->getMessage()}");
            }
        } else {
            return FALSE;
        }
    }
}