already($service)); } $this->debug(Snowflake::listen($service)); $this->addCallback($server, $mode); $rpcServer = $server->addlistener($service['host'], $service['port'], $mode); $rpcServer->set($service['setting'] ?? [ 'open_tcp_keepalive' => true, 'tcp_keepidle' => 30, 'tcp_keepinterval' => 10, 'tcp_keepcount' => 10, 'open_http_protocol' => false, 'open_websocket_protocol' => false, ]); } /** * @param $service * @return string */ #[Pure] private function already($service): string { return sprintf('Port %s::%d is already.', $service['host'], $service['port']); } /** * @param $server * @param $mode * @throws ReflectionException * @throws NotFindClassException * @throws Exception */ private function addCallback($server, $mode) { $app = Snowflake::app()->getServer(); $tcp = [SWOOLE_SOCK_TCP, SWOOLE_TCP, SWOOLE_TCP6, SWOOLE_SOCK_TCP6]; if (in_array($mode, $tcp) && !$app->isListen(Server::TCP)) { $server->on('connect', [Snowflake::createObject(OnConnect::class), 'onHandler']); $server->on('close', [Snowflake::createObject(OnClose::class), 'onHandler']); $server->on('receive', [$class = new OnReceive(), 'onHandler']); } if (in_array($mode, $tcp) || !$app->isListen(Server::PACKAGE)) { $server->on('connect', [Snowflake::createObject(OnConnect::class), 'onHandler']); $server->on('close', [Snowflake::createObject(OnClose::class), 'onHandler']); $server->on('packet', [$class = new OnPacket(), 'onHandler']); } } }