改名
This commit is contained in:
@@ -33,9 +33,15 @@ class OnClose extends Callback
|
|||||||
public function onHandler(Server $server, int $fd)
|
public function onHandler(Server $server, int $fd)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->execute($server, $fd);
|
$clientInfo = $server->getClientInfo($fd);
|
||||||
|
$event = Snowflake::app()->getEvent();
|
||||||
|
|
||||||
|
if (!$event->exists(($name = $this->getName($clientInfo)))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$event->trigger($name, [$fd, $server]);
|
||||||
} catch (\Throwable $exception) {
|
} catch (\Throwable $exception) {
|
||||||
$this->addError($exception,'throwable');
|
$this->addError($exception, 'throwable');
|
||||||
} finally {
|
} finally {
|
||||||
fire(Event::SYSTEM_RESOURCE_RELEASES);
|
fire(Event::SYSTEM_RESOURCE_RELEASES);
|
||||||
logger()->insert();
|
logger()->insert();
|
||||||
@@ -43,59 +49,13 @@ class OnClose extends Callback
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Server $server
|
|
||||||
* @param int $fd
|
|
||||||
* @throws ComponentException
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
private function execute(Server $server, int $fd): void
|
|
||||||
{
|
|
||||||
if (!$this->isWebsocket($server, $fd)) {
|
|
||||||
$client = $server->getClientInfo($fd);
|
|
||||||
fire($this->name($client['server_port']), [$server, $fd]);
|
|
||||||
} else {
|
|
||||||
$this->loadNode($server, $fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $server_port
|
* @param $server_port
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function name($server_port): string
|
private function getName($server_port): string
|
||||||
{
|
{
|
||||||
return 'listen ' . $server_port . ' ' . Event::SERVER_CLIENT_CLOSE;
|
return 'listen ' . $server_port . ' ' . Event::SERVER_CLIENT_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $server
|
|
||||||
* @param $fd
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private function isWebsocket($server, $fd): bool
|
|
||||||
{
|
|
||||||
return $server instanceof WebsocketServer && $server->isEstablished($fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $server
|
|
||||||
* @param $fd
|
|
||||||
* @return mixed
|
|
||||||
* @throws ComponentException
|
|
||||||
* @throws ConfigException
|
|
||||||
* @throws NotFindClassException
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
private function loadNode($server, $fd): mixed
|
|
||||||
{
|
|
||||||
$query = Request::socketQuery((object)['fd' => $fd], Socket::CLOSE);
|
|
||||||
if (($node = router()->find_path($query)) !== null) {
|
|
||||||
return $node->dispatch($server, $fd);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ namespace HttpServer\Events;
|
|||||||
use Annotation\Route\Socket;
|
use Annotation\Route\Socket;
|
||||||
use Exception;
|
use Exception;
|
||||||
use HttpServer\Abstracts\Callback;
|
use HttpServer\Abstracts\Callback;
|
||||||
|
use HttpServer\Http\HttpHeaders;
|
||||||
use HttpServer\Http\HttpParams;
|
use HttpServer\Http\HttpParams;
|
||||||
use HttpServer\Http\Request;
|
use HttpServer\Http\Request;
|
||||||
use HttpServer\Http\Response;
|
use HttpServer\Http\Response;
|
||||||
|
use Snowflake\Core\ArrayAccess;
|
||||||
use Snowflake\Event;
|
use Snowflake\Event;
|
||||||
use Snowflake\Snowflake;
|
use Snowflake\Snowflake;
|
||||||
use Swoole\Http\Request as SRequest;
|
use Swoole\Http\Request as SRequest;
|
||||||
@@ -98,7 +100,7 @@ class OnHandshake extends Callback
|
|||||||
$eventName = 'listen ' . $clientInfo['server_port'] . ' ' . Event::SERVER_HANDSHAKE;
|
$eventName = 'listen ' . $clientInfo['server_port'] . ' ' . Event::SERVER_HANDSHAKE;
|
||||||
$event->trigger($eventName, [$request, $response]);
|
$event->trigger($eventName, [$request, $response]);
|
||||||
} catch (\Throwable $exception) {
|
} catch (\Throwable $exception) {
|
||||||
$this->addError($exception,'throwable');
|
$this->addError($exception, 'throwable');
|
||||||
$this->disconnect($response, 500);
|
$this->disconnect($response, 500);
|
||||||
} finally {
|
} finally {
|
||||||
fire(Event::SYSTEM_RESOURCE_CLEAN);
|
fire(Event::SYSTEM_RESOURCE_CLEAN);
|
||||||
@@ -124,6 +126,9 @@ class OnHandshake extends Callback
|
|||||||
/** @var Request $sRequest */
|
/** @var Request $sRequest */
|
||||||
$sRequest = Request::create($request);
|
$sRequest = Request::create($request);
|
||||||
$sRequest->uri = '/' . Socket::HANDSHAKE . '::event';
|
$sRequest->uri = '/' . Socket::HANDSHAKE . '::event';
|
||||||
|
|
||||||
|
$sRequest->headers = new HttpHeaders(ArrayAccess::merge($request->server, $request->header));
|
||||||
|
|
||||||
$sRequest->headers->replace('request_method', 'sw::socket');
|
$sRequest->headers->replace('request_method', 'sw::socket');
|
||||||
$sRequest->headers->replace('request_uri', $sRequest->uri);
|
$sRequest->headers->replace('request_uri', $sRequest->uri);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user