Skip to content

Commit ccd4280

Browse files
committed
feat: add configDir and preset auto-restart
1 parent db578cb commit ccd4280

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

packages/core/src/bridge/handlers/command-handlers.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,17 +410,27 @@ export function createPresetConfigGetCommand(deps: CommandDependencies): Command
410410
* Preset config set handler
411411
*/
412412
export function createPresetConfigSetCommand(deps: CommandDependencies): CommandHandler<Record<string, any>> {
413-
return withErrorHandling(async (command) => {
413+
return withErrorHandling(async (command, ctx) => {
414414
const config = command.payload?.config
415415
if (!config || typeof config !== 'object') {
416416
throw new Error('preset.set requires payload.config')
417417
}
418418

419+
const restart = command.payload?.restart ?? true
420+
419421
deps.process.savePresetConfig(config)
420422

421423
// Regenerate config file
422424
await deps.process.generateConfig(true)
423425

426+
// Restart process if it's running and restart is not false
427+
if (restart && deps.process.isRunning()) {
428+
await deps.process.stop()
429+
await deps.process.start()
430+
}
431+
432+
ctx.requestVersionBump()
433+
424434
return {
425435
status: 'success',
426436
result: config

packages/core/src/process/controllers/preset-config-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export class PresetConfigManager {
4949

5050
if (!existsSync(presetPath)) {
5151
// 返回默认配置
52-
this.logger.info(`Preset config not found, using defaults for ${type}`)
52+
this.logger.info(`Preset config not found at ${presetPath}, using defaults for ${type}`)
5353
return {
5454
[type]: DEFAULT_PRESET_CONFIG[type] || {}
5555
}

packages/core/src/process/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ export interface FrpProcessManagerOptions {
4646
workDir?: string
4747
/** Path to config file (overrides default) */
4848
configPath?: string
49+
/** Config directory for preset configs (overrides workDir/config) */
50+
configDir?: string
4951
/** FRP version (defaults to latest) */
5052
version?: string
5153
/** Mode: client or server */
@@ -85,6 +87,7 @@ export class FrpProcessManager extends EventEmitter {
8587
private readonly specifiedVersion?: string
8688
private readonly logger: RuntimeLogger
8789
private readonly configPath: string
90+
private readonly configDir: string
8891

8992
// Component instances
9093
private readonly processController: ProcessController
@@ -105,6 +108,7 @@ export class FrpProcessManager extends EventEmitter {
105108
this.specifiedVersion = options.version
106109
this.workDir = options.workDir || join(homedir(), '.frp-bridge')
107110
this.configPath = options.configPath || join(this.workDir, `frp${this.mode === 'client' ? 'c' : 's'}.toml`)
111+
this.configDir = options.configDir || join(this.workDir, 'config')
108112
this.logger = options.logger ?? consola.withTag('FrpProcessManager')
109113

110114
// Initialize components
@@ -117,6 +121,7 @@ export class FrpProcessManager extends EventEmitter {
117121
})
118122
this.presetConfigManager = new PresetConfigManager({
119123
workDir: this.workDir,
124+
configDir: this.configDir,
120125
logger: this.logger
121126
})
122127

@@ -378,7 +383,7 @@ export class FrpProcessManager extends EventEmitter {
378383
}
379384

380385
// 3. 使用 saveFrpConfigFile 生成配置文件
381-
saveFrpConfigFile(this.configPath, tunnels, presetConfig, type)
386+
saveFrpConfigFile(this.configPath, tunnels, presetConfig, type, this.logger)
382387

383388
this.logger.info(`Generated FRP config: ${this.configPath}`)
384389
}

0 commit comments

Comments
 (0)