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); }
protected override void TeardownVariant(int option) { Native.c4dbobs_free(_dbObserver); _dbObserver = null; Native.c4docobs_free(_docObserver); _docObserver = null; base.TeardownVariant(option); }
public void Dispose() { Native.c4docobs_free(Observer); Observer = null; var id = (Guid)_id.Target; _ObserverMap.Remove(id); _id.Free(); }
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); }); }
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())); }); }
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);
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++; }
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); }