LCOV - code coverage report
Current view: top level - manager - sync_isolate_manager.dart (source / functions) Hit Total Coverage
Test: coverage.lcov Lines: 0 60 0.0 %
Date: 2022-01-19 17:54:05 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:convert';
       2             : import 'dart:isolate';
       3             : 
       4             : import 'package:at_client/at_client.dart';
       5             : import 'package:at_client/src/client/remote_secondary.dart';
       6             : import 'package:at_commons/at_builders.dart';
       7             : import 'package:at_utils/at_logger.dart';
       8             : 
       9             : class SyncIsolateManager {
      10           0 :   static final SyncIsolateManager _singleton = SyncIsolateManager._internal();
      11             : 
      12           0 :   SyncIsolateManager._internal();
      13             : 
      14           0 :   factory SyncIsolateManager.getInstance() {
      15           0 :     return _singleton;
      16             :   }
      17             : 
      18           0 :   static var logger = AtSignLogger('SyncIsolateManager');
      19             : 
      20           0 :   static void syncImmediateIsolate(SendPort sendPort) {
      21             :     try {
      22           0 :       var isolateReceive = ReceivePort();
      23           0 :       sendPort.send(isolateReceive.sendPort);
      24           0 :       isolateReceive.listen((message) async {
      25           0 :         var builder = message['builder'];
      26           0 :         var atSign = message['atsign'];
      27           0 :         var preference = message['preference'];
      28           0 :         var privateKey = message['privateKey'];
      29             :         var remoteSecondary =
      30           0 :             RemoteSecondary(atSign, preference, privateKey: privateKey);
      31           0 :         var verbResult = await remoteSecondary.executeVerb(builder);
      32           0 :         logger.info('syncIsolate result:$verbResult');
      33           0 :         var serverCommitId = verbResult.split(':')[1];
      34           0 :         sendPort.send(serverCommitId);
      35             :       });
      36           0 :     } on Exception catch (e) {
      37           0 :       logger.severe('exception in syncImmediateIsolate ${e.toString()}');
      38             :     }
      39             :   }
      40             : 
      41           0 :   static void executeRemoteCommandIsolate(SendPort sendPort) async {
      42             :     try {
      43           0 :       var isolateReceive = ReceivePort();
      44           0 :       sendPort.send(isolateReceive.sendPort);
      45           0 :       isolateReceive.listen((message) async {
      46           0 :         var operation = message['operation'];
      47           0 :         var atSign = message['atsign'];
      48           0 :         var preference = message['preference'];
      49           0 :         var privateKey = message['private_key'];
      50             :         var remoteSecondary =
      51           0 :             RemoteSecondary(atSign, preference, privateKey: privateKey);
      52             : 
      53             :         switch (operation) {
      54           0 :           case 'get_commit_id':
      55             :             // Send stats verb to get latest server commit id.
      56             :             int? commitId;
      57           0 :             var builder = StatsVerbBuilder()..statIds = '3';
      58           0 :             var result = await remoteSecondary.executeVerb(builder);
      59           0 :             result = result.replaceAll('data: ', '');
      60           0 :             var statsJson = jsonDecode(result);
      61           0 :             if (statsJson[0]['value'] != 'null') {
      62           0 :               commitId = int.parse(statsJson[0]['value']);
      63             :             }
      64           0 :             var isolateResult = <String, dynamic>{};
      65           0 :             isolateResult['operation'] = 'get_commit_id_result';
      66           0 :             isolateResult['commit_id'] = commitId;
      67           0 :             sendPort.send(isolateResult);
      68             :             break;
      69           0 :           case 'get_server_commits':
      70             :             // send sync verb to get latest changes from server
      71           0 :             var lastSyncedId = message['last_synced_commit_id'];
      72           0 :             var result = await remoteSecondary.sync(lastSyncedId);
      73           0 :             var isolateResult = <String, dynamic>{};
      74           0 :             isolateResult['operation'] = 'get_server_commits_result';
      75           0 :             isolateResult['sync_response'] = result;
      76           0 :             sendPort.send(isolateResult);
      77             :             break;
      78           0 :           case 'push_to_remote':
      79             :             // execute update/delete verb on server
      80           0 :             var builder = message['builder'];
      81           0 :             var result = await remoteSecondary.executeVerb(builder);
      82           0 :             var serverCommitId = result.split(':')[1];
      83           0 :             var isolateResult = <String, dynamic>{};
      84           0 :             isolateResult['operation'] = 'push_to_remote_result';
      85           0 :             isolateResult['operation_commit_id'] = serverCommitId;
      86           0 :             isolateResult['entry_key'] = message['entry_key'];
      87           0 :             logger.info(
      88           0 :                 'pushed to remote:${builder.atKey}:${builder.sharedWith} ${isolateResult['entry_key']} $serverCommitId');
      89           0 :             sendPort.send(isolateResult);
      90             :             break;
      91             :         }
      92             :       });
      93           0 :     } on Exception catch (e) {
      94           0 :       logger.severe('exception in executeRemoteCommandIsolate ${e.toString()}');
      95             :     }
      96             :   }
      97             : }

Generated by: LCOV version 1.13