AyCode.Core/docs/GLOSSARY.md

114 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Glossary
Core terminology. Read before working on unfamiliar areas.
## Core Abstractions
| Term | Definition |
|---|---|
| **IId<T>** | Generic identity interface (`T` = `Guid` or `int`). Foundation of the entity system. |
| **TrackingState** | Client-side change tracking enum: Added, Modified, Deleted, Unchanged. Not related to EF Core tracking. |
| **IForeignKey** | Marker interface for navigation property foreign keys. |
| **IForeignCollection<T>** | Marker for collection navigation properties. |
## Serialization Formats
| Term | Definition |
|---|---|
| **AcBinary** | High-perf binary serializer. Two-phase: scan (metadata) → serialize. Reference tracking, string interning, ID-based dedup. |
| **Toon** | Token-Oriented Object Notation. LLM-optimized: @meta (schema) + @data (values), maximized for LLM comprehension. |
| **AcJson** | Newtonsoft.Json wrapper: $id/$ref handling, IId-based resolution, chain deserialization API. |
| **Chain API** | Fluent deserialization: `CreateDeserializeChain<T>().ThenDeserialize<U>()...Execute()`. Resolves cross-refs across multiple types. |
| **String Interning** | Binary serializer dedup of repeated strings. Controlled via `[AcStringIntern]` or `StringInterningMode`. See `AyCode.Core/AyCode.Core/docs/BINARY/BINARY_FEATURES.md`. |
## Binary Wire Format
For full specification see `AyCode.Core/AyCode.Core/docs/BINARY/BINARY_FORMAT.md`.
| Term | Definition |
|---|---|
| **BinaryTypeCode** | Single-byte marker that identifies the type of the next value in the binary stream. 100+ codes defined in `BinaryTypeCode.cs`. |
| **FixObj** | Compact object marker (063). The byte itself is the type slot index — no additional identifier needed. |
| **FixStr** | Compact string marker (103134). Encodes type + length in one byte for ASCII strings ≤31 bytes. |
| **TinyInt** | Compact integer marker (192255). Encodes small integers (16 to 47) in a single byte. |
| **VarInt / VarUInt** | Variable-length integer encoding. LEB128 for unsigned, ZigZag + LEB128 for signed. |
| **SequenceBinaryInput** | `struct : IBinaryInputBase` for reading multi-segment pipe data (`ReadOnlySequence<byte>`). Lazy iteration, zero-alloc ctor, `ArrayPool` scratch for cross-segment reads. Full spec: `AyCode.Core/AyCode.Core/docs/BINARY/BINARY_FORMAT.md`. |
| **ArrayBinaryInput** | `struct : IBinaryInputBase` for reading from contiguous `byte[]`. Zero-copy when pipe is single-segment. Default fast-path for deserialization. |
| **HeaderFlags** | Byte at stream position 1 encoding serialization options: metadata, reference handling mode, cache count presence. Base `0x90`. |
| **Two-Phase Serialization** | Scan pass detects multi-referenced objects, serialize pass writes output using reference table. Required for `ReferenceHandling.All`. |
## Serialization Attributes
| Attribute | Purpose |
|---|---|
| **[AcBinarySerializable]** | Marks type for source generator. Feature flags: enableMetadata, enableIdTracking, enableRefHandling, enableInternString. |
| **[AcStringIntern]** | Marks string property for deduplication during binary serialization. |
| **[ToonDescription]** | Per-property description for Toon @meta output. |
## Architecture Layers
| Layer | Projects | Role |
|---|---|---|
| **Interfaces** | AyCode.Interfaces, .Server | Contracts only — no implementation |
| **Entities** | AyCode.Entities, .Server | Abstract generic base classes |
| **Models** | AyCode.Models, .Server | DTOs, view models |
| **Services** | AyCode.Services, .Server | Business logic, SignalR |
| **Database** | AyCode.Database | EF Core DAL with Session/Transaction pattern |
| **Core** | AyCode.Core, .Server | Serializers, compression, logging, constants |
| **Utils** | AyCode.Utils, .Server | Zero-dependency utilities |
## Database Patterns
| Term | Definition |
|---|---|
| **DAL (Data Access Layer)** | `AcDalBase` — mutex-protected, supports Session (read) and Transaction (write) patterns. |
| **PooledDal** | Singleton pool managing DAL instances by SessionId/PlayerId. |
| **Session** | Read-only database operation pattern. No transaction, no mutex lock on DbContext. |
| **Transaction** | Write operation pattern with auto-rollback on failure. |
## SignalR Infrastructure
For full architecture see `AyCode.Services/docs/SIGNALR/README.md`.
| Term | Definition |
|---|---|
| **OnReceiveMessage** | Single SignalR method for all communication. Tag-based routing via `int messageTag`; metadata + payload as separate hub args. Full spec: `AyCode.Services/docs/SIGNALR/README.md`. |
| **SignalParams** | Metadata accompanying each message (separate hub arg). Carries Status, response type, packed parameters, raw-bytes flag. `[AcBinarySerializable]`. Full spec: `AyCode.Services/docs/SIGNALR/README.md`. |
| **Message Tag** | Integer identifier mapping to a method via `[SignalR(tag)]` or `[SignalRSendToClient(tag)]` attributes. |
| **DynamicMethodRegistry** | Resolves message tags to `MethodInfo` at runtime. Static `ConcurrentDictionary` cache with lazy scan on miss. |
| **SignalRCrudTags** | Sealed class bundling 5 independent tag integers (getAllTag, getItemTag, addTag, updateTag, removeTag) for entity CRUD. See `AyCode.Services.Server/docs/SIGNALR_DATASOURCE/README.md`. |
| **AcBinaryHubProtocol** | Unsealed base `IHubProtocol` replacing SignalR's JSON+Base64 with `AcBinarySerializer`. Protocol name: `"acbinary"`. Full spec (write/read paths, chunked framing): `AyCode.Services/docs/SIGNALR_BINARY_PROTOCOL/README.md`. |
| **AyCodeBinaryHubProtocol** | Consumer-derived protocol (per-message header with type resolution, `IsRawBytesData`). Registered via `AddAcBinaryProtocol(...)` DI extension on both server and client. Full spec: `AyCode.Services/docs/SIGNALR/README.md`. |
| **AcBinaryHubProtocolOptions** | Mutable config for protocol registration (SerializerOptions, ProtocolMode, BufferSize, FlushTimeout, etc.). `Validate()` + `Clone()` for DI safety. Full spec: `AyCode.Services/docs/SIGNALR/README.md`. |
| **AcSignalRProtocolExtensions** | DI extension class: `AddAcBinaryProtocol(ISignalRServerBuilder, Action<AcBinaryHubProtocolOptions>?)` for server, `AddAcBinaryProtocol(IHubConnectionBuilder, Action<...>?)` for client. DI `IOptions<T>` + inline-configure override chain. |
| **SignalResponseDataMessage** | Internal DTO for client callback routing and stream wire format (not serialized as envelope on wire). `RawResponseData` is `object?` (typed object or byte[]). `GetResponseData<T>()` performs direct cast. |
| **SignalPostJsonDataMessage** | OBSOLETE — still exists but marked `[Obsolete]`. Legacy: serialized params to JSON inside Binary envelope. |
| **AcSignalRDataSource** | Generic real-time `IList<T>` with change tracking, CRUD via SignalRCrudTags, binary merge, rollback, sync state. |
| **TrackingItem** | Wraps a modified DataSource item with `TrackingState` (Add/Update/Remove) + `OriginalValue` for rollback. |
| **SendToClientType** | Enum controlling broadcast scope: None, Others, Caller, All. |
| **AcWebSignalRHubBase** | Abstract server hub. Receives `OnReceiveMessage` (with `object data`), dispatches via DynamicMethodRegistry, responds via `SendMessageToClient` (builds response `SignalParams` with `SignalDataType` + passes `object responseData` — protocol zero-copy serializes to pipe). |
| **AcSignalRClientBase** | Abstract client. Manages `HubConnection`, request/response correlation via `requestId`, pooled `SignalRRequestModel`. `SendCoreAsync` builds `SignalParams` (with `IsRawBytesData` when `T == byte[]`). |
| **AcSessionService** | `ConcurrentDictionary`-based session tracker for connected SignalR clients. |
| **AcSignalRSendToClientService** | Server-push service: `SendMessageToAllClients`, `SendMessageToConnection`, `SendMessageToUser`. |
| **Working Reference List** | DataSource feature: `SetWorkingReferenceList()` allows external list to become inner storage (zero-copy). |
## Logging
For full architecture see `AyCode.Core/AyCode.Core/docs/LOGGING/README.md`.
| Term | Definition |
|---|---|
| **LogLevel** | Byte enum: Detail(0), Trace(5), Debug(10), Info(15), Suggest(17), Warning(20), Error(25), Disabled(255). Values are DB-synced — do NOT renumber. |
| **AcLoggerBase** | Abstract logger with multi-writer fan-out. Two-level filtering: logger-level + per-writer level. Implements both `IAcLogWriterBase` and MS `ILogger`. |
| **AcLogWriterBase** | Abstract writer base. Own `LogLevel` loaded from appsettings by `AssemblyQualifiedName` match. Two branches: text (`AcTextLogWriterBase`) and structured (`AcLogItemWriterBase<T>`). |
| **AcTextLogWriterBase** | Text formatting base. Format: `[HH:mm:ss.fff] [AppType[0]] [Level] [Category->Method] [ThreadId] Text`. |
| **AcConsoleLogWriter** | Colored console writer. Gray=≤Trace, Cyan=Suggest, Yellow=Warning, Red=≥Error. Thread-safe via static lock. |
| **AcLogItemWriterBase\<T\>** | Abstract structured writer. ThreadPool dispatch + Mutex serialization. `Activator.CreateInstance<T>()` factory for log items. |
| **GlobalLogger** | Server-side singleton wrapping `AcGlobalLoggerBase`. Static methods for all log levels. Default category: `"GLOBAL_LOGGER"`. |
| **AcLoggerProvider\<T\>** | `ILoggerProvider` implementation with `ConcurrentDictionary<string, T>` per-category cache. Registered via `AddAcLogger<T>()` or `UseOnlyAcLogger<T>()`. |
| **IAcLogItemClient** | Structured log item DTO interface. Fields: TimeStampUtc, AppType, LogLevel, ThreadId, CategoryName, CallerName, Text, Exception, ErrorType. |
| **AcLogItemClient** | `[MessagePackObject]` implementation of `IAcLogItemClient`. Client-side transport entity. |
| **AcLogItem** | Server-side entity extending `AcLogItemClient`. `[Table("LogItem")]` with auto-generated `Id` and `LogHeaderId`. |
| **AcLoggerSignalRHub\<T\>** | Server hub receiving log items via `AddLogItem(AcLogItem)`. Simple `Hub` (not tag-based dispatch). |
| **IAcLogWriterClientBase** | Empty marker interface for client-side writers (`: IAcLogWriterBase`). |