Note: I've tagged the wrong commit. The actual commit for v2.1.0 is 39a5509.
New In This Release
- Upgraded to Rx 3.0 for all targets (except for the .NET 4.0 libraries, since Rx 3.0 doesn't support it. They still require Rx 2.2.5.)
- Fixed a major bug that introduced a subtle race condition, sometimes resulting in duplex observable notifications to be observed in the wrong order; i.e., not the order in which they were sent/received.
- Custom expression visitors can now be added to the
QbservableServiceOptions
instance that you pass to the service operators/factories, allowing you to easily view or manipulate the expression tree before it's processed, without having to build your ownIQbservableProvider
implementation. - Implemented graceful socket shutdown in the golden path.
- Improved
ShutdownReason
by makingQbservableProtocolShutdownReason
aFlags
enum. Client termination notifications now include an accurate account of the reasons for shutdown. When logging the reason, you'll often see a comma-separated list; e.g.,ObservableTerminated, ClientTerminated
, meaning that the observable terminated and then the client initiated the socket shutdown process. - Added support for specifying 0 as the service port on the host. This worked previously, but the provider's
EndPoint
property remains 0 because it represents more than one potential host simultaneously, each with distinct ports. To acquire the port that TCP chooses when you specify 0, theITcpQactiveProviderTransportInitializer
interface has two new methods:StartedListener
andStoppedListener
. Each provides the server number and the real TCP-selected port (in the form of the fullEndPoint
) as parameters. This is technically a breaking API change but since it's not very significant I'll treat it as minor. (As a bonus, the unit tests now generate unique server ports, so they can be run in parallel.) - Starting, stopping, connecting and disconnecting, are now all being traced by the TCP provider for logging and diagnostic purposes.
- Improved
QbservableServiceOptions
'sAdd
method so that it can be called whenIsFrozen
is true; in that case, a clone is returned instead. - Defined new types in Qactive.Expressions:
ExpressionEqualityComparer
andEqualityExpressionVisitor
. They are not used in Qactive's libraries. Currently, they are only used for unit testing.
New In Recent Releases
- Added .NET 4.0 to the NuGet packages.
- Subject and variants are now interpreted as duplex observables, without having to cast to
IObservable<T>
first. - Non-closure duplex callbacks are now supported; e.g.,
providerSource.CombineLatest(localObservable, ...)
- Logging improvements.
- Error handling improvements.
- Bug fixes.
- Unit tests.
Download from NuGet
Qactive.Providers.Tcp
Depends on Rx, Qactive.Providers.Streaming, Qactive.Expressions and Qactive
Runtimes: .NET Framework 4.6.1, .NET Framework 4.5.2, .NET Framework 4.0
Qactive.Providers.Streaming
Depends on Rx, Qactive.Expressions and Qactive
Runtimes: .NET Framework 4.6.1, .NET Framework 4.5.2, .NET Framework 4.0
Qactive
Depends on Rx
Runtimes: .NET Framework 4.6.1, .NET Framework 4.5.2, .NET Framework 4.0, ASP.NET Core 1.0, Windows 8, Windows Phone 8.1, Xamarin.Android, Xamarin.iOS
Qactive.Expressions
No dependencies
Runtimes: .NET Framework 4.6.1, .NET Framework 4.5.2, .NET Framework 4.0