This commit is contained in:
2021-09-07 17:02:42 +08:00
parent 6bbc1e7d58
commit 7d9f29d626
+35 -31
View File
@@ -2,18 +2,23 @@
namespace Server;
use Annotation\Inject;
use Closure;
use Exception;
use Http\Route\Router;
use Kiri\Abstracts\Config;
use Kiri\Di\ContainerInterface;
use Kiri\Exception\ConfigException;
use Kiri\Exception\NotFindClassException;
use Kiri\Kiri;
use ReflectionException;
use Server\Manager\OnPipeMessage;
use Server\Manager\OnServer;
use Server\Manager\OnServerManager;
use Server\Manager\OnServerReload;
use Server\SInterface\CustomProcess;
use Server\SInterface\TaskExecute;
use Server\Task\OnServerTask;
use Server\Worker\OnServerWorker;
use Swoole\Http\Server as HServer;
use Swoole\Process;
use Swoole\Server;
@@ -43,6 +48,27 @@ class ServerManager
private Server|null $server = null;
/**
* @var ContainerInterface
*/
#[Inject(ContainerInterface::class)]
public ContainerInterface $container;
const DEFAULT_EVENT = [
Constant::WORKER_START => [OnServerWorker::class, 'onWorkerStart'],
Constant::WORKER_EXIT => [OnServerWorker::class, 'onWorkerExit'],
Constant::WORKER_STOP => [OnServerWorker::class, 'onWorkerStop'],
Constant::WORKER_ERROR => [OnServerWorker::class, 'onWorkerError'],
Constant::MANAGER_START => [OnServerManager::class, 'onManagerStart'],
Constant::MANAGER_STOP => [OnServerManager::class, 'onManagerStop'],
Constant::BEFORE_RELOAD => [OnServerReload::class, 'onBeforeReload'],
Constant::AFTER_RELOAD => [OnServerReload::class, 'onAfterReload'],
Constant::START => [OnServer::class, 'onStart'],
Constant::SHUTDOWN => [OnServer::class, 'onShutdown'],
];
/**
* @return Server|WServer|HServer|null
*/
@@ -87,7 +113,7 @@ class ServerManager
$this->startListenerHandler($context, $config, $daemon);
}
$this->bindCallback($this->server, [Constant::PIPE_MESSAGE => [OnPipeMessage::class, 'onPipeMessage']]);
$this->bindCallback($this->server, $this->getSystemEvents($configs));
// $this->bindCallback($this->server, $this->getSystemEvents($configs));
}
@@ -210,27 +236,6 @@ class ServerManager
}
/**
* @param array $configs
* @return array
*/
private function getSystemEvents(array $configs): array
{
return array_intersect_key($configs['events'] ?? [], [
Constant::SHUTDOWN => '',
Constant::WORKER_START => '',
Constant::WORKER_ERROR => '',
Constant::WORKER_EXIT => '',
Constant::WORKER_STOP => '',
Constant::MANAGER_START => '',
Constant::MANAGER_STOP => '',
Constant::BEFORE_RELOAD => '',
Constant::AFTER_RELOAD => '',
Constant::START => '',
]);
}
/**
* @param ServerManager $context
* @param array $config
@@ -392,9 +397,8 @@ class ServerManager
if (($this->server->setting['task_worker_num'] ?? 0) > 0) {
$this->addTaskListener($settings['events']);
}
$this->addServiceEvents($settings['events'] ?? [], $this->server);
Kiri::getDi()->setBindings(SwooleServerInterface::class,
$this->server);
$this->addServiceEvents(ServerManager::DEFAULT_EVENT, $this->server);
$this->container->setBindings(SwooleServerInterface::class, $this->server);
}
@@ -406,7 +410,7 @@ class ServerManager
{
foreach ($events as $name => $event) {
if (is_array($event) && is_string($event[0])) {
$event[0] = Kiri::getDi()->get($event[0], [$server]);
$event[0] = $this->container->get($event[0], [$server]);
}
$server->on($name, $event);
}
@@ -428,7 +432,7 @@ class ServerManager
*/
private function getNewInstance(string $class): object
{
return Kiri::getDi()->newObject($class);
return $this->container->newObject($class);
}
@@ -446,7 +450,7 @@ class ServerManager
$this->server->setting['worker_num'] + 1 + $this->server->setting['task_worker_num']);
}
if (is_string($handler)) {
$implements = Kiri::getDi()->getReflect($handler);
$implements = $this->container->getReflect($handler);
if (!in_array(TaskExecute::class, $implements->getInterfaceNames())) {
throw new Exception('Task must instance ' . TaskExecute::class);
}
@@ -474,7 +478,7 @@ class ServerManager
private function addTaskListener(array $events = []): void
{
$task_use_object = $this->server->setting['task_object'] ?? $this->server->setting['task_use_object'] ?? false;
$reflect = Kiri::getDi()->getReflect(OnServerTask::class)?->newInstance();
$reflect = $this->container->getReflect(OnServerTask::class)?->newInstance();
if ($task_use_object || $this->server->setting['task_enable_coroutine']) {
$this->server->on('task', $events[Constant::TASK] ?? [$reflect, 'onCoroutineTask']);
} else {
@@ -499,7 +503,7 @@ class ServerManager
continue;
}
if (is_array($callback) && !is_object($callback[0])) {
$callback[0] = Kiri::getDi()->get($callback[0]);
$callback[0] = $this->container->get($callback[0]);
}
$this->server->on($event_type, $callback);
}