38 lines
1.6 KiB
Markdown
38 lines
1.6 KiB
Markdown
# AyCode.Models.Server
|
|
|
|
@project {
|
|
type = "framework"
|
|
}
|
|
|
|
Server-side models: authentication state and dynamic method dispatch for SignalR message routing.
|
|
|
|
## Folder Structure
|
|
|
|
| Folder | Purpose |
|
|
|---|---|
|
|
| `Logins/` | Server-side logged-in user model |
|
|
| `DynamicMethods/` | Reflection-based method registry for SignalR message tag routing |
|
|
|
|
## Key Files
|
|
|
|
### Logins/
|
|
- **`AcLoggedInModelServer.cs`** — Implements `IAcLoggedInModelBase<...>`. Tracks `LoggedInUser`, `AccessToken`, `LoginErrorCode`. Methods: `AddLoggedInUser()`, `Logout()`.
|
|
|
|
### DynamicMethods/
|
|
- **`AcMethodInfoModel.cs`** — Wraps a `MethodInfo` + its `TagAttribute` + `ParameterInfo[]`. Generic over `TAttribute : TagAttribute`.
|
|
- **`AcDynamicMethodCallModel.cs`** — Binds an object instance to its attributed methods. Static `ConcurrentDictionary` + `FrozenDictionary` cache — reflection runs once per type. Lookup by `MessageTag` (int).
|
|
- **`AcDynamicMethodRegistry.cs`** — Per-request registry for dynamic method dispatch. `Register()` stores instances, `GetMethodByMessageTag()` resolves method + instance with lazy search and static cache. Optimized for small instance counts (array-backed, no List).
|
|
|
|
## Dependencies
|
|
|
|
| Dependency | Purpose |
|
|
|---|---|
|
|
| `AyCode.Core` | Error codes |
|
|
| `AyCode.Core.Server` | Server-side core |
|
|
| `AyCode.Entities` | Entity base classes |
|
|
| `AyCode.Entities.Server` | Server entities |
|
|
| `AyCode.Interfaces` | Interface contracts |
|
|
| `AyCode.Interfaces.Server` | `IAcLoggedInModelBase` |
|
|
| `AyCode.Models` | Shared models |
|
|
| `AyCode.Services` | `TagAttribute` for SignalR method tagging |
|