Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45319c3733 | |||
| 06c9459f14 | |||
| 5fd2abcb69 | |||
| 58a3d91df3 | |||
| c61842402a | |||
| 623bae9e97 | |||
| 12610c218c | |||
| c3ca24884e | |||
| 02c14874a2 | |||
| 6eff48e22f |
@@ -935,7 +935,6 @@ if (!function_exists('di')) {
|
|||||||
/**
|
/**
|
||||||
* @param string $className
|
* @param string $className
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
function di(string $className): mixed
|
function di(string $className): mixed
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -223,22 +223,21 @@ abstract class BaseApplication extends Component
|
|||||||
*/
|
*/
|
||||||
private function addEvent($key, $value): void
|
private function addEvent($key, $value): void
|
||||||
{
|
{
|
||||||
$eventProvider = di(EventProvider::class);
|
|
||||||
if ($value instanceof \Closure || is_object($value)) {
|
if ($value instanceof \Closure || is_object($value)) {
|
||||||
$eventProvider->on($key, $value, 0);
|
$this->eventProvider->on($key, $value, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
if (is_object($value[0]) && !($value[0] instanceof \Closure)) {
|
if (is_object($value[0]) && !($value[0] instanceof \Closure)) {
|
||||||
$eventProvider->on($key, $value, 0);
|
$this->eventProvider->on($key, $value, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($value[0])) {
|
if (is_string($value[0])) {
|
||||||
$value[0] = Kiri::createObject($value[0]);
|
$value[0] = Kiri::createObject($value[0]);
|
||||||
$eventProvider->on($key, $value, 0);
|
$this->eventProvider->on($key, $value, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +246,7 @@ abstract class BaseApplication extends Component
|
|||||||
if (!is_callable($item, true)) {
|
if (!is_callable($item, true)) {
|
||||||
throw new InitException("Class does not hav callback.");
|
throw new InitException("Class does not hav callback.");
|
||||||
}
|
}
|
||||||
$eventProvider->on($key, $item, 0);
|
$this->eventProvider->on($key, $item, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,10 @@ use JetBrains\PhpStorm\Pure;
|
|||||||
use Kiri\Di\Container;
|
use Kiri\Di\Container;
|
||||||
use Kiri\Events\EventProvider;
|
use Kiri\Events\EventProvider;
|
||||||
use Kiri\Kiri;
|
use Kiri\Kiri;
|
||||||
|
use Note\Inject;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
use Psr\Container\ContainerInterface;
|
use Psr\Container\ContainerInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Component
|
* Class Component
|
||||||
@@ -26,6 +29,8 @@ use Psr\Container\ContainerInterface;
|
|||||||
class Component implements Configure
|
class Component implements Configure
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseAbstract constructor.
|
* BaseAbstract constructor.
|
||||||
*
|
*
|
||||||
@@ -40,6 +45,26 @@ class Component implements Configure
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Container|ContainerInterface
|
||||||
|
*/
|
||||||
|
#[Pure] public function getContainer(): ContainerInterface|Container
|
||||||
|
{
|
||||||
|
return Kiri::getDi();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return EventProvider
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
|
*/
|
||||||
|
public function getEventProvider(): EventProvider
|
||||||
|
{
|
||||||
|
return $this->getContainer()->get(EventProvider::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@@ -48,24 +73,6 @@ class Component implements Configure
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return EventProvider
|
|
||||||
* @throws \ReflectionException
|
|
||||||
*/
|
|
||||||
public function getEventProvider(): EventProvider
|
|
||||||
{
|
|
||||||
return Kiri::getDi()->get(EventProvider::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Container
|
|
||||||
*/
|
|
||||||
#[Pure] public function getContainer(): ContainerInterface
|
|
||||||
{
|
|
||||||
return Kiri::getDi();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
|
|||||||
@@ -3,11 +3,10 @@
|
|||||||
namespace Kiri\Abstracts;
|
namespace Kiri\Abstracts;
|
||||||
|
|
||||||
use DirectoryIterator;
|
use DirectoryIterator;
|
||||||
use Kiri\Kiri;
|
|
||||||
use Note\Inject;
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Kiri\Events\EventProvider;
|
use Kiri\Events\EventProvider;
|
||||||
use Kiri\Exception\ConfigException;
|
use Kiri\Exception\ConfigException;
|
||||||
|
use Kiri\Kiri;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use ReflectionException;
|
use ReflectionException;
|
||||||
use Server\Events\OnWorkerStop;
|
use Server\Events\OnWorkerStop;
|
||||||
@@ -156,7 +155,7 @@ class Logger implements LoggerInterface
|
|||||||
{
|
{
|
||||||
// TODO: Implement log() method.
|
// TODO: Implement log() method.
|
||||||
$levels = Config::get('log.level', Logger::LOGGER_LEVELS);
|
$levels = Config::get('log.level', Logger::LOGGER_LEVELS);
|
||||||
if (!in_array($level, $levels)) {
|
if (!in_array($level, $levels) || str_contains($message, 'Event::rshutdown')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ use Kiri\Kiri;
|
|||||||
use Kiri\Pool\Redis as PoolRedis;
|
use Kiri\Pool\Redis as PoolRedis;
|
||||||
use Note\Inject;
|
use Note\Inject;
|
||||||
use Server\Events\OnWorkerExit;
|
use Server\Events\OnWorkerExit;
|
||||||
|
use Swoole\Timer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Redis
|
* Class Redis
|
||||||
@@ -80,6 +81,25 @@ class Redis extends Component
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $key
|
||||||
|
* @param int $timeout
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function waite($key, int $timeout = 5): bool
|
||||||
|
{
|
||||||
|
$time = time();
|
||||||
|
while (!$this->setNx($key, 1)) {
|
||||||
|
if (time()- $time >= $timeout) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
usleep(1000);
|
||||||
|
}
|
||||||
|
$this->expire($key, $timeout);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $key
|
* @param $key
|
||||||
* @param int $timeout
|
* @param int $timeout
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class DateFormat
|
|||||||
if ($time === null) {
|
if ($time === null) {
|
||||||
$time = time();
|
$time = time();
|
||||||
} else if (is_numeric($time)) {
|
} else if (is_numeric($time)) {
|
||||||
$length = strlen(floatval($time));
|
$length = strlen((string)$time);
|
||||||
if ($length != 10 && $length != 13) {
|
if ($length != 10 && $length != 13) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -86,9 +86,7 @@ class DateFormat
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$time = date('t', $time);
|
return date('t', $time);
|
||||||
|
|
||||||
return $time;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class Dtl extends Component
|
|||||||
/**
|
/**
|
||||||
* Dtl constructor.
|
* Dtl constructor.
|
||||||
* @param $params
|
* @param $params
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function __construct($params)
|
public function __construct($params)
|
||||||
{
|
{
|
||||||
@@ -35,9 +36,6 @@ class Dtl extends Component
|
|||||||
*/
|
*/
|
||||||
public function toArray(): array
|
public function toArray(): array
|
||||||
{
|
{
|
||||||
if (!is_array($this->params)) {
|
|
||||||
return ArrayAccess::toArray($this->params);
|
|
||||||
}
|
|
||||||
return $this->params;
|
return $this->params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace Kiri\Core;
|
namespace Kiri\Core;
|
||||||
|
|
||||||
use JetBrains\PhpStorm\Pure;
|
use JetBrains\PhpStorm\Pure;
|
||||||
|
use ReturnTypeWillChange;
|
||||||
|
|
||||||
class HashMap implements \ArrayAccess
|
class HashMap implements \ArrayAccess
|
||||||
{
|
{
|
||||||
@@ -62,7 +63,7 @@ class HashMap implements \ArrayAccess
|
|||||||
* @param mixed $offset
|
* @param mixed $offset
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function offsetExists($offset): bool
|
public function offsetExists(mixed $offset): bool
|
||||||
{
|
{
|
||||||
return isset($this->lists[$offset]);
|
return isset($this->lists[$offset]);
|
||||||
}
|
}
|
||||||
@@ -72,7 +73,7 @@ class HashMap implements \ArrayAccess
|
|||||||
* @param mixed $offset
|
* @param mixed $offset
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
#[Pure] public function offsetGet($offset): mixed
|
#[Pure] public function offsetGet(mixed $offset): mixed
|
||||||
{
|
{
|
||||||
return $this->get($offset);
|
return $this->get($offset);
|
||||||
}
|
}
|
||||||
@@ -82,7 +83,8 @@ class HashMap implements \ArrayAccess
|
|||||||
* @param mixed $offset
|
* @param mixed $offset
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*/
|
*/
|
||||||
public function offsetSet($offset, $value)
|
#[ReturnTypeWillChange]
|
||||||
|
public function offsetSet(mixed $offset, mixed $value)
|
||||||
{
|
{
|
||||||
$this->put($offset, $value);
|
$this->put($offset, $value);
|
||||||
}
|
}
|
||||||
@@ -91,7 +93,8 @@ class HashMap implements \ArrayAccess
|
|||||||
/**
|
/**
|
||||||
* @param mixed $offset
|
* @param mixed $offset
|
||||||
*/
|
*/
|
||||||
public function offsetUnset($offset)
|
#[ReturnTypeWillChange]
|
||||||
|
public function offsetUnset(mixed $offset)
|
||||||
{
|
{
|
||||||
unset($this->lists[$offset]);
|
unset($this->lists[$offset]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class Help
|
|||||||
/**
|
/**
|
||||||
* @param $xml
|
* @param $xml
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static function toArray($xml): mixed
|
public static function toArray($xml): mixed
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class Json
|
|||||||
* @param bool $asArray
|
* @param bool $asArray
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function decode($data, $asArray = true): mixed
|
public static function decode($data, bool $asArray = true): mixed
|
||||||
{
|
{
|
||||||
if (is_array($data) || is_numeric($data)) {
|
if (is_array($data) || is_numeric($data)) {
|
||||||
return $data;
|
return $data;
|
||||||
@@ -55,14 +55,13 @@ class Json
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $code
|
* @param $code
|
||||||
* @param string $message
|
* @param string|array $message
|
||||||
* @param array $data
|
* @param array|int $data
|
||||||
* @param int $count
|
* @param int $count
|
||||||
* @param array $exPageInfo
|
* @param array $exPageInfo
|
||||||
* @return mixed
|
* @return string|bool
|
||||||
* @throws
|
|
||||||
*/
|
*/
|
||||||
public static function to($code, $message = '', $data = [], $count = 0, $exPageInfo = []): mixed
|
public static function to($code, string|array $message = '', array|int $data = [], int $count = 0, array $exPageInfo = []): string|bool
|
||||||
{
|
{
|
||||||
$params['code'] = $code;
|
$params['code'] = $code;
|
||||||
if (!is_string($message)) {
|
if (!is_string($message)) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ use Psr\Container\ContainerInterface;
|
|||||||
* Class Container
|
* Class Container
|
||||||
* @package Kiri\Di
|
* @package Kiri\Di
|
||||||
*/
|
*/
|
||||||
class Container extends Component implements ContainerInterface
|
class Container implements ContainerInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,7 +65,7 @@ class Container extends Component implements ContainerInterface
|
|||||||
/**
|
/**
|
||||||
* @param string $id
|
* @param string $id
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws ReflectionException
|
* @throws
|
||||||
*/
|
*/
|
||||||
public function get(string $id): mixed
|
public function get(string $id): mixed
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
/**
|
/**
|
||||||
* @param $class
|
* @param $class
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
public function isInterface($class): bool
|
public function isInterface($class): bool
|
||||||
{
|
{
|
||||||
@@ -212,7 +211,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
* @param $className
|
* @param $className
|
||||||
* @param $method
|
* @param $method
|
||||||
* @return array
|
* @return array
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
public function getMethodAttribute($className, $method = null): array
|
public function getMethodAttribute($className, $method = null): array
|
||||||
{
|
{
|
||||||
@@ -228,7 +226,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
* @param string $class
|
* @param string $class
|
||||||
* @param string|null $property
|
* @param string|null $property
|
||||||
* @return ReflectionProperty|ReflectionProperty[]|null
|
* @return ReflectionProperty|ReflectionProperty[]|null
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
public function getClassReflectionProperty(string $class, string $property = null): ReflectionProperty|null|array
|
public function getClassReflectionProperty(string $class, string $property = null): ReflectionProperty|null|array
|
||||||
{
|
{
|
||||||
@@ -339,9 +336,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
if (!isset($this->_parameters[$class])) {
|
if (!isset($this->_parameters[$class])) {
|
||||||
$this->_parameters[$class] = [];
|
$this->_parameters[$class] = [];
|
||||||
}
|
}
|
||||||
if (!isset($this->_parameters[$class][$method])) {
|
|
||||||
$this->_parameters[$class][$method] = [];
|
|
||||||
}
|
|
||||||
return $this->_parameters[$class][$method] = $parameters;
|
return $this->_parameters[$class][$method] = $parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +354,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
/**
|
/**
|
||||||
* @param ReflectionMethod|ReflectionFunction $reflectionMethod
|
* @param ReflectionMethod|ReflectionFunction $reflectionMethod
|
||||||
* @return array
|
* @return array
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
private function resolveMethodParameters(ReflectionMethod|ReflectionFunction $reflectionMethod): array
|
private function resolveMethodParameters(ReflectionMethod|ReflectionFunction $reflectionMethod): array
|
||||||
{
|
{
|
||||||
@@ -394,7 +387,6 @@ class Container extends Component implements ContainerInterface
|
|||||||
/**
|
/**
|
||||||
* @param $class
|
* @param $class
|
||||||
* @return ReflectionClass|null
|
* @return ReflectionClass|null
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
public function getReflect($class): ?ReflectionClass
|
public function getReflect($class): ?ReflectionClass
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ use Note\Inject;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use Kiri\Abstracts\Component;
|
use Kiri\Abstracts\Component;
|
||||||
use Kiri\Core\Json;
|
use Kiri\Core\Json;
|
||||||
use Kiri\Events\EventProvider;
|
|
||||||
use Kiri\Kiri;
|
use Kiri\Kiri;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|||||||
@@ -119,10 +119,8 @@ class Gii
|
|||||||
*/
|
*/
|
||||||
private function makeByDatabases($make, InputInterface $input): array
|
private function makeByDatabases($make, InputInterface $input): array
|
||||||
{
|
{
|
||||||
$redis = Kiri::getDi()->get(Redis::class);
|
|
||||||
if ($input->hasOption('name')) {
|
if ($input->hasOption('name')) {
|
||||||
$this->tableName = $input->getOption('name');
|
$this->tableName = $input->getOption('name');
|
||||||
$redis->del('column:' . $this->tableName);
|
|
||||||
}
|
}
|
||||||
return match ($make) {
|
return match ($make) {
|
||||||
'controller' => $this->getTable(1, 0),
|
'controller' => $this->getTable(1, 0),
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kiri\Websocket;
|
||||||
|
|
||||||
|
class FdCollector
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public function set($fd)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kiri\Websocket;
|
||||||
|
|
||||||
|
class Sender
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public function push($fd, $data)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function close($fd)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Kiri\Websocket;
|
||||||
|
|
||||||
|
use Http\Handler\DataGrip;
|
||||||
|
use Http\Handler\Router;
|
||||||
|
use Kiri\Abstracts\Component;
|
||||||
|
use Kiri\Server\Contract\OnOpenInterface;
|
||||||
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
use ReflectionException;
|
||||||
|
use Server\Contract\OnCloseInterface;
|
||||||
|
use Server\Contract\OnHandshakeInterface;
|
||||||
|
use Server\Contract\OnMessageInterface;
|
||||||
|
use Swoole\Http\Request;
|
||||||
|
use Swoole\Http\Response;
|
||||||
|
use Swoole\WebSocket\CloseFrame;
|
||||||
|
use Swoole\WebSocket\Frame;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Server extends Component implements OnHandshakeInterface, OnMessageInterface, OnCloseInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public Router $router;
|
||||||
|
|
||||||
|
|
||||||
|
public string $serverName = 'ws';
|
||||||
|
|
||||||
|
|
||||||
|
public mixed $callback = null;
|
||||||
|
|
||||||
|
|
||||||
|
public mixed $server;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws ContainerExceptionInterface
|
||||||
|
* @throws NotFoundExceptionInterface
|
||||||
|
* @throws ReflectionException
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
$this->router = $this->container->get(DataGrip::class)->get($this->serverName);
|
||||||
|
$handler = $this->router->find('/', 'GET');
|
||||||
|
if (is_int($handler) || is_null($handler)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->callback = $handler->callback[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Swoole\Server $server
|
||||||
|
* @param int $fd
|
||||||
|
*/
|
||||||
|
public function onClose(\Swoole\Server $server, int $fd): void
|
||||||
|
{
|
||||||
|
if ($this->callback instanceof OnCloseInterface) {
|
||||||
|
$this->callback->onClose($server, $fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param Response $response
|
||||||
|
*/
|
||||||
|
public function onHandshake(Request $request, Response $response): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (!$this->callback instanceof OnHandshakeInterface) {
|
||||||
|
throw new \Exception('Page not found.');
|
||||||
|
}
|
||||||
|
$this->callback->onHandshake($request, $response);
|
||||||
|
|
||||||
|
$this->afterHandshake($request);
|
||||||
|
if ($this->server instanceof \Swoole\Coroutine\Http\Server) {
|
||||||
|
while (true) {
|
||||||
|
$data = $response->recv();
|
||||||
|
if ($data === '' || $data === false || $data instanceof CloseFrame) {
|
||||||
|
$this->onClose($this->server, $response->fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$this->onMessage($this->server, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (\Throwable $throwable) {
|
||||||
|
$response->status(500, $throwable->getMessage());
|
||||||
|
$response->end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $request
|
||||||
|
*/
|
||||||
|
public function afterHandshake($request)
|
||||||
|
{
|
||||||
|
if (!($this->callback instanceof OnOpenInterface)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->callback->onOpen($this->server, $request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Swoole\Server $server
|
||||||
|
* @param Frame $frame
|
||||||
|
*/
|
||||||
|
public function onMessage(\Swoole\Server $server, Frame $frame): void
|
||||||
|
{
|
||||||
|
if ($this->callback instanceof OnMessageInterface) {
|
||||||
|
$this->callback->onMessage($server, $frame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user