Skip to content

ThinkingHome.DeviceModel

ThinkingHome.DeviceModel

DeviceHost Class

Реализация хоста устройств: сразу обе грани — IDeviceRegistry (регистрация драйверов) и IDeviceHost (потребительский .NET API). Хранит карту id → DeviceEntry и агрегированное событие изменений. Всё, что касается конкретного устройства (кэш, подписка на его изменения), инкапсулировано в DeviceEntry; хост общается с записью только через её публичный интерфейс, а записи передаёт два колбэка — сама запись про хост не знает.

csharp
public sealed class DeviceHost : ThinkingHome.DeviceModel.IDeviceRegistry, ThinkingHome.DeviceModel.IDeviceHost

Inheritance System.Object → DeviceHost

Implements IDeviceRegistry, IDeviceHost

Properties

DeviceHost.Count Property

Число зарегистрированных устройств.

csharp
public int Count { get; }

Property Value

System.Int32

Methods

DeviceHost.ExecuteAsync(string, DeviceCommand, CancellationToken) Method

Исполнить команду над устройством (execute).

csharp
public System.Threading.Tasks.Task<ThinkingHome.DeviceModel.CommandOutcome> ExecuteAsync(string deviceId, ThinkingHome.DeviceModel.Commands.DeviceCommand command, System.Threading.CancellationToken ct=default(System.Threading.CancellationToken));

Parameters

deviceId System.String

command DeviceCommand

ct System.Threading.CancellationToken

Implements ExecuteAsync(string, DeviceCommand, CancellationToken)

Returns

System.Threading.Tasks.Task<CommandOutcome>

DeviceHost.GetDeviceAsync(string, CancellationToken) Method

Описание одного устройства или null, если его нет.

csharp
public System.Threading.Tasks.Task<ThinkingHome.DeviceModel.DeviceDescriptor?> GetDeviceAsync(string deviceId, System.Threading.CancellationToken ct=default(System.Threading.CancellationToken));

Parameters

deviceId System.String

ct System.Threading.CancellationToken

Implements GetDeviceAsync(string, CancellationToken)

Returns

System.Threading.Tasks.Task<DeviceDescriptor>

DeviceHost.GetDevicesAsync(CancellationToken) Method

Все зарегистрированные устройства (discovery). Async — может уходить по сети (remote host).

csharp
public System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyCollection<ThinkingHome.DeviceModel.DeviceDescriptor>> GetDevicesAsync(System.Threading.CancellationToken ct=default(System.Threading.CancellationToken));

Parameters

ct System.Threading.CancellationToken

Implements GetDevicesAsync(CancellationToken)

Returns

System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyCollection<DeviceDescriptor>>

DeviceHost.QueryAsync(string, CancellationToken) Method

Опросить состояние устройства (query).

csharp
public System.Threading.Tasks.Task<ThinkingHome.DeviceModel.State.DeviceSnapshot> QueryAsync(string deviceId, System.Threading.CancellationToken ct=default(System.Threading.CancellationToken));

Parameters

deviceId System.String

ct System.Threading.CancellationToken

Implements QueryAsync(string, CancellationToken)

Returns

System.Threading.Tasks.Task<DeviceSnapshot>

DeviceHost.Register(IDevice) Method

Зарегистрировать устройство. Dispose() возвращаемого объекта снимает регистрацию.

csharp
public System.IDisposable Register(ThinkingHome.DeviceModel.IDevice device);

Parameters

device IDevice

Implements Register(IDevice)

Returns

System.IDisposable

Events

DeviceHost.Changed Event

Агрегированный поток изменений состояния всех устройств (report).

csharp
public event Action<StateChange>? Changed;

Implements Changed

Event Type

System.Action<StateChange>

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