This commit is contained in:
2021-03-30 19:57:00 +08:00
parent b29df878e7
commit b8d4fbce8e
3 changed files with 35 additions and 45 deletions
+12 -21
View File
@@ -450,11 +450,8 @@ class Server extends HttpService
if (!in_array($config['type'], [self::HTTP, self::TCP, self::PACKAGE])) { if (!in_array($config['type'], [self::HTTP, self::TCP, self::PACKAGE])) {
throw new Exception('Unknown server type(' . $config['type'] . ').'); throw new Exception('Unknown server type(' . $config['type'] . ').');
} }
if (in_array($config['type'], $this->listenTypes)) { if ($config['type'] == self::HTTP && !$this->swoole->getCallback('request')) {
return $this->swoole; $this->onBindCallback('request', [make(OnRequest::class), 'onHandler']);
}
if ($config['type'] == self::HTTP) {
$this->onBind($newListener, 'request', [Snowflake::createObject(OnRequest::class), 'onHandler']);
} else { } else {
$this->noHttp($newListener, $config); $this->noHttp($newListener, $config);
} }
@@ -467,40 +464,34 @@ class Server extends HttpService
/** /**
* @param $newListener * @param $newListener
* @param $config * @param $config
* @throws NotFindClassException
* @throws ReflectionException
* @throws Exception * @throws Exception
*/ */
private function noHttp($newListener, $config) private function noHttp($newListener, $config)
{ {
$this->onBind($newListener, 'connect', [Snowflake::createObject(OnConnect::class), 'onHandler']); $this->onBindCallback('connect', [make(OnConnect::class), 'onHandler']);
$this->onBind($newListener, 'close', [Snowflake::createObject(OnClose::class), 'onHandler']); $this->onBindCallback('close', [make(OnClose::class), 'onHandler']);
if ($config['type'] == self::TCP) { if ($config['type'] == self::TCP) {
$this->onBind($newListener, 'receive', [$class = new OnReceive(), 'onHandler']); $this->onBindCallback('receive', [make(OnReceive::class), 'onHandler']);
} else { } else {
$this->onBind($newListener, 'packet', [$class = new OnPacket(), 'onHandler']); $this->onBindCallback('packet', [make(OnPacket::class), 'onHandler']);
} }
$class->host = $config['host'];
$class->port = $config['port'];
} }
/** /**
* @param $server
* @param $name * @param $name
* @param $callback * @param $callback
* @throws Exception * @throws Exception
*/ */
private function onBind($server, $name, $callback) public function onBindCallback($name, $callback)
{ {
if (in_array($name, $this->listening)) {
return;
}
array_push($this->listening, $name);
if ($name === 'request') { if ($name === 'request') {
$this->onLoadHttpHandler(); $this->onLoadHttpHandler();
} }
$server->on($name, $callback); if ($this->swoole->getCallback($name) !== null) {
return;
}
$this->swoole->on($name, $callback);
} }
@@ -520,7 +511,7 @@ class Server extends HttpService
$annotation->instanceDirectoryFiles(RPC_SERVICE_PATH); $annotation->instanceDirectoryFiles(RPC_SERVICE_PATH);
$annotation->instanceDirectoryFiles(RPC_CLIENT_PATH); $annotation->instanceDirectoryFiles(RPC_CLIENT_PATH);
} catch (\Throwable $exception) { } catch (\Throwable $exception) {
$this->addError($exception,'throwable'); $this->addError($exception, 'throwable');
} }
}); });
} }
+9 -16
View File
@@ -51,7 +51,7 @@ class Service extends Component
} }
$this->debug(Snowflake::listen($service)); $this->debug(Snowflake::listen($service));
$this->addCallback($server, $mode); $this->addCallback($mode);
$rpcServer = $server->addlistener($service['host'], $service['port'], $mode); $rpcServer = $server->addlistener($service['host'], $service['port'], $mode);
$rpcServer->set($service['setting'] ?? [ $rpcServer->set($service['setting'] ?? [
@@ -76,28 +76,21 @@ class Service extends Component
/** /**
* @param $server
* @param $mode * @param $mode
* @throws ReflectionException
* @throws NotFindClassException
* @throws Exception * @throws Exception
*/ */
private function addCallback($server, $mode) private function addCallback($mode)
{ {
$app = Snowflake::app()->getServer();
$tcp = [SWOOLE_SOCK_TCP, SWOOLE_TCP, SWOOLE_TCP6, SWOOLE_SOCK_TCP6]; $tcp = [SWOOLE_SOCK_TCP, SWOOLE_TCP, SWOOLE_TCP6, SWOOLE_SOCK_TCP6];
if (in_array($mode, $tcp) && !$app->isListen(Server::TCP)) { $server = Snowflake::app()->getServer();
$server->on('connect', [Snowflake::createObject(OnConnect::class), 'onHandler']); $server->onBindCallback('connect', [make(OnConnect::class), 'onHandler']);
$server->on('close', [Snowflake::createObject(OnClose::class), 'onHandler']); $server->onBindCallback('close', [make(OnClose::class), 'onHandler']);
$server->on('receive', [$class = new OnReceive(), 'onHandler']);
}
if (in_array($mode, $tcp) || !$app->isListen(Server::PACKAGE)) { if (in_array($mode, $tcp)) {
$server->on('connect', [Snowflake::createObject(OnConnect::class), 'onHandler']); $server->onBindCallback('receive', [make(OnReceive::class), 'onHandler']);
$server->on('close', [Snowflake::createObject(OnClose::class), 'onHandler']); } else {
$server->on('packet', [$class = new OnPacket(), 'onHandler']); $server->onBindCallback('packet', [make(OnReceive::class), 'onHandler']);
} }
} }
+14 -8
View File
@@ -33,16 +33,22 @@ if (!function_exists('make')) {
* @return mixed * @return mixed
* @throws * @throws
*/ */
function make($name, $default): mixed function make($name, $default = null): mixed
{ {
if (Snowflake::has($name)) { if (class_exists($name)) {
$class = Snowflake::app()->$name; return Snowflake::createObject($default);
} else if (Snowflake::has($default)) {
$class = Snowflake::app()->$default;
} else {
$class = Snowflake::createObject($default);
Snowflake::setAlias($name, $default);
} }
if (Snowflake::has($name)) {
return Snowflake::app()->get($name);
}
if (empty($default)) {
throw new Exception("Unknown component ID: $name");
}
if (Snowflake::has($default)) {
return Snowflake::app()->get($default);
}
$class = Snowflake::createObject($default);
class_alias($name, $default, true);
return $class; return $class;
} }