diff --git a/ShengShengBuXi.ConsoleApp/Models/PhoneBoothConfig.cs b/ShengShengBuXi.ConsoleApp/Models/PhoneBoothConfig.cs index 051240e..31b03b9 100644 --- a/ShengShengBuXi.ConsoleApp/Models/PhoneBoothConfig.cs +++ b/ShengShengBuXi.ConsoleApp/Models/PhoneBoothConfig.cs @@ -254,5 +254,10 @@ public class CallFlowConfig /// /// 播放电话接起音频的概率(0-1之间的小数) /// - public double PlayPickupProbability { get; set; } = 0.15; + public float PlayPickupProbability { get; set; } = 0.15f; + + /// + /// 用户挂断后是否重置系统,false表示直接退出程序 + /// + public bool ResetSystemAfterHangup { get; set; } = true; } \ No newline at end of file diff --git a/ShengShengBuXi.ConsoleApp/Services/PhoneBoothService.cs b/ShengShengBuXi.ConsoleApp/Services/PhoneBoothService.cs index d0c9380..8d40f84 100644 --- a/ShengShengBuXi.ConsoleApp/Services/PhoneBoothService.cs +++ b/ShengShengBuXi.ConsoleApp/Services/PhoneBoothService.cs @@ -99,11 +99,11 @@ public class PhoneBoothService : IPhoneBoothService, IDisposable _audioFileService = audioFileService; // 获取初始配置 - _config = _signalRService.GetConfigAsync().GetAwaiter().GetResult(); + _config = _signalRService.GetConfigAsync().GetAwaiter().GetResult(); // 注册事件处理 - _signalRService.ConfigUpdated += SignalRService_ConfigUpdated; - _signalRService.AudioFileUpdated += SignalRService_AudioFileUpdated; + //_signalRService.ConfigUpdated += SignalRService_ConfigUpdated; + //_signalRService.AudioFileUpdated += SignalRService_AudioFileUpdated; } /// @@ -608,7 +608,7 @@ public class PhoneBoothService : IPhoneBoothService, IDisposable // 确保背景音乐停止 StopBackgroundMusic(); - Console.WriteLine("录音结束,重置状态..."); + Console.WriteLine("录音结束,处理中..."); // 尝试上传录音文件到服务器 if (File.Exists(_recordingFilePath)) @@ -635,10 +635,27 @@ public class PhoneBoothService : IPhoneBoothService, IDisposable }); } - // 完全重置系统状态 - CompletelyResetState(); - - Console.WriteLine("系统已重置,可以继续使用..."); + // 检查是否由用户挂断或静音触发的结束 + bool isUserHangup = _isHangUpKeyPressed || (DateTime.Now - _lastSoundTime).TotalSeconds >= _config.Recording.SilenceTimeoutSeconds; + + // 根据配置决定是重置系统还是退出程序 + if (isUserHangup && !_config.CallFlow.ResetSystemAfterHangup) + { + Console.WriteLine("用户挂断或静音超时,根据配置将退出程序..."); + // 完全重置系统状态 + //CompletelyResetState(); + // 确保所有资源被释放 + StopAsync().Wait(); + + // 退出程序 + Environment.Exit(0); + } + else + { + // 完全重置系统状态 + CompletelyResetState(); + Console.WriteLine("系统已重置,可以继续使用..."); + } } catch (OperationCanceledException ex) { @@ -647,10 +664,23 @@ public class PhoneBoothService : IPhoneBoothService, IDisposable // 确保录音设备被释放 StopAudioRecording(); - // 取消时也完全重置系统状态 - CompletelyResetState(); - - Console.WriteLine("系统已重置,可以继续使用..."); + // 检查是否需要退出程序 + if (_isHangUpKeyPressed && !_config.CallFlow.ResetSystemAfterHangup) + { + Console.WriteLine("用户挂断,根据配置将退出程序..."); + + // 确保所有资源被释放 + StopAsync().Wait(); + + // 退出程序 + Environment.Exit(0); + } + else + { + // 取消时也完全重置系统状态 + CompletelyResetState(); + Console.WriteLine("系统已重置,可以继续使用..."); + } } catch (Exception ex) { @@ -686,6 +716,8 @@ public class PhoneBoothService : IPhoneBoothService, IDisposable if ((DateTime.Now - _lastSoundTime).TotalSeconds >= silenceTimeout) { Console.WriteLine($"检测到{silenceTimeout}秒无声音,自动挂断"); + // 将静音超时也视为用户挂断的一种形式 + _isHangUpKeyPressed = true; completionSource?.TrySetResult(true); } } diff --git a/ShengShengBuXi.ConsoleApp/Services/SignalRService.cs b/ShengShengBuXi.ConsoleApp/Services/SignalRService.cs index 38ad39e..b4c5376 100644 --- a/ShengShengBuXi.ConsoleApp/Services/SignalRService.cs +++ b/ShengShengBuXi.ConsoleApp/Services/SignalRService.cs @@ -346,13 +346,13 @@ public class SignalRService : ISignalRService await _semaphore.WaitAsync(); try { - _currentConfig = newConfig; + //_currentConfig = newConfig; - // 保存到本地备份 - _currentConfig.SaveToFile(_configBackupPath); + //// 保存到本地备份 + //_currentConfig.SaveToFile(_configBackupPath); - // 触发配置更新事件 - ConfigUpdated?.Invoke(this, _currentConfig); + //// 触发配置更新事件 + //ConfigUpdated?.Invoke(this, _currentConfig); } finally { diff --git a/ShengShengBuXi.ConsoleApp/config.json b/ShengShengBuXi.ConsoleApp/config.json index d270e9a..dc64b8f 100644 --- a/ShengShengBuXi.ConsoleApp/config.json +++ b/ShengShengBuXi.ConsoleApp/config.json @@ -31,6 +31,7 @@ "CallFlow": { "WaitForPickupMinSeconds": 3, "WaitForPickupMaxSeconds": 6, - "PlayPickupProbability": 0.5 + "PlayPickupProbability": 0.5, + "ResetSystemAfterHangup": false } } \ No newline at end of file diff --git a/ShengShengBuXi/Hubs/AudioHub.cs b/ShengShengBuXi/Hubs/AudioHub.cs index 3124594..b088196 100644 --- a/ShengShengBuXi/Hubs/AudioHub.cs +++ b/ShengShengBuXi/Hubs/AudioHub.cs @@ -413,9 +413,6 @@ namespace ShengShengBuXi.Hubs _logger.LogInformation($"结束音频流: {Context.ConnectionId}"); - - - // 结束音频处理 await _audioProcessingService.EndAudioStreamAsync(Context.ConnectionId); // 结束语音识别会话