veilidchat/lib/tick.dart

62 lines
1.2 KiB
Dart
Raw Normal View History

2023-08-08 06:03:26 +00:00
import 'dart:async';
import 'package:flutter/material.dart';
2024-01-05 03:29:43 +00:00
import 'package:veilid_support/veilid_support.dart';
2023-08-08 06:03:26 +00:00
2024-01-05 03:29:43 +00:00
import 'veilid_processor/veilid_processor.dart';
2023-08-08 06:03:26 +00:00
2023-12-27 01:26:54 +00:00
class BackgroundTicker extends StatefulWidget {
2024-04-10 20:13:08 +00:00
const BackgroundTicker({required this.child, super.key});
2023-08-08 06:03:26 +00:00
2024-04-10 20:13:08 +00:00
final Widget child;
2023-08-08 06:03:26 +00:00
@override
BackgroundTickerState createState() => BackgroundTickerState();
}
2023-12-27 01:26:54 +00:00
class BackgroundTickerState extends State<BackgroundTicker> {
2023-08-08 06:03:26 +00:00
Timer? _tickTimer;
bool _inTick = false;
@override
void initState() {
super.initState();
_tickTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
if (!_inTick) {
unawaited(_onTick());
}
});
}
@override
void dispose() {
final tickTimer = _tickTimer;
if (tickTimer != null) {
tickTimer.cancel();
}
super.dispose();
}
@override
// ignore: prefer_expression_function_bodies
Widget build(BuildContext context) {
2024-04-10 20:13:08 +00:00
return widget.child;
2023-08-08 06:03:26 +00:00
}
Future<void> _onTick() async {
2024-01-05 03:29:43 +00:00
if (!ProcessorRepository
.instance.processorConnectionState.isPublicInternetReady) {
2023-10-21 23:23:43 +00:00
return;
}
2023-09-26 22:46:02 +00:00
2023-08-08 06:03:26 +00:00
_inTick = true;
try {
2024-01-05 03:29:43 +00:00
// Tick DHT record pool
2024-02-29 01:32:37 +00:00
unawaited(DHTRecordPool.instance.tick());
2023-08-08 06:03:26 +00:00
} finally {
_inTick = false;
}
}
}