LdClient(Configuration configuration, User user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } _config = configuration ?? throw new ArgumentNullException(nameof(configuration)); persister = Factory.CreatePersistentStorage(configuration); deviceInfo = Factory.CreateDeviceInfo(configuration); flagChangedEventManager = Factory.CreateFlagChangedEventManager(configuration); _user = DecorateUser(user); flagCacheManager = Factory.CreateFlagCacheManager(configuration, persister, flagChangedEventManager, User); _connectionManager = new ConnectionManager(); _connectionManager.SetForceOffline(configuration.Offline); if (configuration.Offline) { Log.InfoFormat("Starting LaunchDarkly client in offline mode"); } _connectionManager.SetUpdateProcessorFactory( Factory.CreateUpdateProcessorFactory(configuration, User, flagCacheManager, _inBackground), true ); _connectivityStateManager = Factory.CreateConnectivityStateManager(configuration); _connectivityStateManager.ConnectionChanged += networkAvailable => { Log.DebugFormat("Setting online to {0} due to a connectivity change event", networkAvailable); _ = _connectionManager.SetNetworkEnabled(networkAvailable); // do not await the result eventProcessor.SetOffline(!networkAvailable || _connectionManager.ForceOffline); }; var isConnected = _connectivityStateManager.IsConnected; _connectionManager.SetNetworkEnabled(isConnected); eventProcessor = Factory.CreateEventProcessor(configuration); eventProcessor.SetOffline(configuration.Offline || !isConnected); // Send an initial identify event, but only if we weren't explicitly set to be offline if (!configuration.Offline) { eventProcessor.SendEvent(_eventFactoryDefault.NewIdentifyEvent(User)); } _backgroundModeManager = _config._backgroundModeManager ?? new DefaultBackgroundModeManager(); _backgroundModeManager.BackgroundModeChanged += OnBackgroundModeChanged; }
public FlagCacheManager(IUserFlagCache inMemoryCache, IUserFlagCache deviceCache, IFlagChangedEventManager flagChangedEventManager, User user) { this.inMemoryCache = inMemoryCache; this.deviceCache = deviceCache; this.flagChangedEventManager = flagChangedEventManager; var flagsFromDevice = deviceCache.RetrieveFlags(user); if (flagsFromDevice != null) { inMemoryCache.CacheFlagsForUser(flagsFromDevice, user); } }
internal static IFlagCacheManager CreateFlagCacheManager(Configuration configuration, IPersistentStorage persister, IFlagChangedEventManager flagChangedEventManager, User user) { if (configuration._flagCacheManager != null) { return(configuration._flagCacheManager); } else { var inMemoryCache = new UserFlagInMemoryCache(); var deviceCache = configuration.PersistFlagValues ? new UserFlagDeviceCache(persister) as IUserFlagCache : new NullUserFlagCache(); return(new FlagCacheManager(inMemoryCache, deviceCache, flagChangedEventManager, user)); } }
internal Configuration(ConfigurationBuilder builder) { _allAttributesPrivate = builder._allAttributesPrivate; _backgroundPollingInterval = builder._backgroundPollingInterval; _baseUri = builder._baseUri; _connectionTimeout = builder._connectionTimeout; _enableBackgroundUpdating = builder._enableBackgroundUpdating; _evaluationReasons = builder._evaluationReasons; _eventFlushInterval = builder._eventFlushInterval; _eventCapacity = builder._eventCapacity; _eventsUri = builder._eventsUri; _httpMessageHandler = object.ReferenceEquals(builder._httpMessageHandler, ConfigurationBuilder.DefaultHttpMessageHandlerInstance) ? PlatformSpecific.Http.CreateHttpMessageHandler(builder._connectionTimeout, builder._readTimeout) : builder._httpMessageHandler; _inlineUsersInEvents = builder._inlineUsersInEvents; _isStreamingEnabled = builder._isStreamingEnabled; _mobileKey = builder._mobileKey; _offline = builder._offline; _persistFlagValues = builder._persistFlagValues; _pollingInterval = builder._pollingInterval; _privateAttributeNames = builder._privateAttributeNames is null ? null : builder._privateAttributeNames.ToImmutableHashSet(); _readTimeout = builder._readTimeout; _reconnectTime = builder._reconnectTime; _streamUri = builder._streamUri; _useReport = builder._useReport; _userKeysCapacity = builder._userKeysCapacity; _userKeysFlushInterval = builder._userKeysFlushInterval; _backgroundModeManager = builder._backgroundModeManager; _connectivityStateManager = builder._connectivityStateManager; _deviceInfo = builder._deviceInfo; _eventProcessor = builder._eventProcessor; _flagCacheManager = builder._flagCacheManager; _flagChangedEventManager = builder._flagChangedEventManager; _persistentStorage = builder._persistentStorage; _updateProcessorFactory = builder._updateProcessorFactory; }
internal ConfigurationBuilder FlagChangedEventManager(IFlagChangedEventManager flagChangedEventManager) { _flagChangedEventManager = flagChangedEventManager; return(this); }