# 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 |
