/// <summary> /// Initializes a Manager that stores Databases in the given directory. /// </summary> /// <param name="directoryFile"><see cref="System.IO.DirectoryInfo"/> object for initializing the Manager object.</param> /// <param name="options">Option flags for initialization.</param> /// <exception cref="T:System.IO.DirectoryNotFoundException">Thrown when there is an error while accessing or creating the given directory.</exception> public Manager(DirectoryInfo directoryFile, ManagerOptions options) { this.directoryFile = directoryFile; _options = options ?? DefaultOptions; this.databases = new Dictionary <string, Database>(); this.replications = new List <Replication>(); Shared = new SharedState(); //create the directory, but don't fail if it already exists if (!directoryFile.Exists) { directoryFile.Create(); directoryFile.Refresh(); if (!directoryFile.Exists) { throw new DirectoryNotFoundException("Unable to create directory " + directoryFile); } } UpgradeOldDatabaseFiles(directoryFile); #if __IOS__ Foundation.NSString protection; switch (options.FileProtection & Foundation.NSDataWritingOptions.FileProtectionMask) { case Foundation.NSDataWritingOptions.FileProtectionNone: protection = Foundation.NSFileManager.FileProtectionNone; break; case Foundation.NSDataWritingOptions.FileProtectionComplete: protection = Foundation.NSFileManager.FileProtectionComplete; break; case Foundation.NSDataWritingOptions.FileProtectionCompleteUntilFirstUserAuthentication: protection = Foundation.NSFileManager.FileProtectionCompleteUntilFirstUserAuthentication; break; default: protection = Foundation.NSFileManager.FileProtectionCompleteUnlessOpen; break; } var attributes = new Foundation.NSDictionary(Foundation.NSFileManager.FileProtectionKey, protection); Foundation.NSError error; Foundation.NSFileManager.DefaultManager.SetAttributes(attributes, directoryFile.FullName, out error); #endif var scheduler = options.CallbackScheduler; CapturedContext = new TaskFactory(scheduler); workExecutor = new TaskFactory(new SingleTaskThreadpoolScheduler()); Log.D(TAG, "New Manager uses a scheduler with a max concurrency level of {0}".Fmt(workExecutor.Scheduler.MaximumConcurrencyLevel)); _networkReachabilityManager = new NetworkReachabilityManager(); _networkReachabilityManager.StartListening(); SharedCookieStore = new CookieStore(this.directoryFile.FullName); StorageType = "SQLite"; }
public void TestNetworkAvailabilityChanged() { var countdown = 2; var handler = new NetworkReachabilityManager(); handler.StatusChanged += (sender, args) => { if (args.Status == NetworkReachabilityStatus.Reachable) { countdown -= 1; } }; handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Unreachable); handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Reachable); handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Reachable); Assert.AreEqual(0, countdown); }
/// <summary> /// Initializes a Manager that stores Databases in the given directory. /// </summary> /// <param name="directoryFile"><see cref="System.IO.DirectoryInfo"/> object for initializing the Manager object.</param> /// <param name="options">Option flags for initialization.</param> /// <exception cref="T:System.IO.DirectoryNotFoundException">Thrown when there is an error while accessing or creating the given directory.</exception> public Manager(DirectoryInfo directoryFile, ManagerOptions options) { if (directoryFile == null) { Log.To.Database.E(TAG, "directoryFile cannot be null in ctor, throwing..."); throw new ArgumentNullException("directoryFile"); } this.directoryFile = directoryFile; Options = options ?? DefaultOptions; this.databases = new Dictionary <string, Database>(); this.replications = new List <Replication>(); Shared = new SharedState(); //create the directory, but don't fail if it already exists if (!directoryFile.Exists) { directoryFile.Create(); directoryFile.Refresh(); if (!directoryFile.Exists) { throw Misc.CreateExceptionAndLog(Log.To.Database, StatusCode.InternalServerError, TAG, "Unable to create directory {0}", directoryFile); } } UpgradeOldDatabaseFiles(directoryFile); #if __IOS__ Foundation.NSString protection; switch (options.FileProtection & Foundation.NSDataWritingOptions.FileProtectionMask) { case Foundation.NSDataWritingOptions.FileProtectionNone: protection = Foundation.NSFileManager.FileProtectionNone; break; case Foundation.NSDataWritingOptions.FileProtectionComplete: protection = Foundation.NSFileManager.FileProtectionComplete; break; case Foundation.NSDataWritingOptions.FileProtectionCompleteUntilFirstUserAuthentication: protection = Foundation.NSFileManager.FileProtectionCompleteUntilFirstUserAuthentication; break; default: protection = Foundation.NSFileManager.FileProtectionCompleteUnlessOpen; break; } var attributes = new Foundation.NSDictionary(Foundation.NSFileManager.FileProtectionKey, protection); Foundation.NSError error; Foundation.NSFileManager.DefaultManager.SetAttributes(attributes, directoryFile.FullName, out error); #endif var scheduler = options.CallbackScheduler; CapturedContext = new TaskFactory(scheduler); Log.To.TaskScheduling.I(TAG, "Callbacks will be scheduled on {0}", scheduler); workExecutor = new TaskFactory(new SingleTaskThreadpoolScheduler()); _networkReachabilityManager = new NetworkReachabilityManager(); _networkReachabilityManager.StartListening(); StorageType = "SQLite"; Log.To.Database.I(TAG, "Created {0}", this); }
public virtual void SetNetworkReachabilityManager(NetworkReachabilityManager networkReachabilityManager ) { }
public void TestNetworkAvailabilityChanged() { var countdown = 2; var handler = new NetworkReachabilityManager(); handler.StatusChanged += (sender, args) => { if(args.Status == NetworkReachabilityStatus.Reachable) { countdown -= 1; } }; handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Unreachable); handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Reachable); handler.InvokeNetworkChangeEvent(NetworkReachabilityStatus.Reachable); Assert.AreEqual(0, countdown); }