Example #1
0
        private static void DocObserverCallback(C4DocumentObserver *observer, C4Slice docID, ulong sequence, void *context)
        {
            var idHolder = GCHandle.FromIntPtr((IntPtr)context);
            var id       = (Guid)idHolder.Target;
            var obj      = _ObserverMap[id];

            obj._callback?.Invoke(observer, docID.CreateString(), sequence, obj._context);
        }
Example #2
0
        protected override void TeardownVariant(int option)
        {
            Native.c4dbobs_free(_dbObserver);
            _dbObserver = null;
            Native.c4docobs_free(_docObserver);
            _docObserver = null;

            base.TeardownVariant(option);
        }
Example #3
0
        public void Dispose()
        {
            Native.c4docobs_free(Observer);
            Observer = null;
            var id = (Guid)_id.Target;

            _ObserverMap.Remove(id);
            _id.Free();
        }
Example #4
0
        private static void DocObserverCallback(C4DocumentObserver *obs, string docID, ulong sequence, object context)
        {
            if (docID == null)
            {
                return;
            }

            var dbObj = (Database)context;

            dbObj?._callbackFactory.StartNew(() => {
                dbObj.PostDocChanged(docID);
            });
        }
Example #5
0
        public DocumentObserver(C4Database *database, string docID, DocumentObserverCallback callback, object context)
        {
            _context        = context;
            _callback       = callback;
            _nativeCallback = DocObserverCallback;
            var id = Guid.NewGuid();

            _id      = GCHandle.Alloc(id, GCHandleType.Pinned);
            Observer = (C4DocumentObserver *)LiteCoreBridge.Check(err => {
                _ObserverMap[id] = this;
                return(Native.c4docobs_create(database, docID, _nativeCallback, GCHandle.ToIntPtr(_id).ToPointer()));
            });
        }
Example #6
0
        public void TestDocObserver()
        {
            RunTestVariants(() => {
                var handle = GCHandle.Alloc(this);
                try {
                    CreateRev("A", C4Slice.Constant("1-aa"), Body);
                    _docObserver = Native.c4docobs_create(Db, "A", DocObserverCallback,
                                                          GCHandle.ToIntPtr(handle).ToPointer());

                    CreateRev("A", C4Slice.Constant("2-bb"), Body);
                    CreateRev("B", C4Slice.Constant("1-bb"), Body);
                    _docCallbackCalls.Should().Be(1, "because there was only one update to the doc in question");
                } finally {
                    handle.Free();
                }
            });
        }
 public static extern void c4docobs_free(C4DocumentObserver *observer);
Example #8
0
 private void DocObserverCalled(C4DocumentObserver *obs, string docID, ulong sequence)
 {
     ((long)obs).Should().Be((long)_docObserver, "because the callback should be for the proper DB");
     _docCallbackCalls++;
 }
Example #9
0
        private static void DocObserverCallback(C4DocumentObserver *obs, FLSlice docId, ulong sequence, void *context)
        {
            var obj = GCHandle.FromIntPtr((IntPtr)context).Target as ObserverTest;

            obj.DocObserverCalled(obs, docId.CreateString(), sequence);
        }
 public void c4docobs_free(C4DocumentObserver *observer) => Native.c4docobs_free(observer);
 public static void c4docobs_free(C4DocumentObserver *observer) => Impl.c4docobs_free(observer);
 private static void DocObserverCallback(C4DocumentObserver *obs, string docID, ulong sequence, object context)
 {
     ((ObserverTest)context).DocObserverCalled(obs, docID, sequence);
 }