Files
kitchen/lib/src/controllers/user/online_controller.dart
2026-04-15 07:11:28 +08:00

61 lines
1.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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<String, dynamic> onlineStats = <String, dynamic>{}.obs;
final RxMap<String, dynamic> requestStats = <String, dynamic>{}.obs;
Timer? _heartbeatTimer;
@override
void onInit() {
super.onInit();
Future.delayed(Duration.zero, () {
loadOnlineStats();
startHeartbeat();
});
}
@override
void onClose() {
_heartbeatTimer?.cancel();
super.onClose();
}
Future<void> loadOnlineStats() async {
try {
onlineStats.value = await _statsRepository.fetchOnlineStats();
} catch (_) {}
}
Future<void> loadRequestStats() async {
try {
requestStats.value = await _statsRepository.fetchRequestStats();
} catch (_) {}
}
void startHeartbeat() {
_heartbeatTimer?.cancel();
_heartbeatTimer = Timer.periodic(
const Duration(seconds: 30),
(_) => _sendHeartbeat(),
);
_sendHeartbeat();
}
Future<void> _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;
}