ThinkingHome.DeviceModel.Remoting.ProxyServer
ThinkingHome.DeviceModel.Remoting.ProxyServer Namespace
| Classes | |
|---|---|
| DeviceHub | SignalR-хаб на прокси. Домашние коннекторы подключаются сюда с JWT (aud=connector, hostId в claim). На connect/disconnect обновляет реестр; принимает Report'ы (дом → прокси). Команды идут в обратную сторону (server → client) из RemoteHost. |
| HostToken | JWT прокси. Прокси — единственный эмитент, один симметричный ключ (HS256). Стейт не хранится: токены самодостаточны, отзыв — сменой ключа. Аудитории: connector (коннектор), authcode (OAuth-код), alice (access token). Во всех токенах — hostId в claim. |
| HostUnavailableException | Домашний хост с таким hostId сейчас не подключён к прокси. Бросается методами без канала ошибки (GetDevicesAsync/QueryAsync); бридж ловит и мапит в ошибку своей экосистемы. У ExecuteAsync оффлайн возвращается как CommandOutcome с кодом DeviceUnreachable. |
| ProxyServerEndpointExtensions | Маппинг SignalR-хаба устройств в приложении-прокси. |
| ProxyServerServiceCollectionExtensions | Регистрация сервисов прокси-стороны ремоутинга в DI. |
| RemoteHost | Прокси-сторона одного домашнего хоста: реализует IDeviceHost, но вызовы уходят по SignalR текущему соединению этого hostId. connectionId резолвится на каждый вызов (переживает реконнект). Discovery — pull + кэш (сбрасывается при (ре)коннекте). Живёт в реестре и после разрыва, чтобы подписки бриджа на Changed переживали реконнект. |
| RemoteHostRegistry | Реестр удалённых хостов на прокси: держит карты hostId → RemoteHost и connectionId → hostId, обновляет их на connect/disconnect (политика last-wins) и роутит входящие Report'ы в нужный хост. RemoteHost для hostId не удаляется при разрыве — просто уходит в offline, чтобы подписки бриджа жили. |
| Interfaces | |
|---|---|
| IRemoteHostRegistry | Реестр подключённых домашних хостов на прокси. Отдаёт IDeviceHost (RemoteHost) по hostId — бридж (Alice/Matter) резолвит hostId из своего контекста (например, пользователя Алисы). |