ctrlX Data Layer .NET API  4.3.0
Loading...
Searching...
No Matches
SubscriptionPropertiesBuilder.cs
1using comm.datalayer;
2using Google.FlatBuffers;
3using System.Collections.Generic;
4
5namespace Datalayer
6{
11 {
15 private readonly FlatBufferBuilder _builder;
16
20 private readonly List<Offset<Property>> _rules;
21
22
26
27#if NETSTANDARD2_0
28 private uint _errorIntervalMillis = Subscription.DefaultErrorIntervalMillis;
29#else
30 private uint _errorIntervalMillis = ISubscription.DefaultErrorIntervalMillis;
31#endif
32
36 private StringOffset _idOffset;
37
41#if NETSTANDARD2_0
42 private uint _keepAliveIntervalMillis = Subscription.DefaultKeepaliveIntervalMillis;
43#else
44 private uint _keepAliveIntervalMillis = ISubscription.DefaultKeepaliveIntervalMillis;
45#endif
46
50#if NETSTANDARD2_0
51 private uint _publishIntervalMillis = Subscription.DefaultPublishIntervalMillis;
52#else
53 private uint _publishIntervalMillis = ISubscription.DefaultPublishIntervalMillis;
54#endif
55
61 {
62 _builder = new FlatBufferBuilder(Variant.DefaultFlatbuffersInitialSize);
63 _rules = new List<Offset<Property>>();
64
65 // Set mandatory fields in constructor
66 SetId(id);
67 }
68
74 private void SetId(string id)
75 {
76 _idOffset = _builder.CreateString(id);
77 }
78
84 public SubscriptionPropertiesBuilder SetKeepAliveIntervalMillis(uint keepAliveIntervalMillis)
85 {
86 _keepAliveIntervalMillis = keepAliveIntervalMillis;
87 return this;
88 }
89
96 {
97 _publishIntervalMillis = publishIntervalMillis;
98 return this;
99 }
100
107 {
108 _errorIntervalMillis = errorIntervalMillis;
109 return this;
110 }
111
117 public SubscriptionPropertiesBuilder SetSamplingIntervalMillis(ulong samplingIntervalMillis)
118 {
119 var samplingIntervalMicros = samplingIntervalMillis * 1000;
120 var sampling = Sampling.CreateSampling(_builder, samplingIntervalMicros);
121 var samplingProperty = Property.CreateProperty(_builder, Properties.Sampling, sampling.Value);
122 _rules.Add(samplingProperty);
123 return this;
124 }
125
131 public SubscriptionPropertiesBuilder SetSamplingIntervalMicros(ulong samplingIntervalMicros)
132 {
133 var sampling = Sampling.CreateSampling(_builder, samplingIntervalMicros);
134 var samplingProperty = Property.CreateProperty(_builder, Properties.Sampling, sampling.Value);
135 _rules.Add(samplingProperty);
136 return this;
137 }
138
145 {
146 var dataChangeFilter = DataChangeFilter.CreateDataChangeFilter(_builder, deadbandValue);
147 var dataChangeFilterProperty =
148 Property.CreateProperty(_builder, Properties.DataChangeFilter, dataChangeFilter.Value);
149 _rules.Add(dataChangeFilterProperty);
150 return this;
151 }
152
160 public SubscriptionPropertiesBuilder SetChangeEvents(DataChangeTrigger dataChangeTrigger,
161 bool browselistChange = false, bool metadataChange = false)
162 {
163 var changeEvents =
164 ChangeEvents.CreateChangeEvents(_builder, dataChangeTrigger, browselistChange, metadataChange);
165 var changeEventsProperty = Property.CreateProperty(_builder, Properties.ChangeEvents, changeEvents.Value);
166 _rules.Add(changeEventsProperty);
167 return this;
168 }
169
176 public SubscriptionPropertiesBuilder SetQueueing(uint queueSize, QueueBehaviour queueBehaviour)
177 {
178 var queuing = Queueing.CreateQueueing(_builder, queueSize, queueBehaviour);
179 var queuingProperty = Property.CreateProperty(_builder, Properties.Queueing, queuing.Value);
180 _rules.Add(queuingProperty);
181 return this;
182 }
183
189 public SubscriptionPropertiesBuilder SetCounting(bool countSubscriptions)
190 {
191 var counting = Counting.CreateCounting(_builder, countSubscriptions);
192 var countingProperty = Property.CreateProperty(_builder, Properties.Counting, counting.Value);
193 _rules.Add(countingProperty);
194 return this;
195 }
196
201 public Variant Build()
202 {
203 var rulesOffset = _rules.Count == 0
204 ? new VectorOffset(0)
205 : SubscriptionProperties.CreateRulesVector(_builder, _rules.ToArray());
206 var propertiesOffset = SubscriptionProperties.CreateSubscriptionProperties(_builder,
207 _idOffset,
208 _keepAliveIntervalMillis,
209 _publishIntervalMillis,
210 rulesOffset,
211 _errorIntervalMillis);
212
213 SubscriptionProperties.FinishSubscriptionPropertiesBuffer(_builder, propertiesOffset);
214 return new Variant(_builder);
215 }
216 }
217}
Provides a convenient way to build a SubscriptionProperties flatbuffers.
SubscriptionPropertiesBuilder SetSamplingIntervalMicros(ulong samplingIntervalMicros)
Sets the sampling interval in microseconds.
SubscriptionPropertiesBuilder SetQueueing(uint queueSize, QueueBehaviour queueBehaviour)
Sets the queueing.
SubscriptionPropertiesBuilder SetSamplingIntervalMillis(ulong samplingIntervalMillis)
Sets the sampling interval in milliseconds.
SubscriptionPropertiesBuilder SetPublishIntervalMillis(uint publishIntervalMillis)
Sets the publish interval in milliseconds.
SubscriptionPropertiesBuilder SetErrorIntervalMillis(uint errorIntervalMillis)
Sets the error interval in milliseconds.
SubscriptionPropertiesBuilder SetChangeEvents(DataChangeTrigger dataChangeTrigger, bool browselistChange=false, bool metadataChange=false)
Sets the change events.
SubscriptionPropertiesBuilder SetCounting(bool countSubscriptions)
Sets the counting.
SubscriptionPropertiesBuilder(string id)
Initializes a new instance of the SubscriptionPropertiesBuilder class.
Variant Build()
Builds this the SubscriptionProperties as flatbuffers object.
SubscriptionPropertiesBuilder SetDataChangeFilter(float deadbandValue)
Sets the data change filter.
SubscriptionPropertiesBuilder SetKeepAliveIntervalMillis(uint keepAliveIntervalMillis)
Sets the keep alive interval in milliseconds.
Provides the implementation for IVariant.
Definition: Variant.cs:18
static readonly int DefaultFlatbuffersInitialSize
Gets the default Flatbuffers initial size in bytes.
Definition: Variant.cs:730
The ISubscription interface.
static readonly uint DefaultKeepaliveIntervalMillis
The default keep alive interval in milli seconds.
static readonly uint DefaultErrorIntervalMillis
The default error interval in milli seconds.
static readonly uint DefaultPublishIntervalMillis
The default publish interval in milli seconds.