Skip to content

v0.3.0

Choose a tag to compare

@jerbersoft jerbersoft released this 22 Sep 18:03

Added

  • MassiveDotNet.WebSocket — MassiveTopicSubscription<T>.MalformedCount and
    MassiveStockStream.MalformedObserved, reporting events the wire sent in a shape the SDK's schema
    does not accept. Separate from DroppedCount/DropObserved on purpose: a drop is the consumer's
    own backpressure and is fixed by raising TopicBufferCapacity, while a malformed event is the
    server's wire disagreeing with the SDK and the consumer cannot fix it at all. MalformedObserved
    carries the JsonException, throttled to at most one raise a second on its own window. The DI
    package's LogStreamHealth bridges it to ILogger at Warning.

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
    malformed ev is 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
    TryGetInt64 returns false for 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, because ClientWebSocket.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 pumping ReceiveAsync, 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.