AyCode.Core/AyCode.Core/Extensions
Loretta 2d04b9f8f6 Zero-copy SignalR: direct object response, no SignalData
Major overhaul for SignalR response pipeline:
- All deserialization now uses byte[] (offset/length) for zero-copy, allocation-free operation; all span/memory overloads removed.
- SignalR protocol sends (signalParams, object) directly; SignalData envelope and related logic removed.
- Server sets SignalParams.SignalDataType so protocol deserializes to the correct runtime type on the client.
- SignalResponseDataMessage now only used for client request/response tracking and stream path; RawResponseData holds the actual object.
- All extension methods, helpers, and infrastructure updated to use new byte[]-based APIs.
- AcSignalRDataSource and all test/benchmark code updated for new object flow.
- Removes all diagnostics, logging, and error handling related to binary envelopes.
- Enables true zero-copy, type-safe, allocation-free SignalR response handling.
2026-04-06 22:45:00 +02:00
..
CollectionExtensions.cs CollectionExtensions UpdateCollectionById<TId> 2025-11-07 14:10:30 +01:00
CollectionExtensionsInt.cs CollectionExtensionsInt 2025-10-06 07:46:17 +02:00
EnumExtensions.cs updates 2024-10-28 14:02:06 +01:00
ExceptionExtensions.cs Add ExceptionExtensions... 2024-05-19 07:48:43 +02:00
GuidExtensions.cs improvements, fixes 2024-06-03 07:48:33 +02:00
README.md Document AcBinary wire format, sync docs, update conventions 2026-03-29 09:11:57 +02:00
SerializeObjectExtensions.cs Zero-copy SignalR: direct object response, no SignalData 2026-04-06 22:45:00 +02:00

README.md

Extensions

Extension methods for collections, serialization, and common utilities.

Key Files

  • CollectionExtensions.csIList<T> extensions for IId<Guid> entities: UpdateCollection() (add/update/remove with TrackingState), FindIndex(), BinarySearch(), safe indexing.
  • CollectionExtensionsInt.cs — Same as above but for IId<int> entities.
  • SerializeObjectExtensions.cs — Unified serialization API via extension methods:
    • .ToJson(), .JsonTo<T>() — JSON serialization (Newtonsoft + custom HybridReferenceResolver with Base62 semantic IDs)
    • .ToBinary(), .BinaryTo<T>() — Binary serialization
    • .CloneTo<TDest>(), .CopyTo() — Object cloning
    • .JsonToChain<T>(), .BinaryToChain<T>() — Multi-deserialize chains
    • .BinaryToMerge<T>() — IId-aware collection merging
    • Includes: JsonReferencePostProcessor (strips unreferenced $id), PooledStringWriter (StringBuilder pooling)
  • EnumExtensions.csGetDisplayName() via DisplayAttribute reflection.
  • ExceptionExtensions.csGetCategoryAndMemberNameFromStackTraceString() for structured caller info extraction.
  • GuidExtensions.csIsNullOrEmpty() for Guid and Guid? with [NotNullWhen] annotations.