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(); $node = $router->tree_search(explode('/', Socket::MESSAGE . '::' . $route), 'sw::socket'); if ($node === null) { throw new Exception('Page not found.'); } return $node->dispatch($frame, $server); } }