Remove SegmentBufferReader; unify on AsyncPipeReaderInput Migrates all SignalR chunked streaming receive logic to AsyncPipeReaderInput, fully removing SegmentBufferReader and SegmentBufferReaderInput from the codebase. Updates all references, deserialization paths, and documentation to reflect the new unified primitive. Marks ADR-0003 as accepted (partially executed), closes related TODOs, and clarifies protocol docs. Sets DoubleBuffered as the default FlushPolicy. No wire format or behavioral changes; all tests pass. |
||
|---|---|---|
| .. | ||
| AcLoggerSignalRHub.cs | ||
| AcSessionService.cs | ||
| AcSignalRDataSource.cs | ||
| AcSignalRSendToClientService.cs | ||
| AcSignalRServerProtocolExtensions.cs | ||
| AcWebSignalRHubBase.cs | ||
| ExtensionMethods.cs | ||
| IAcSessionItem.cs | ||
| IAcSignalRHubItemServer.cs | ||
| README.md | ||
| TrackingItemHelpers.cs | ||
README.md
SignalRs
Server-side SignalR hub infrastructure: hub base class, session management, data source with change tracking, and client broadcast service.
Architecture: For full dispatch flow, tag system, and tech debt documentation see
AyCode.Services/docs/SIGNALR/README.md.
Key Files
Hub
AcWebSignalRHubBase.cs— Abstract hub extendingHub<IAcSignalRHubItemServer>. Manages connection lifecycle, message dispatch viaDynamicMethodRegistry, binary/JSON parameter deserialization. Response methods:ResponseToCaller(),SendMessageToOthers(),SendMessageToUserIdInternal().IAcSignalRHubItemServer.cs— Server hub interfaces:IAcSignalRHubItemServer,IAcSignalRHubServer.AcLoggerSignalRHub.cs— Specialized hub for receiving log items via SignalR (AddLogItem()).
Session & Broadcast
AcSessionService.cs— Generic session manager withConcurrentDictionary<TSessionItemId, TSessionItem>.IAcSessionItem.cs— Session item interface withSessionIdproperty.AcSignalRSendToClientService.cs— Abstract broadcast service:SendMessageToClient(),SendMessageToAllClients(),SendMessageToConnection(),SendMessageToUser().
Data Source
Full specification:
AyCode.Services.Server/docs/SIGNALR_DATASOURCE/README.md
AcSignalRDataSource.cs— Generic real-time collection (AcSignalRDataSource<TDataItem, TId, TIList>) implementingIList<T>with full CRUD and change tracking.- Change tracking:
TrackingItem<T, TId>wraps each modified item withTrackingState+OriginalValuefor rollback.ChangeTracking<T, TId>manages the tracking list. - Loading:
LoadDataSource()(sync),LoadDataSourceAsync()(async callback),LoadItem(id)(single). Binary path usesBinaryToMerge()forAcObservableCollection(batch UI update viaBeginUpdate/EndUpdate). - Saving:
SaveChanges()iterates tracked items, posts each via CRUD tag, rollbacks on failure.SaveItem()for individual saves. - Sync state:
IsSyncing(Interlocked counter) +OnSyncingStateChangedevent for UI loading indicators. - Locking:
object _syncRoot(sync ops) +SemaphoreSlim _asyncLock(async ops).GetEnumerator()returns safe copy. - Working reference list:
SetWorkingReferenceList()allows external list to become inner storage (zero-copy). - Context:
ContextIds(object[]) +FilterText(string) sent with GetAll requests for server-side filtering.
- Change tracking:
Utilities
ExtensionMethods.cs—InvokeMethod()— invokes methods and unwrapsTask/Task<T>/ValueTaskresults.TrackingItemHelpers.cs— Deep clone helpers:JsonClone<T>(),ReflectionClone<T>().