From 654fbc30c22c7fb8932cd99df7245e260c0662ac Mon Sep 17 00:00:00 2001 From: ImBenji Date: Thu, 28 Aug 2025 21:16:04 +0100 Subject: [PATCH] Refactor heartbeat initialization to accept operational seed and remove redundant registration logic --- lib/services/supabase_heartbeat.dart | 52 ++++------------------------ 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/lib/services/supabase_heartbeat.dart b/lib/services/supabase_heartbeat.dart index e192536..233c161 100644 --- a/lib/services/supabase_heartbeat.dart +++ b/lib/services/supabase_heartbeat.dart @@ -10,26 +10,19 @@ import 'package:waylume_server/config/supabase_config.dart'; import 'package:waylume_server/services/rolling_codes_service.dart'; import 'package:waylume_server/core/utils.dart'; -void initHeartbeat() { +void initHeartbeat(String operationalSeed) { // Run this on a separate thread. - Isolate.spawn((_) async { + Isolate.spawn((String seed) async { // Initialize rolling codes service in this isolate await RollingCodesService.initialize(); + + // Set the operational seed that was passed from main isolate + RollingCodesService.setOperationalSeed(seed); // To avoid server deadlock and wait for main registration await Future.delayed(Duration(seconds: 10 + Random().nextInt(5))); - - // The heartbeat isolate needs to have the operational seed - // Since isolates don't share memory, we need to register again in this isolate - // This will get the same operational seed since the server_id is the same - try { - await _registerInHeartbeatIsolate(); - } catch (e) { - print("Failed to register in heartbeat isolate: $e"); - return; - } while (true) { DateTime now = DateTime.now().toUtc(); @@ -85,43 +78,10 @@ void initHeartbeat() { await Future.delayed(Duration(seconds: 90)); } - }, null); + }, operationalSeed); } -Future _registerInHeartbeatIsolate() async { - // Generate registration rolling code - String registrationAuth = RollingCodesService.generateRegistrationCode(); - - // Call server-manager registration endpoint - String serverManagerUrl = 'https://lsdrctuvnwdrzrdyoqzu.supabase.co/functions/v1/server-manager'; - - Map requestBody = { - 'server_id': fromEnivronment('SERVER_ID')!, - 'registration_auth': registrationAuth, - }; - - final response = await http.post( - Uri.parse(serverManagerUrl), - headers: { - 'Content-Type': 'application/json', - }, - body: jsonEncode(requestBody), - ); - - if (response.statusCode == 200) { - final responseData = jsonDecode(response.body); - if (responseData['success']) { - // Store operational seed in memory for this isolate - RollingCodesService.setOperationalSeed(responseData['operational_seed']); - print('Heartbeat isolate registered successfully'); - } else { - throw Exception('Heartbeat isolate registration failed: ${responseData['error']}'); - } - } else { - throw Exception('Heartbeat isolate registration request failed: ${response.statusCode}'); - } -} Future> _getServerStatus() async { int activeConnections = 0;