This commit is contained in:
2020-11-02 14:45:11 +08:00
parent 6293780221
commit aa6d65510c
+8 -11
View File
@@ -7,6 +7,7 @@ namespace HttpServer\Events;
use HttpServer\Abstracts\Callback; use HttpServer\Abstracts\Callback;
use HttpServer\Route\Annotation\Annotation; use HttpServer\Route\Annotation\Annotation;
use HttpServer\Route\Annotation\Tcp; use HttpServer\Route\Annotation\Tcp;
use HttpServer\Route\Annotation\Websocket;
use HttpServer\Route\Annotation\Websocket as AWebsocket; use HttpServer\Route\Annotation\Websocket as AWebsocket;
use Snowflake\Event; use Snowflake\Event;
use Snowflake\Snowflake; use Snowflake\Snowflake;
@@ -32,11 +33,12 @@ class OnClose extends Callback
{ {
try { try {
[$manager, $name] = $this->resolve($server, $fd); [$manager, $name] = $this->resolve($server, $fd);
if ($manager !== null && !$manager->has($name)) { if (!$manager->has($name)) {
$manager->runWith($name, [$fd]); return;
} }
$manager->runWith($name, [$fd]);
} catch (\Throwable $exception) { } catch (\Throwable $exception) {
$this->addError($exception->getMessage()); $this->addError($exception);
} finally { } finally {
$event = Snowflake::app()->event; $event = Snowflake::app()->event;
$event->trigger(Event::RELEASE_ALL); $event->trigger(Event::RELEASE_ALL);
@@ -55,19 +57,14 @@ class OnClose extends Callback
*/ */
public function resolve($server, $fd) public function resolve($server, $fd)
{ {
if ($server instanceof WServer) { if (!($server instanceof WServer)) {
return [null, null];
}
if (!$server->isEstablished($fd)) { if (!$server->isEstablished($fd)) {
return [null, null]; return [null, null];
} }
$manager = Snowflake::app()->annotation->get('websocket'); $manager = Snowflake::app()->annotation->get('websocket');
$name = $manager->getName(AWebsocket::CLOSE); $name = $manager->getName(AWebsocket::CLOSE);
} else if ($server instanceof HServer) {
$manager = Snowflake::app()->annotation->get('http');
$name = $manager->getName(Annotation::CLOSE);
} else {
$manager = Snowflake::app()->annotation->get('tcp');
$name = $manager->getName(Tcp::CLOSE);
}
return [$manager, $name]; return [$manager, $name];
} }