opcode != 0x08) { $event = Snowflake::app()->getEvent(); $content = $this->resolve($event, $frame, $server); if (!empty($content)) { $server->send($frame->fd, $content); } } } catch (\Throwable $exception) { $this->addError($exception, 'websocket'); $server->send($frame->fd, $exception->getMessage()); } finally { fire(Event::SYSTEM_RESOURCE_RELEASES); logger()->insert(); } } /** * @param $event * @param $frame * @param $server * @return mixed * @throws Exception */ private function resolve($event, $frame, $server): mixed { if ($event->exists(Event::SERVER_MESSAGE)) { $event->trigger(Event::SERVER_MESSAGE, [$server, $frame]); } else { $frame->data = json_decode($frame->data, true); } if (empty($route = $frame->data['route'] ?? null)) { throw new Exception('Format error.'); } $router = Snowflake::app()->getRouter(); $context = Config::get('router', false, ROUTER_TREE); if ($context === ROUTER_TREE) { $node = $router->tree_search(explode('/', Socket::MESSAGE . '::' . $route), 'sw::socket'); } else { $node = $router->search('/' . Socket::HANDSHAKE . '::' . $route, 'sw::socket'); } if ($node === null) { throw new Exception('Page not found.'); } return $node->dispatch($frame, $server); } }