Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ObservableInstrument.cs
Go to the documentation of this file.
3
5
6public abstract class ObservableInstrument<T> : Instrument where T : struct
7{
8 public override bool IsObservable => true;
9
10 protected ObservableInstrument(Meter meter, string name, string? unit, string? description)
11 : base(meter, name, unit, description)
12 {
13 Instrument.ValidateTypeParameter<T>();
14 }
15
16 protected abstract IEnumerable<Measurement<T>> Observe();
17
18 internal override void Observe(MeterListener listener)
19 {
20 object subscriptionState = GetSubscriptionState(listener);
21 IEnumerable<Measurement<T>> enumerable = Observe();
22 if (enumerable == null)
23 {
24 return;
25 }
26 foreach (Measurement<T> item in enumerable)
27 {
28 listener.NotifyMeasurement(this, item.Value, item.Tags, subscriptionState);
29 }
30 }
31
32 [MethodImpl(MethodImplOptions.AggressiveInlining)]
33 internal IEnumerable<Measurement<T>> Observe(object callback)
34 {
35 if (callback is Func<T> func)
36 {
37 return new Measurement<T>[1]
38 {
39 new Measurement<T>(func())
40 };
41 }
42 if (callback is Func<Measurement<T>> func2)
43 {
44 return new Measurement<T>[1] { func2() };
45 }
46 if (callback is Func<IEnumerable<Measurement<T>>> func3)
47 {
48 return func3();
49 }
50 return null;
51 }
52}
object GetSubscriptionState(MeterListener listener)
override void Observe(MeterListener listener)
IEnumerable< Measurement< T > > Observe()
ObservableInstrument(Meter meter, string name, string? unit, string? description)
IEnumerable< Measurement< T > > Observe(object callback)