Releases: intelligentplant/AppStoreConnect.Adapters
Releases · intelligentplant/AppStoreConnect.Adapters
1.0.0-RC7
- New
IEventMessagePushWithTopics
feature, that allows adapters to implement an event subscription system where messages are associated with different topics (see #6 for details).- For example, an MQTT adapter could map event message topics to MQTT topics, or an OPC UA adapter could map event message topics to nodes in the OPC UA server's node hierarchy.
- Event message history queries now have properties for specifying a topic or topics, to allow topic-based event implementations to filter responses based on the requested topics.
- Add extension methods for retrieving and converting entries from an
AdapterRequest.Properties
dictionary.
1.0.0-RC6
BREAKING CHANGES:
- See #5 for details.
ISnapshotTagValuePush
andIEventMessagePush
now require a request object to be specified when creating a subscription.- The purpose of the request object is to allow subscription configuration settings to be specified.
- On
IEventMessagePush.Subscribe
, the subscription type parameter has been moved into the subscription request object. - On
ISnapshotTagValuePush.Subscribe
, the new subscription request object allows the caller to define a publish interval, meaning that the subscription will emit new values no more frequently than this limit. - SignalR and gRPC clients and proxies now make separate calls to create/delete tag value subscriptions and the add tags to those subscriptions.
- SignalR server-side implementation now automatically disposes of all registered subscriptions when a connection disconnects.
- gRPC server-side implementation now requires a heartbeat call from the client to confirm that it should keep registered subscriptions alive. This is due to the nature of HTTP/2, where it is difficult to determine if a channel has disconnected or is just idle.
1.0.0-RC5
- Adds interfaces and base classes (e.g.
IAdapterSubscriptionWithTopics<T>
,AdapterSubscriptionWithTopics<T>
) to support generic topic-based subscriptions. ISnapshotTagValueSubscription
has been refactored to implement these new types (tag == topic). TheAddTagToSubscription
andRemoveTagFromSubscription
methods have been refactored as extension methods, available in theDataCore.Adapter.RealTimeData
namespace when referencing theDataCore.Adapter
project.
These changes have been made to facilitate topic-based event streams in the future (e.g. subscribing to specific event message topics in an MQTT broker).
1.0.0-RC4
BREAKING CHANGE:
AssetModelNode
no longer has aChildren
property containing the IDs of its child nodes, but instead has aHasChildren
flag.
Additional Changes:
- Registration of adapter services and adapters in ASP.NET Core has been modified to use a fluent interface.
- The introduction of the new
IAdapterConfigurationBuilder
used to register services etc. will make it easier to register adapter-related extension services in the future. - Existing extension method for registering adapter services is still available, but marked as deprecated.
- The introduction of the new
- Fix a bug in
PlotHelper
that could cause a sample to be added to the wrong time bucket if the gap between one sample and the next was greater than the duration of the bucket. - Background tasks created by adapters inheriting from
AdapterBase
will now automatically observe the adapter'sStopToken
, in addition to any other cancellation tokens specified when registering the task. - Add ability to subscribe to health status changes via
IHealthCheck
. - When unsubscribing from tags,
SnapshotTagValueSubscriptionBase
will check tag IDs/names against known (i.e. currently-subscribed) tags when processing subscription changes, instead of callingResolveTag
. This is to assist with scenarios where e.g. a subscriber attempts to unsubscribe from a tag while an underlying external connection has faulted, meaning that that the subscription implementation might not be able to resolve the tag ID/name. - Added
IRetryPolicy
and associated support classes/implementations toDataCore.Adapter
project, to provide a consistent way for adapters to manage retry attempts when connecting to an external source.
1.0.0-RC3
BREAKING CHANGES
See #3 for details.
- All feature methods that returned
ChannelReader<T>
now returnTask<ChannelReader<T>>
instead. This is to allow adapters that need to perform some sort of asynchronous action in order to create a channel to do so. ReadEventMessages
inIReadEventMessagesForTimeRange
has been renamed toReadEventMessagesForTimeRange
.ReadEventMessages
inIReadEventMessagesUsingCursor
has been renamed toReadEventMessagesUsingCursor
.
1.0.0-RC2
- URL is now an allowed Variant type.
- Dependency on
Grpc.Core
has been removed for .NET Standard 2.1 and .NET Core 3.1 targets. AdapterBase<TAdapterOptions>
now enforces anew()
constraint onTAdapterOptions
.IAdapter
now has anIsEnabled
flag, to allow adapters to be registered but disabled.- Adapters inheriting from
AdapterBase<TAdapterOptions>
can set theIsEnabled
flag via the adapter options class (see this commit). - Cancellation of subscriptions in gRPC endpoints should no longer result in OperationCanceledException propagation.
- Catch exceptions thrown during shutdown of
Grpc.Core
channels (when running a gRPC proxy on .NET Framework)
1.0.0-RC1
- Refactoring of gRPC and SignalR tag value subscriptions (#2)
- This is a breaking change for existing clients/hosts. Recompiling against this version will resolve the issue.
- Event subscription implementation in gRPC and SignalR endpoints no longer sends an initial "subscription created" event message.
DELTA
aggregate now computes a signed value instead of an absolute one.- Added
STDDEV
andVARIANCE
aggregates. - Fix gRPC=>adapter conversion of
AdapterProperty
instances that haveDateTime
values to ensure that dates are correctly deserialized as UTC. - Move common tag value property names to be constants in separate class.
0.13.2-alpha
- Better handing of health checks when using
Grpc.Core
channels. - When an error message is set on a
TagValueBuilder
, the quality status is automatically set to bad. - Data function descriptors now include properties to describe how the sample time and quality status of a value are calculated.
- Boundary values in
TagValueBucket
have been refactored to provide both a closest value and a best-quality closest value - General tidy up
0.13.1-alpha
- If
AggregationHelper
emits a value representing an error, the value now has bad-quality status. - Values emitted by
AggregationHelper
,PlotHelper
, andIntepolationHelper
now include a property indicating that they were calculated using a non-native calculation.
0.13.0-alpha
Remove use of IHttpContextAccessor IHttpContextAccessor is unreliable when working with SignalR. Responsibility for creating an IAdapterCallContext for a given call has been shifted from DI to the endpoint handler.