From eef386d6c8e5030125e7692f02eb3e903990b2e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E6=9E=97?= Date: Wed, 12 Oct 2022 15:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kiri-websocket-server/Server.php | 95 ++++++++++++++++---------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/kiri-websocket-server/Server.php b/kiri-websocket-server/Server.php index 9f1d77dd..4596df77 100644 --- a/kiri-websocket-server/Server.php +++ b/kiri-websocket-server/Server.php @@ -12,15 +12,12 @@ use Kiri\Di\ContainerInterface; use Kiri\Events\EventDispatch; use Kiri\Exception\ConfigException; use Kiri\Message\Abstracts\ExceptionHandlerInterface; -use Kiri\Message\Constrict\RequestInterface; use Kiri\Message\Constrict\ResponseInterface; use Kiri\Message\ExceptionHandlerDispatcher; use Kiri\Message\Handler\DataGrip; use Kiri\Message\Handler\Dispatcher; -use Kiri\Message\Handler\Handler; use Kiri\Message\Handler\RouterCollector; use Kiri\Message\ResponseEmitter; -use Kiri\Message\ServerRequest; use Kiri\Message\Constrict\Response as CResponse; use Kiri\Websocket\Contract\OnCloseInterface; use Kiri\Websocket\Contract\OnDisconnectInterface; @@ -34,10 +31,12 @@ use Swoole\Http\Request; use Swoole\Http\Response; use Swoole\WebSocket\CloseFrame; use Swoole\WebSocket\Frame; -use Swoole\WebSocket\Server as WsServer; -use Swoole\Coroutine\Http\Server as WhServer; -class Server extends Component implements OnHandshakeInterface, OnMessageInterface, OnCloseInterface, OnDisconnectInterface + +/** + * + */ +class Server extends Component implements OnHandshakeInterface, OnMessageInterface, OnCloseInterface, OnDisconnectInterface, OnOpenInterface { @@ -48,42 +47,48 @@ class Server extends Component implements OnHandshakeInterface, OnMessageInterfa public EventDispatch $dispatch; + /** + * @var string + */ public string $host = '0.0.0.0'; + /** + * @var int + */ public int $port = 9527; - public bool $isSsl = false; - - + /** + * @var RouterCollector + */ public RouterCollector $router; - public bool $reuse_port = true; - - - private bool $isShutdown = false; + /** + * @var Coroutine\Http\Server + */ public Coroutine\Http\Server $server; + + /** + * @var ExceptionHandlerInterface + */ public ExceptionHandlerInterface $exception; - private int|Handler|null $handler; - - - public array|null|Closure $handshake; - - + /** + * @var array|Closure|null + */ public array|null|Closure $message; + /** + * @var array|Closure|null + */ public array|null|Closure $close; - public array|null|Closure $disconnect; - - /** * @param ContainerInterface $container * @param DataGrip $collector @@ -118,8 +123,6 @@ class Server extends Component implements OnHandshakeInterface, OnMessageInterfa $exception = ExceptionHandlerDispatcher::class; } $this->exception = $this->container->get($exception); - - $this->handler = $this->router->find('/', 'GET'); } /** @@ -134,35 +137,33 @@ class Server extends Component implements OnHandshakeInterface, OnMessageInterfa /** @var \Kiri\Message\Response $psrResponse */ $psrResponse = Context::setContext(ResponseInterface::class, new \Kiri\Message\Response()); - /** @var ServerRequest $psrRequest */ - $psrRequest = Context::setContext(RequestInterface::class, ServerRequest::createServerRequest($request)); - $handler = $this->router->find('/', 'GET'); if (is_integer($handler)) { $psrResponse->withContent('Allow Method[' . $request->getMethod() . '].')->withStatus(405); } else if (is_null($handler)) { $psrResponse->withContent('Page not found.')->withStatus(404); } else { -// $psrResponse = $this->dispatcher->with($handler)->handle($psrRequest); -// -// $executor = $handler->callback; -// $response->upgrade(); -// if ($handler instanceof OnHandshakeInterface) { -// $statusCode = $handler->OnHandshake($request, $response); -// $response->setStatusCode($statusCode); -// $response->write("connect ok."); -// } -// if ($executor instanceof OnOpenInterface) { -// $executor->onOpen($this->server, $request); -// } -// while (true) { -// $frame = $response->recv(); -// if ($frame === false || $frame instanceof CloseFrame || $frame === '') { -// $handler->onClose($this->server, $response->fd); -// break; -// } -// $handler->onMessage($this->server, $frame); -// } + $executor = $handler->dispatch->handler; + + if (Context::inCoroutine()) { + $response->upgrade(); + if ($handler instanceof OnHandshakeInterface) { + $handler->OnHandshake($request, $response); + } + if ($executor instanceof OnOpenInterface) { + $executor->OnOpen($request); + } + while (true) { + $frame = $response->recv(); + if ($frame === false || $frame instanceof CloseFrame || $frame === '') { + $handler->OnClose($response->fd); + break; + } + $handler->OnMessage($frame); + } + } else { + $this->OnOpen($request); + } } } catch (\Throwable $throwable) { $psrResponse = $this->exception->emit($throwable, di(CResponse::class));