/// <summary> /// Callback for channel subscriptions. /// </summary> /// <param name="counterSampleMessage">The counter sample message.</param> private void OnCounterSample(CounterSampleMessage counterSampleMessage) { if (Interlocked.Read(ref state) == 1L) { CounterSampleCollection samples; if (!sampleDictionary.TryGetValue(counterSampleMessage.CounterName, out samples)) { samples = new CounterSampleCollection(counterSampleMessage.CounterName); sampleDictionary.Add(counterSampleMessage.CounterName, samples); } samples.Add(counterSampleMessage.CounterSample); sampleCount++; } }
/// <summary> /// Reads all counters and publishes them into the <see /// cref="F:ExitGames.Diagnostics.Monitoring.CounterSamplePublisher.Channel"/> and the <see /// cref="F:ExitGames.Diagnostics.Monitoring.CounterSamplePublisher.ListChannel"/>. /// </summary> private void Update() { CounterSamplePublisher.CounterPublisherItem[] CounterPublisherItemArray; List <CounterSampleMessage> msg = new List <CounterSampleMessage>(this.items.Count); DateTime currentTimeStamp = DateTime.UtcNow; lock (syncRoot) { CounterPublisherItemArray = this.items.ToArray(); } foreach (CounterSamplePublisher.CounterPublisherItem CounterPublisherItem in CounterPublisherItemArray) { CounterSample sample; if (CounterPublisherItem.TryGetNextValue(currentTimeStamp, out sample)) { CounterSampleMessage message = new CounterSampleMessage(CounterPublisherItem.Name, sample); this.Channel.Publish(message); msg.Add(message); } } this.ListChannel.Publish(msg); }