Browse Source

上传代码优化

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
08d6ebad9c
  1. 38
      lib/modules/pairing/controllers/pairing_controller.dart
  2. 24
      local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/ChatApiService.kt

38
lib/modules/pairing/controllers/pairing_controller.dart

@ -1,18 +1,17 @@
import 'dart:io';
import 'dart:async';
import 'package:app_settings/app_settings.dart';
import 'package:voitrans/data/models/appconfig_model.dart';
import '/data/models/appconfig.dart';
import '/data/models/user_Info.dart';
import '/data/services/network/api.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'dart:async';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../../routes/app_routes.dart';
import '../../../core/utils/logger.dart';
import '/data/models/appconfig_model.dart';
import '/data/models/appconfig.dart';
import '/data/models/user_Info.dart';
import '/data/services/network/api.dart';
import 'dart:io';
import '../../../data/services/bluetooth_manager.dart';
import '../../../data/services/ble_manager.dart';
import '../../../core/utils/permission_util.dart';
@ -348,7 +347,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
void _handleBleStateChange(int state) {
if (_currentState.value == PairingState.waitingBle) {
if (state == 2) {
// 2代表BLE已连接
// BLE已连接
_bleTimeoutTimer?.cancel();
_transition(PairingState.completed);
}
@ -502,33 +501,32 @@ class PairingController extends GetxController with WidgetsBindingObserver {
/// 检查当前状态并决定下一步
void _checkCurrentStatus() async {
try {
// 1. 并行检查蓝牙状态、权限、设备连接
// 1. 检查蓝牙状态
final results = await Future.wait([
_checkBluetoothState(), // 检查蓝牙是否开启
_checkPermissions(), // 检查蓝牙相关权限
_bluetoothManager.refreshDeviceConnection(), // 刷新设备连接状态
_checkBluetoothState(), // 检查蓝牙状态
_checkPermissions(), // 检查权限
_bluetoothManager.refreshDeviceConnection(), // 刷新设备连接
]);
final isBluetoothOk = results[0] as bool;
final arePermissionsOk = results[1] as bool;
//蓝牙没开
if (!isBluetoothOk) {
_setError(
ErrorType.bluetoothOff, 'connectDeepSoundViaSystemBluetooth'.tr);
return;
}
//权限不够
// 2. 检查权限
if (!arePermissionsOk) {
_setError(ErrorType.noPermission, 'pleaseGrantNecessaryPermissions'.tr);
return;
}
// 2. 先刷新设备连接状态,确保获取最新的连接信息
//await _bluetoothManager.refreshDeviceConnection();
// 3. 先刷新设备连接状态,确保获取最新的连接信息
await _bluetoothManager.refreshDeviceConnection();
// 3. 检查经典蓝牙连接
// 4. 检查经典蓝牙连接
final classicDevice = _bluetoothManager.currentDevice;
if (classicDevice == null) {
_transition(PairingState.waitingClassic);
@ -545,7 +543,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
}
}
/// 检查蓝牙状态是否开启
/// 新增一个辅助方法来检查蓝牙状态
Future<bool> _checkBluetoothState() async {
return _bluetoothManager.bluetoothState != 'off';
}
@ -729,7 +727,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
// 检查设备名称是否包含 DeepSound 或 DeapSound
final deviceName = device.name;
DBProduct? product;
// 检查是否已有BLE绑定的设备
/// 检查是否已有BLE绑定的设备
if (AppConfig.config.products.isNotEmpty) {
final match = AppConfig.config.products.where(
@ -898,7 +896,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
await Future.delayed(Duration(seconds: 1));
}
_bleManager.stopScan();
if (product != null && product.devicetype == 2) {
if (product != null && product.devicetype != 0) {
//ble设备 必须要扫描到结果
return 0;
} else {

24
local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/ChatApiService.kt

@ -600,7 +600,29 @@ class ChatApiService(private val context: android.content.Context? = null) : Cor
_mcpClient?.parseJsonArguments(argumentsJson) ?: emptyMap()
}
// 调用MCP工具
val toolResult = _mcpClient?.callTool(functionName, arguments)
val toolResult = try {
withTimeout(60000) { // 60秒超时
_mcpClient?.callTool(functionName, arguments)
}
} catch (e: TimeoutCancellationException) {
Log.w("ChatApiService", "[Session: $sessionid] MCP工具调用超时: $functionName")
mapOf(
"content" to listOf(mapOf(
"type" to "text",
"text" to "Tool call timeout: $functionName"
)),
"isError" to true
)
} catch (e: Exception) {
Log.e("ChatApiService", "[Session: $sessionid] MCP工具调用异常: $functionName", e)
mapOf(
"content" to listOf(mapOf(
"type" to "text",
"text" to "Tool call failed: ${e.message}"
)),
"isError" to true
)
}
Log.d("ChatApiService", "[Session: $sessionid] AI调用工具结果: $functionName, 参数: $arguments, 结果: $toolResult")
// 处理结果
if (toolResult != null) {

Loading…
Cancel
Save