v0.3.0
Added
MassiveDotNet.WebSocket—MassiveTopicSubscription<T>.MalformedCountand
MassiveStockStream.MalformedObserved, reporting events the wire sent in a shape the SDK's schema
does not accept. Separate fromDroppedCount/DropObservedon purpose: a drop is the consumer's
own backpressure and is fixed by raisingTopicBufferCapacity, while a malformed event is the
server's wire disagreeing with the SDK and the consumer cannot fix it at all.MalformedObserved
carries theJsonException, throttled to at most one raise a second on its own window. The DI
package'sLogStreamHealthbridges it toILoggeratWarning.
Fixed
MassiveDotNet.WebSocket— a value a converter refuses no longer ends the connection. The
event is dropped and counted, and the read loop carries on. The connection is multiplexed, so one
unparseable field on one symbol used to take every other topic's live data down with it. A
malformedevis still terminal: it leaves the reader stranded mid-object with no topic to
attribute the loss to.MassiveDotNet— a numeric range failure now names the value it refused:
The number in StockAggregate.z (12.0) does not fit a 64-bit integer.Utf8JsonReader's
TryGetInt64returnsfalsefor three unrelated reasons and the old message distinguished none
of them. Capped at 32 bytes, and confined to that one failure: the wrong-token-type message names
a token type and has no value to quote, and the decimal round-trip message reads a string token,
where "the bytes are provably a number" does not hold.MassiveDotNet.WebSocket— the SDK now tells the server it is leaving. Every teardown used to
abort the socket, becauseClientWebSocket.Dispose()does not perform the closing handshake, so a
server could not tell a deliberate disconnect from a network failure — which matters on a plan
allowing one connection per cluster. The close is send-only and bounded: collecting a reply would
need something pumpingReceiveAsync, and on both teardown paths nothing is — disposal has
already stopped the read loop, and the reconnect handover runs on it. No public API change.
All four packages — MassiveDotNet, MassiveDotNet.Rest, MassiveDotNet.WebSocket and
MassiveDotNet.Extensions.DependencyInjection — share this version and are published together.
No breaking changes. Two additive public members on MassiveDotNet.WebSocket, both listed above.