internal override async Task <Realm> CreateRealmAsync(RealmSchema schema, CancellationToken cancellationToken) { var configuration = CreateNativeConfiguration(); var syncConfiguration = CreateNativeSyncConfiguration(); var tcs = new TaskCompletionSource <ThreadSafeReferenceHandle>(); var tcsHandle = GCHandle.Alloc(tcs); ProgressNotificationToken progressToken = null; try { using var handle = SharedRealmHandle.OpenWithSyncAsync(configuration, syncConfiguration, schema, EncryptionKey, tcsHandle); cancellationToken.Register(() => { if (!handle.IsClosed) { handle.Cancel(); tcs.TrySetCanceled(); } }); if (OnProgress != null) { progressToken = new ProgressNotificationToken( observer: (progress) => { OnProgress(progress); }, register: handle.RegisterProgressNotifier, unregister: (token) => { if (!handle.IsClosed) { handle.UnregisterProgressNotifier(token); } }); } using var realmReference = await tcs.Task; var realmPtr = SharedRealmHandle.ResolveFromReference(realmReference); var sharedRealmHandle = new SharedRealmHandle(realmPtr); if (IsDynamic && !schema.Any()) { sharedRealmHandle.GetSchema(nativeSchema => schema = RealmSchema.CreateFromObjectStoreSchema(nativeSchema)); } return(new Realm(sharedRealmHandle, this, schema)); } finally { tcsHandle.Free(); progressToken?.Dispose(); } }
internal override Realm CreateRealm(RealmSchema schema) { var configuration = CreateNativeConfiguration(); var syncConfiguration = CreateNativeSyncConfiguration(); var srHandle = SharedRealmHandle.OpenWithSync(configuration, syncConfiguration, schema, EncryptionKey); if (IsDynamic && !schema.Any()) { srHandle.GetSchema(nativeSchema => schema = RealmSchema.CreateFromObjectStoreSchema(nativeSchema)); } return new Realm(srHandle, this, schema); }
internal override Realm CreateRealm(RealmSchema schema) { var configuration = new Realms.Native.Configuration { Path = DatabasePath, schema_version = SchemaVersion, enable_cache = EnableCache }; var srHandle = SharedRealmHandleExtensions.OpenWithSync(configuration, ToNative(), schema, EncryptionKey); if (IsDynamic && !schema.Any()) { srHandle.GetSchema(nativeSchema => schema = RealmSchema.CreateFromObjectStoreSchema(nativeSchema)); } return(new Realm(srHandle, this, schema)); }