改名
This commit is contained in:
@@ -4,11 +4,13 @@ declare(strict_types=1);
|
||||
namespace HttpServer\Events;
|
||||
|
||||
|
||||
use Annotation\Route\Socket;
|
||||
use HttpServer\Abstracts\Callback;
|
||||
use HttpServer\Route\Annotation\Http;
|
||||
use HttpServer\Route\Annotation\Tcp;
|
||||
use HttpServer\Route\Annotation\Websocket;
|
||||
use HttpServer\Route\Annotation\Websocket as AWebsocket;
|
||||
use HttpServer\Route\Node;
|
||||
use Snowflake\Event;
|
||||
use Snowflake\Exception\ComponentException;
|
||||
use Snowflake\Snowflake;
|
||||
@@ -47,14 +49,17 @@ class OnClose extends Callback
|
||||
* @throws ComponentException
|
||||
* @throws Exception
|
||||
*/
|
||||
private function execute(Server $server, int $fd)
|
||||
private function execute(Server $server, int $fd): void
|
||||
{
|
||||
try {
|
||||
[$manager, $name] = $this->resolve($server, $fd);
|
||||
if (empty($manager) || !$manager->has($name)) {
|
||||
$router = Snowflake::app()->getRouter();
|
||||
if (!($server instanceof WServer) || !$server->isEstablished($fd)) {
|
||||
return;
|
||||
}
|
||||
$manager->runWith($name, [$fd]);
|
||||
$node = $router->search(Socket::CLOSE . '::event', 'sw:socket');
|
||||
if ($node instanceof Node) {
|
||||
$node->dispatch();
|
||||
}
|
||||
} catch (\Throwable $exception) {
|
||||
$this->addError($exception);
|
||||
} finally {
|
||||
@@ -70,14 +75,18 @@ class OnClose extends Callback
|
||||
* @return array|null
|
||||
* @throws Exception
|
||||
*/
|
||||
public function resolve($server, $fd)
|
||||
public function resolve($server, $fd): ?array
|
||||
{
|
||||
if ($server instanceof WServer) {
|
||||
if (!$server->isEstablished($fd)) {
|
||||
return [null, null];
|
||||
}
|
||||
$manager = Snowflake::app()->annotation->websocket;
|
||||
$name = $manager->getName(AWebsocket::CLOSE);
|
||||
$router = Snowflake::app()->getRouter();
|
||||
$node = $router->search(Socket::HANDSHAKE . '::' . null, 'sw:socket');
|
||||
if ($node === null) {
|
||||
return [null, null];
|
||||
}
|
||||
return $node->dispatch();
|
||||
} else if ($server instanceof HServer) {
|
||||
$manager = Snowflake::app()->annotation->http;
|
||||
$name = $manager->getName(Http::CLOSE);
|
||||
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
namespace HttpServer\Events;
|
||||
|
||||
|
||||
use Annotation\Route\Socket;
|
||||
use Exception;
|
||||
use HttpServer\Abstracts\Callback;
|
||||
use HttpServer\Route\Annotation\Websocket as AWebsocket;
|
||||
@@ -87,20 +88,21 @@ class OnHandshake extends Callback
|
||||
/**
|
||||
* @param SRequest $request
|
||||
* @param SResponse $response
|
||||
* @return mixed|bool|null
|
||||
* @return mixed
|
||||
* @throws ComponentException
|
||||
* @throws Exception
|
||||
*/
|
||||
private function execute(SRequest $request, SResponse $response)
|
||||
private function execute(SRequest $request, SResponse $response): mixed
|
||||
{
|
||||
try {
|
||||
$this->resolveParse($request, $response);
|
||||
|
||||
$manager = Snowflake::app()->annotation->websocket;
|
||||
$name = $manager->getName(AWebsocket::HANDSHAKE);
|
||||
if (!$manager->has($name)) {
|
||||
return $this->disconnect($response);
|
||||
$router = Snowflake::app()->getRouter();
|
||||
$node = $router->search(Socket::HANDSHAKE . '::event', 'sw:socket');
|
||||
if ($node === null) {
|
||||
return $this->disconnect($response, 502);
|
||||
}
|
||||
return $manager->runWith($name, [$request, $response]);
|
||||
return $node->dispatch();
|
||||
} catch (\Throwable $exception) {
|
||||
$this->addError($exception->getMessage());
|
||||
return $this->disconnect($response, 500);
|
||||
|
||||
@@ -4,8 +4,10 @@ declare(strict_types=1);
|
||||
namespace HttpServer\Events;
|
||||
|
||||
|
||||
use Annotation\Route\Socket;
|
||||
use Exception;
|
||||
use HttpServer\Abstracts\Callback;
|
||||
use HttpServer\Http\Request;
|
||||
use HttpServer\Route\Annotation\Websocket as AWebsocket;
|
||||
use Snowflake\Event;
|
||||
use Snowflake\Snowflake;
|
||||
@@ -28,16 +30,14 @@ class OnMessage extends Callback
|
||||
public function onHandler(Server $server, Frame $frame)
|
||||
{
|
||||
try {
|
||||
if ($frame->opcode == 0x08) {
|
||||
return;
|
||||
if ($frame->opcode != 0x08) {
|
||||
$event = Snowflake::app()->getEvent();
|
||||
Coroutine::defer(function () use ($event) {
|
||||
$event->trigger(Event::EVENT_AFTER_REQUEST);
|
||||
});
|
||||
$content = $this->resolve($event, $frame, $server);
|
||||
$server->send($frame->fd, $content);
|
||||
}
|
||||
$event = Snowflake::app()->getEvent();
|
||||
Coroutine::defer(function () use ($event) {
|
||||
$event->trigger(Event::EVENT_AFTER_REQUEST);
|
||||
});
|
||||
$this->resolve($event, $frame, $server);
|
||||
$manager = Snowflake::app()->getAnnotation()->websocket;
|
||||
$manager->runWith($this->name($manager, $frame), [$frame, $server]);
|
||||
} catch (\Throwable $exception) {
|
||||
$this->addError($exception->getMessage(), 'websocket');
|
||||
$server->send($frame->fd, $exception->getMessage());
|
||||
@@ -50,30 +50,25 @@ class OnMessage extends Callback
|
||||
* @param $event
|
||||
* @param $frame
|
||||
* @param $server
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
private function resolve($event, $frame, $server)
|
||||
private function resolve($event, $frame, $server): mixed
|
||||
{
|
||||
if ($event->exists(Event::SERVER_MESSAGE)) {
|
||||
$event->trigger(Event::SERVER_MESSAGE, [$server, $frame]);
|
||||
} else {
|
||||
$frame->data = json_decode($frame->data, true);
|
||||
}
|
||||
if (!isset($frame->data['route'])) {
|
||||
if (empty($route = $frame->data['route'] ?? null)) {
|
||||
throw new Exception('Format error.');
|
||||
}
|
||||
$router = Snowflake::app()->getRouter();
|
||||
$node = $router->search(Socket::MESSAGE . '::' . $route, 'sw:socket');
|
||||
if ($node === null) {
|
||||
throw new Exception('Page not found.');
|
||||
}
|
||||
return $node->dispatch();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $manager
|
||||
* @param $frame
|
||||
* @return mixed
|
||||
*/
|
||||
private function name($manager, $frame)
|
||||
{
|
||||
return $manager->getName(AWebsocket::MESSAGE, [null, null, $frame->data['route']]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -29,10 +29,11 @@ class OnWorkerStart extends Callback
|
||||
* @param Server $server
|
||||
* @param int $worker_id
|
||||
*
|
||||
* @return mixed|void
|
||||
* @return mixed
|
||||
* @throws ConfigException
|
||||
* @throws Exception
|
||||
*/
|
||||
public function onHandler(Server $server, int $worker_id)
|
||||
public function onHandler(Server $server, int $worker_id): void
|
||||
{
|
||||
$get_name = $this->get_process_name($server, $worker_id);
|
||||
if (!empty($get_name) && !Snowflake::isMac()) {
|
||||
@@ -66,7 +67,7 @@ class OnWorkerStart extends Callback
|
||||
* @return string
|
||||
* @throws ConfigException
|
||||
*/
|
||||
private function get_process_name($socket, $worker_id)
|
||||
private function get_process_name($socket, $worker_id): string
|
||||
{
|
||||
$prefix = rtrim(Config::get('id',false, 'system:'), ':');
|
||||
if ($worker_id >= $socket->setting['worker_num']) {
|
||||
|
||||
Reference in New Issue
Block a user