import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:qhd_prevention/http/ApiService.dart'; import 'package:qhd_prevention/services/SessionService.dart'; /// 心跳服务 - 单例模式 /// 每5秒发送一次心跳请求 class HeartbeatService { HeartbeatService._internal(); static final HeartbeatService _instance = HeartbeatService._internal(); factory HeartbeatService() => _instance; Timer? _heartbeatTimer; bool _isRunning = false; bool _isPaused = false; // 用于应用生命周期暂停 /// 心跳间隔(秒) static const Duration heartbeatInterval = Duration(seconds: 5); /// 是否正在运行 bool get isRunning => _isRunning; /// 启动心跳 /// 只有在用户已登录时才会启动 void start() { // 检查是否已登录 if (!SessionService.instance.isLoggedIn) { debugPrint('HeartbeatService: 用户未登录,不启动心跳'); return; } // 如果已经在运行,不重复启动 if (_isRunning && _heartbeatTimer != null) { debugPrint('HeartbeatService: 心跳已在运行'); return; } _isRunning = true; _isPaused = false; debugPrint('HeartbeatService: 启动心跳,间隔 ${heartbeatInterval.inSeconds} 秒'); // 立即发送一次心跳 _sendHeartbeat(); // 启动定时器 _heartbeatTimer = Timer.periodic(heartbeatInterval, (timer) { if (!_isPaused && SessionService.instance.isLoggedIn) { _sendHeartbeat(); } else if (!SessionService.instance.isLoggedIn) { // 如果用户已退出登录,停止心跳 stop(); } }); } /// 停止心跳 void stop() { if (_heartbeatTimer != null) { _heartbeatTimer!.cancel(); _heartbeatTimer = null; } _isRunning = false; _isPaused = false; debugPrint('HeartbeatService: 停止心跳'); } /// 暂停心跳(应用进入后台时) void pause() { if (_isRunning) { _isPaused = true; debugPrint('HeartbeatService: 暂停心跳'); } } /// 恢复心跳(应用回到前台时) void resume() { if (_isRunning && _isPaused) { _isPaused = false; debugPrint('HeartbeatService: 恢复心跳'); // 立即发送一次心跳 _sendHeartbeat(); } } /// 发送心跳请求 Future _sendHeartbeat() async { try { // 检查登录状态 if (!SessionService.instance.isLoggedIn) { debugPrint('HeartbeatService: 用户未登录,停止心跳'); stop(); return; } // 调用心跳接口 // await HiddenDangerApi.heartbeat(); // debugPrint('HeartbeatService: 心跳发送成功'); } catch (e) { debugPrint('HeartbeatService: 心跳发送失败: $e'); // 心跳失败不停止服务,继续尝试 } } }