legacy_gantt_protocol 1.0.0 copy "legacy_gantt_protocol: ^1.0.0" to clipboard
legacy_gantt_protocol: ^1.0.0 copied to clipboard

A pure-Dart protocol synchronization library for Gantt Charts.

example/example.dart

import 'package:legacy_gantt_protocol/legacy_gantt_protocol.dart';
import 'package:uuid/uuid.dart';

void main() {
  print('=== Legacy Gantt Protocol Example ===\n');

  // 1. Setup - Create two independent "replicas" (Client A and Client B)
  final engine = CRDTEngine();

  // State is external to the engine
  List<ProtocolTask> tasksA = [];
  List<ProtocolTask> tasksB = [];

  // 2. Client A creates a task
  final taskId = const Uuid().v4();
  final createOp = Operation(
    type: 'INSERT_TASK',
    data: {
      'id': taskId,
      'name': 'Project Plan',
      'start': DateTime.now().toIso8601String(),
      'end': DateTime.now().add(const Duration(days: 5)).toIso8601String(),
    },
    timestamp: Hlc.fromDate(DateTime.now(), 'client_a'),
    actorId: 'client_a',
  );

  print('Client A: Created Task "${createOp.data['name']}"');
  tasksA = engine.mergeTasks(tasksA, [createOp]);

  // 3. Client B also creates/merges the same task (simulation of receiving sync)
  print('Client B: Received Task creation');
  tasksB = engine.mergeTasks(tasksB, [createOp]);

  // 4. Concurrent Editing!
  print('\n-- Concurrent Edits --');
  final renameOpA = Operation(
    type: 'UPDATE_TASK',
    data: {'id': taskId, 'name': 'Project Plan (Updated by A)'},
    timestamp: Hlc.fromDate(DateTime.now().add(const Duration(seconds: 1)), 'client_a'),
    actorId: 'client_a',
  );
  print('Client A: Renames to "${renameOpA.data['name']}"');
  tasksA = engine.mergeTasks(tasksA, [renameOpA]);

  // Client B completes the task (at a slightly later time)
  final completeOpB = Operation(
    type: 'UPDATE_TASK',
    data: {'id': taskId, 'completion': 1.0},
    timestamp: Hlc.fromDate(DateTime.now().add(const Duration(seconds: 2)), 'client_b'),
    actorId: 'client_b',
  );
  print('Client B: Marks completion as 100%');
  tasksB = engine.mergeTasks(tasksB, [completeOpB]);

  // 5. Sync Loop - Exchange operations
  print('\n-- Syncing --');
  print('Client A receives B\'s completion...');
  tasksA = engine.mergeTasks(tasksA, [completeOpB]);

  print('Client B receives A\'s rename...');
  tasksB = engine.mergeTasks(tasksB, [renameOpA]);

  // 6. Verify Convergence
  final taskA = tasksA.firstWhere((t) => t.id == taskId);
  final taskB = tasksB.firstWhere((t) => t.id == taskId);

  print('\n=== Final State ===');
  print('Client A: ${taskA.name}, Complete: ${taskA.completion}');
  print('Client B: ${taskB.name}, Complete: ${taskB.completion}');

  if (taskA.contentHash == taskB.contentHash) {
    print('\nSUCCESS: Replicas have converged! Hash: ${taskA.contentHash.substring(0, 8)}...');
  } else {
    print('\nFAILURE: Replicas diverged!');
  }
}
3
likes
0
points
281
downloads

Publisher

verified publishergantt-sync.com

Weekly Downloads

A pure-Dart protocol synchronization library for Gantt Charts.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

collection, crypto, meta, uuid

More

Packages that depend on legacy_gantt_protocol