예제 #1
0
        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);
                });
            }
        }
예제 #2
0
        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);
            });
        }