flowProcessor = $this->createFlowProcessor(); } /** * 创建流程处理器 * * 根据配置创建对应的 FlowProcessor */ private function createFlowProcessor(): FlowProcessor { $useCustomProcess = Config::getInstance()->flowUseCustomProcess; $processConfigKey = Config::getInstance()->flowProcessConfigKey; // 流程配置 通过流程配置可以实现,加载/卸载流程节点,添加/修改语音输出 $processConfig = null; if ($useCustomProcess && !empty($processConfigKey)) { // 从全局配置加载自定义流程 $globalConfig = Config::getInstance(); $customProcess = $globalConfig->customProcess; $processConfigArray = $customProcess[$processConfigKey] ?? null; if ($processConfigArray !== null) { Logger::info("使用自定义流程: {}", [$processConfigKey]); $processConfig = ProcessConfig::fromArray($processConfigArray); return FlowProcessor::create($processConfig); } } Logger::info("FlowMain 使用默认标准流程"); Logger::info("使用数据库: {}",[ Config::getInstance()->database->database]); $processConfig = ProcessConfig::createStandard(); // 使用默认标准流程 return FlowProcessor::create($processConfig); } /** * Flow主入口方法 * * @param PacketContext $packetContext 数据包上下文 * @return ProcessContext */ public function main(PacketContext $packetContext): ProcessContext { // 调用流程处理器处理数据包并返回处理完成后的上下文 // process 参数:数据包上下文 // process 参数: 是否执行结果处理器,默认是执行 // 返回值: 处理完成后的数据包上下文 $packetContext = $this->flowProcessor->process($packetContext); return $packetContext; } /** * 获取流程处理器实例 * * @return FlowProcessor */ public function getFlowProcessor(): FlowProcessor { return $this->flowProcessor; } /** * 重新加载配置(配置热更新) * * @return void */ public function reloadConfig(): void { $this->flowProcessor = $this->createFlowProcessor(); } /** * 切换流程配置 * * @param string $configKey 配置键名(如 'standard', 'no_morning_wash') * @return void */ public function switchConfig(string $configKey): void { self::$processConfigKey = $configKey; $this->reloadConfig(); } /** * 重置单例(主要用于测试) * * @return void */ public static function resetInstance(): void { self::$instance = null; } }