modify plugin name

This commit is contained in:
2022-02-14 10:42:27 +08:00
parent f1a9b74122
commit 567ceb69c0
2 changed files with 89 additions and 130 deletions
+58 -99
View File
@@ -3,7 +3,6 @@
namespace Kiri\Server\Coroutine; namespace Kiri\Server\Coroutine;
use Kiri\Abstracts\Component; use Kiri\Abstracts\Component;
use Kiri\Events\EventDispatch;
use Kiri\Exception\ConfigException; use Kiri\Exception\ConfigException;
use Kiri\Server\Constant; use Kiri\Server\Constant;
use Kiri\Server\ProcessManager; use Kiri\Server\ProcessManager;
@@ -79,14 +78,17 @@ class Http extends Component
} }
public function start(array $config) /**
* @param array $config
* @param $daemon
* @return void
* @throws ContainerExceptionInterface
* @throws Exception
* @throws NotFoundExceptionInterface
*/
public function initBaseServer(array $config, $daemon)
{ {
$this->configs = $this->sortService($config['ports']); $this->configs = $config;
run(function () use ($config) {
$event = \Kiri::getDi()->get(EventDispatch::class);
$this->startTaskWorker($config);
foreach ($config as $value) { foreach ($config as $value) {
$value = $this->resolveCallback($value); $value = $this->resolveCallback($value);
if ($value['type'] == Constant::SERVER_TYPE_HTTP) { if ($value['type'] == Constant::SERVER_TYPE_HTTP) {
@@ -94,8 +96,12 @@ class Http extends Component
if (is_null($onRequest)) { if (is_null($onRequest)) {
throw new \Exception('Server callback con\'t null.'); throw new \Exception('Server callback con\'t null.');
} }
Coroutine::create(function () use ($value, $event, $onRequest) { $server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
$this->bindHttpService($value, $onRequest);
$this->servers[$value['port']] = $server;
$server->handle('/', function (Request $request, Response $response) use ($onRequest) {
call_user_func($onRequest, $request, $response);
}); });
} else if ($value['type'] == Constant::SERVER_TYPE_WEBSOCKET) { } else if ($value['type'] == Constant::SERVER_TYPE_WEBSOCKET) {
$handshake = $value['events'][Constant::HANDSHAKE] ?? null; $handshake = $value['events'][Constant::HANDSHAKE] ?? null;
@@ -108,93 +114,6 @@ class Http extends Component
throw new \Exception('Server callback con\'t null.'); throw new \Exception('Server callback con\'t null.');
} }
Coroutine::create(function () use ($value, $handshake, $open, $close, $message) {
$this->WebSocketService($value, $handshake, $open, $close, $message);
});
} else {
$message = $value['events'][Constant::RECEIVE] ?? null;
if (is_null($message)) {
throw new \Exception('Server callback con\'t null.');
}
$conn = $value['events'][Constant::CONNECT] ?? null;
$close = $value['events'][Constant::CLOSE] ?? null;
Coroutine::create(function () use ($value, $message, $conn, $close) {
$this->bindTcpService($value, $message, $conn, $close);
});
}
}
});
}
/**
* @param $value
* @param $onRequest
* @return void
* @throws \Exception
*/
protected function bindHttpService($value, $onRequest)
{
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
$this->servers[$value['port']] = $server;
$server->handle('/', function (Request $request, Response $response) use ($onRequest) {
call_user_func($onRequest, $request, $response);
});
$server->start();
$this->bindHttpService($value, $onRequest);
}
/**
* @param $value
* @param $message
* @param $conn
* @param $close
* @return void
* @throws Exception
*/
protected function bindTcpService($value, $message, $conn, $close)
{
$server = new Coroutine\Server($value['host'], $value['port'], null, true);
$this->servers[$value['port']] = $server;
$server->handle(function (Coroutine\Server\Connection $connection) use ($message, $conn, $close) {
if (!is_null($conn)) {
call_user_func($conn, $connection);
}
while (true) {
$data = $connection->recv(1024);
if ($data === '' || $data === false) {
defer(function () use ($close, $connection) {
call_user_func($close, $connection);
});
$connection->close();
break;
}
call_user_func($message, $data);
}
});
$server->start();
$this->bindTcpService($value, $message, $conn, $close);
}
/**
* @param $value
* @param $handshake
* @param $open
* @param $close
* @param $message
* @return void
*/
private function WebSocketService($value, $handshake, $open, $close, $message)
{
$server = new Coroutine\Http\Server($value['host'], $value['port'], null, true); $server = new Coroutine\Http\Server($value['host'], $value['port'], null, true);
$sender = $this->getContainer()->get(Sender::class); $sender = $this->getContainer()->get(Sender::class);
@@ -216,9 +135,49 @@ class Http extends Component
} }
call_user_func($close, $response->fd); call_user_func($close, $response->fd);
}); });
$server->start(); } else {
$message = $value['events'][Constant::RECEIVE] ?? null;
if (is_null($message)) {
throw new \Exception('Server callback con\'t null.');
}
$conn = $value['events'][Constant::CONNECT] ?? null;
$close = $value['events'][Constant::CLOSE] ?? null;
$this->WebSocketService($value, $handshake, $open, $close, $message); $server = new Coroutine\Server($value['host'], $value['port'], null, true);
$this->servers[$value['port']] = $server;
$server->handle(function (Coroutine\Server\Connection $connection) use ($message, $conn, $close) {
if (!is_null($conn)) {
call_user_func($conn, $connection);
}
while (true) {
$data = $connection->recv(1024);
if ($data === '' || $data === false) {
defer(function () use ($close, $connection) {
call_user_func($close, $connection);
});
$connection->close();
break;
}
call_user_func($message, $data);
}
});
}
}
}
public function start()
{
run(function () {
$this->startTaskWorker($this->configs);
foreach ($this->servers as $value) {
Coroutine::create(function () use ($value) {
$value->start();
});
}
});
} }
+2 -2
View File
@@ -42,7 +42,7 @@ class Server extends HttpService
public State $state; public State $state;
public ServerManager $manager; public Kiri\Server\Coroutine\Http $manager;
/** /**
@@ -50,7 +50,7 @@ class Server extends HttpService
*/ */
public function init() public function init()
{ {
$this->manager = Kiri::getContainer()->get(ServerManager::class); $this->manager = Kiri::getContainer()->get(Kiri\Server\Coroutine\Http::class);
$enable_coroutine = Config::get('servers.settings.enable_coroutine', false); $enable_coroutine = Config::get('servers.settings.enable_coroutine', false);
Config::set('servers.settings.enable_coroutine', true); Config::set('servers.settings.enable_coroutine', true);
if ($enable_coroutine != true) { if ($enable_coroutine != true) {