import 'dart:async'; import 'package:yumi/shared/data_sources/sources/local/user_manager.dart'; import 'package:yumi/shared/data_sources/sources/repositories/sc_user_repository_impl.dart'; import '../../shared/data_sources/models/enum/sc_heartbeat_status.dart'; class SCHeartbeatUtils { static Timer? _h; static Timer? _a; static String _c = SCHeartbeatStatus.ONLINE.name; static String? _r; static bool _u = false; ///定时发送心跳 static void scheduleHeartbeat( String status, bool upMick, { String? roomId, }) async { cancelTimer(); _c = status; _u = upMick; _r = roomId; if (AccountStorage().getToken().isEmpty) { return; } try { await SCAccountRepository().heartbeat(_c, _u, roomId: _r); _h ??= Timer.periodic(Duration(seconds: 60), (timer) { if (AccountStorage().getToken().isEmpty) { cancelTimer(); return; } SCAccountRepository() .heartbeat(_c, _u, roomId: _r) .catchError((_) => {}); }); } catch (e) { try { cancelTimer(); } catch (_) {} } } static void cancelTimer() { _h?.cancel(); _h = null; _r = null; cancelAnchorTimer(); } ///上麦主播发送心跳 static void scheduleAnchorHeartbeat(String roomId) async { cancelAnchorTimer(); scheduleHeartbeat(_c, true, roomId: roomId); SCAccountRepository().anchorHeartbeat(roomId).whenComplete(() { _a ??= Timer.periodic(Duration(seconds: 60), (timer) { SCAccountRepository().anchorHeartbeat(roomId).catchError((_) => {}); }); }); } static void cancelAnchorTimer() { _a?.cancel(); _a = null; _u = false; } }