コード例 #1
0
        internal override Realm CreateRealm(RealmSchema schema)
        {
            var handle = new SharedRealmHandle(_nativeRealmPtr);

            handle.GetSchema(nativeSchema => schema = RealmSchema.CreateFromObjectStoreSchema(nativeSchema));
            return(new Realm(handle, this, schema));
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
        }