// 2026-04-09 | OnlineController | 在线统计控制器 | 管理心跳和在线数据 // 2026-04-10 | API v2.0.0: OnlineRepository → StatsRepository,移除 timeline 方法 import 'dart:async'; import 'package:get/get.dart'; import 'package:mom_kitchen/src/controllers/base_controller.dart'; import 'package:mom_kitchen/src/repositories/online_repository.dart' as repo; class OnlineController extends BaseController { final repo.StatsRepository _statsRepository = repo.StatsRepository(); final RxMap onlineStats = {}.obs; final RxMap requestStats = {}.obs; Timer? _heartbeatTimer; @override void onInit() { super.onInit(); Future.delayed(Duration.zero, () { loadOnlineStats(); startHeartbeat(); }); } @override void onClose() { _heartbeatTimer?.cancel(); super.onClose(); } Future loadOnlineStats() async { try { onlineStats.value = await _statsRepository.fetchOnlineStats(); } catch (_) {} } Future loadRequestStats() async { try { requestStats.value = await _statsRepository.fetchRequestStats(); } catch (_) {} } void startHeartbeat() { _heartbeatTimer?.cancel(); _heartbeatTimer = Timer.periodic( const Duration(seconds: 30), (_) => _sendHeartbeat(), ); _sendHeartbeat(); } Future _sendHeartbeat() async { try { await _statsRepository.sendHeartbeat(platform: 'ios'); } catch (_) {} } int get onlineTotal => onlineStats['online_total'] as int? ?? 0; int get online10min => onlineStats['online_10min'] as int? ?? 0; int get online1hour => onlineStats['online_1hour'] as int? ?? 0; }