Skip to content

ThinkingHome.DeviceModel.Remoting.ProxyServer

ThinkingHome.DeviceModel.Remoting.ProxyServer Namespace

Classes
DeviceHubSignalR-хаб на прокси. Домашние коннекторы подключаются сюда с JWT (aud=connector, hostId в claim). На connect/disconnect обновляет реестр; принимает Report'ы (дом → прокси). Команды идут в обратную сторону (server → client) из RemoteHost.
HostTokenJWT прокси. Прокси — единственный эмитент, один симметричный ключ (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 из своего контекста (например, пользователя Алисы).

Опубликовано под лицензией MIT