Exemple #1
0
        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;
        }
Exemple #2
0
        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));
     }
 }
Exemple #4
0
        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);
 }