Files
kiri-core/HttpServer/Events/OnClose.php
T

76 lines
1.6 KiB
PHP
Raw Normal View History

2020-09-02 11:38:47 +08:00
<?php
namespace HttpServer\Events;
2020-09-04 01:05:33 +08:00
use HttpServer\Abstracts\Callback;
2020-09-02 11:38:47 +08:00
use HttpServer\Route\Annotation\Annotation;
use HttpServer\Route\Annotation\Tcp;
use HttpServer\Route\Annotation\Websocket as AWebsocket;
use Snowflake\Event;
use Snowflake\Snowflake;
use Swoole\Server;
use Exception;
use Swoole\Http\Server as HServer;
use Swoole\WebSocket\Server as WServer;
/**
* Class OnClose
* @package HttpServer\Events
*/
class OnClose extends Callback
{
/**
* @param Server $server
* @param int $fd
* @throws Exception
*/
public function onHandler(Server $server, int $fd)
{
try {
2020-09-03 01:55:28 +08:00
[$manager, $name] = $this->resovle($server, $fd);
if ($manager !== null && !$manager->has($name)) {
$manager->runWith($name, [$fd]);
2020-09-02 11:38:47 +08:00
}
} catch (\Throwable $exception) {
$this->addError($exception->getMessage());
} finally {
2020-09-03 11:39:20 +08:00
$event = Snowflake::app()->event;
2020-09-02 11:38:47 +08:00
$event->trigger(Event::RELEASE_ALL);
2020-09-03 11:39:20 +08:00
$logger = Snowflake::app()->getLogger();
2020-09-02 11:38:47 +08:00
$logger->insert();
}
}
2020-09-03 01:55:28 +08:00
/**
* @param $server
* @param $fd
* @return array|null
* @throws Exception
*/
public function resovle($server, $fd)
{
if ($server instanceof WServer) {
if (!$server->isEstablished($fd)) {
return [null, null];
}
2020-09-03 11:39:20 +08:00
$manager = Snowflake::app()->annotation->get('websocket');
2020-09-03 01:55:28 +08:00
$name = $manager->getName(AWebsocket::CLOSE);
} else if ($server instanceof HServer) {
2020-09-03 11:39:20 +08:00
$manager = Snowflake::app()->annotation->get('http');
2020-09-03 01:55:28 +08:00
$name = $manager->getName(Annotation::CLOSE);
} else {
2020-09-03 11:39:20 +08:00
$manager = Snowflake::app()->annotation->get('tcp');
2020-09-03 01:55:28 +08:00
$name = $manager->getName(Tcp::CLOSE);
}
return [$manager, $name];
}
2020-09-02 11:38:47 +08:00
}