private static void OnDocEnded(C4Replicator *repl, bool pushing, IntPtr numDocs, C4DocumentEnded **docs, void *context) { if (docs == null || numDocs == IntPtr.Zero) { return; } var replicatedDocumentsContainConflict = new List <ReplicatedDocument>(); var documentReplications = new List <ReplicatedDocument>(); for (int i = 0; i < (int)numDocs; i++) { var current = docs[i]; if (!pushing && current->error.domain == C4ErrorDomain.LiteCoreDomain && current->error.code == (int)C4ErrorCode.Conflict) { replicatedDocumentsContainConflict.Add(new ReplicatedDocument(current->docID.CreateString() ?? "", current->flags, current->error, current->errorIsTransient)); } else { documentReplications.Add(new ReplicatedDocument(current->docID.CreateString() ?? "", current->flags, current->error, current->errorIsTransient)); } } var replicator = GCHandle.FromIntPtr((IntPtr)context).Target as Replicator; if (documentReplications.Count > 0) { replicator?.DispatchQueue.DispatchAsync(() => { replicator.OnDocEnded(documentReplications, pushing); }); } if (replicatedDocumentsContainConflict.Count > 0) { replicator?.DispatchQueue.DispatchAsync(() => { replicator.OnDocEndedWithConflict(replicatedDocumentsContainConflict); }); } }
private static void OnDocEnded(C4Replicator *repl, bool pushing, IntPtr numDocs, C4DocumentEnded **docs, void *context) { if (docs == null || numDocs == IntPtr.Zero) { return; } var documentReplications = new ReplicatedDocument[(int)numDocs]; for (int i = 0; i < (int)numDocs; i++) { var current = docs[i]; documentReplications[i] = new ReplicatedDocument(current->docID.CreateString() ?? "", current->flags, current->error, current->errorIsTransient); } var replicator = GCHandle.FromIntPtr((IntPtr)context).Target as Replicator; replicator?.DispatchQueue.DispatchAsync(() => { replicator.OnDocEnded(documentReplications, pushing); }); }