示例#1
0
        internal LdClientContext(
            Configuration configuration,
            object eventSender,
            IDiagnosticStore diagnosticStore,
            IDiagnosticDisabler diagnosticDisabler
            )
        {
            this.Basic = new BasicConfiguration(configuration.MobileKey);

            var logConfig = (configuration.LoggingConfigurationBuilder ?? Components.Logging())
                            .CreateLoggingConfiguration();
            var logAdapter = logConfig.LogAdapter ?? Logs.None;

            this.BaseLogger = logAdapter.Logger(logConfig.BaseLoggerName ?? LogNames.Base);

            this.EnableBackgroundUpdating = configuration.EnableBackgroundUpdating;
            this.EvaluationReasons        = configuration.EvaluationReasons;
            this.Http = (configuration.HttpConfigurationBuilder ?? Components.HttpConfiguration())
                        .CreateHttpConfiguration(this.Basic);
            this.ServiceEndpoints = configuration.ServiceEndpoints;

            this.DiagnosticStore    = diagnosticStore;
            this.DiagnosticDisabler = diagnosticDisabler;
            this.TaskExecutor       = new TaskExecutor(
                eventSender,
                PlatformSpecific.AsyncScheduler.ScheduleAction,
                this.BaseLogger
                );
        }
        public EventProcessor(
            EventsConfiguration config,
            IEventSender eventSender,
            IUserDeduplicator userDeduplicator,
            IDiagnosticStore diagnosticStore,
            IDiagnosticDisabler diagnosticDisabler,
            Logger logger,
            Action testActionOnDiagnosticSend
            )
        {
            _logger  = logger;
            _stopped = new AtomicBoolean(false);
            _offline = new AtomicBoolean(false);
            _sentInitialDiagnostics = new AtomicBoolean(false);
            _inputCapacityExceeded  = new AtomicBoolean(false);
            _messageQueue           = new BlockingCollection <EventProcessorInternal.IEventMessage>(
                config.EventCapacity > 0 ? config.EventCapacity : 1);

            _processorInternal = new EventProcessorInternal(
                config,
                _messageQueue,
                eventSender,
                userDeduplicator,
                diagnosticStore,
                _logger,
                testActionOnDiagnosticSend
                );

            if (config.EventFlushInterval > TimeSpan.Zero)
            {
                _flushTimer = new Timer(DoBackgroundFlush, null, config.EventFlushInterval,
                                        config.EventFlushInterval);
            }
            _diagnosticStore             = diagnosticStore;
            _diagnosticRecordingInterval = config.DiagnosticRecordingInterval;
            if (userDeduplicator != null && userDeduplicator.FlushInterval.HasValue)
            {
                _flushUsersTimer = new Timer(DoUserKeysFlush, null, userDeduplicator.FlushInterval.Value,
                                             userDeduplicator.FlushInterval.Value);
            }
            else
            {
                _flushUsersTimer = null;
            }

            if (diagnosticStore != null)
            {
                SetupDiagnosticInit(diagnosticDisabler == null || !diagnosticDisabler.Disabled);

                if (diagnosticDisabler != null)
                {
                    diagnosticDisabler.DisabledChanged += ((sender, args) => SetupDiagnosticInit(!args.Disabled));
                }
            }
        }
 private EventProcessor MakeProcessor(EventsConfiguration config, Mock <IEventSender> mockSender,
                                      IDiagnosticStore diagnosticStore, IDiagnosticDisabler diagnosticDisabler, CountdownEvent diagnosticCountdown)
 {
     return(new EventProcessor(config, mockSender.Object, new TestUserDeduplicator(),
                               diagnosticStore, diagnosticDisabler, NullLogger, () => { diagnosticCountdown.Signal(); }));
 }