コード例 #1
0
 /// <summary>
 /// Add new session channel to the list of active channels.
 /// </summary>
 /// <param name="sessionChannel"></param>
 public void AddSessionChannel(ISessionChannel sessionChannel)
 {
     RequiresNotDisposed();
     CodeContract.RequiresArgumentNotNull <ISessionChannel>(sessionChannel, "sessionChannel");
     if (IsValidChannel(sessionChannel))
     {
         EventProcessor.AddChannel(sessionChannel);
         if ((sessionChannel.Properties & ChannelProperties.Default) == ChannelProperties.Default)
         {
             defaultSessionChannelsId.Add(sessionChannel.ChannelId);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Set up telemetry session properties
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="initializerObject"></param>
        /// <param name="isCloned"></param>
        private TelemetrySession(TelemetrySessionSettings settings, bool isCloned, TelemetrySessionInitializer initializerObject)
        {
            CodeContract.RequiresArgumentNotNull <TelemetrySessionInitializer>(initializerObject, "initializerObject");
            initializerObject.Validate();
            initializerObject.AppInsightsInstrumentationKey = settings.AppInsightsInstrumentationKey;
            initializerObject.AsimovInstrumentationKey      = settings.AsimovInstrumentationKey;
            TelemetryService.EnsureEtwProviderInitialized();
            sessionInitializer      = initializerObject;
            sessionSettings         = settings;
            isSessionCloned         = isCloned;
            cancellationTokenSource = initializerObject.CancellationTokenSource;
            diagnosticTelemetry     = initializerObject.DiagnosticTelemetry;
            identityTelemetry       = initializerObject.IdentityTelemetry;
            optinStatusReader       = initializerObject.OptinStatusReader;
            channelValidators       = initializerObject.ChannelValidators;
            telemetryBufferChannel  = new TelemetryBufferChannel();
            initializerObject.WatsonSessionChannelBuilder.Build(this);
            WatsonSessionChannel sessionChannel = initializerObject.WatsonSessionChannelBuilder.WatsonSessionChannel;

            if (IsValidChannel(sessionChannel))
            {
                watsonSessionChannel = sessionChannel;
            }
            machineInformationProvider    = initializerObject.MachineInformationProvider;
            macInformationProvider        = initializerObject.MACInformationProvider;
            userInformationProvider       = initializerObject.UserInformationProvider;
            defaultContextPropertyManager = initializerObject.DefaultContextPropertyManager;
            persistentPropertyBag         = initializerObject.PersistentPropertyBag;
            initializerObject.EventProcessorChannelBuilder.Build(this);
            persistentSharedProperties = initializerObject.PersistentSharedProperties;
            EventProcessor             = initializerObject.EventProcessorChannelBuilder.EventProcessor;
            if (initializerObject.CustomActionToAdd != null)
            {
                foreach (IEventProcessorAction item in initializerObject.CustomActionToAdd)
                {
                    EventProcessor.AddCustomAction(item);
                }
            }
            eventProcessorChannel    = initializerObject.EventProcessorChannelBuilder.EventProcessorChannel;
            telemetryManifestManager = new Lazy <ITelemetryManifestManager>(() => initializerObject.TelemetryManifestManagerBuilder.Build(this));
            contextScheduler         = initializerObject.ContextScheduler;
            if (initializerObject.ChannelsToAdd != null)
            {
                AddSessionChannels(initializerObject.ChannelsToAdd);
            }
            defaultContext = CreateDefaultContext();
            macInformationProvider.MACAddressHashCalculationCompleted += MACAddressHashCalculationCompleted;
            identityTelemetry.IdentityInformationProvider.HardwareIdCalculationCompleted += HardwareIdCalculationCompleted;
        }
コード例 #3
0
        /// <summary>
        /// Start synchronous dispose
        /// </summary>
        /// <returns>can we continue with dispose or not</returns>
        private bool DisposeStart()
        {
            if (Interlocked.CompareExchange(ref startedDisposing, 1, 0) == 1)
            {
                return(false);
            }
            disposeLatencyTimer = new Stopwatch();
            disposeLatencyTimer.Start();
            if (!isInitialized)
            {
                if (!isSessionStarted)
                {
                    Start();
                }
                if (!ManifestManager.ForceReadManifest())
                {
                    TelemetryManifestUpdateStatus(this, new TelemetryManifestEventArgs(null));
                }
                MACAddressHashCalculationCompleted(this, EventArgs.Empty);
                HardwareIdCalculationCompleted(this, EventArgs.Empty);
            }
            macInformationProvider.MACAddressHashCalculationCompleted -= MACAddressHashCalculationCompleted;
            identityTelemetry.IdentityInformationProvider.HardwareIdCalculationCompleted -= HardwareIdCalculationCompleted;
            ManifestManager.UpdateTelemetryManifestStatusEvent -= TelemetryManifestUpdateStatus;
            ManifestManager.Dispose();
            cancellationTokenSource.Cancel();
            defaultContextPropertyManager.Dispose();
            EventProcessor.PostDiagnosticInformationIfNeeded();
            customEventPostProtection.TryEnterWriteLock(1000);
            List <TelemetryContext> list;

            lock (sessionContextStack)
            {
                list = sessionContextStack.Reverse().ToList();
            }
            foreach (TelemetryContext item in list)
            {
                item.Dispose();
            }
            return(true);
        }