Работа с Alpha.Domain.Client
на языке C++
Подробное руководство по установке, настройке и использованию нативного C++ API компонента Alpha.Domain.Client для создания клиентских приложений взаимодействия с Альфа платформой.
1. О чём эта статья
Это третья статья в серии, посвящённой компоненту Alpha.Domain.Client. В первой части мы познакомились с компонентом, его архитектурой и написали скрипт на Python для диагностики и выгрузки исторических данных. Во второй части углубились в асинхронную модель, пулы соединений и масштабируемость.
Теперь переходим к нативному C++. Компонент Alpha.Domain.Client имеет реализации на нескольких языках, и C++ версия даёт максимальный контроль над производительностью и памятью. В этой статье мы подробно разберём:
Для работы с Alpha.Domain.Client на C++ необходим доступ к работающему экземпляру Alpha.Server с развернутой конфигурацией. Процесс настройки конфигурации в Alpha DevStudio описан в первой статье.
2. Установка и настройка окружения
Установка C++ версии Alpha.Domain.Client выполняется тем же инсталлятором, что и для Python. Если вы уже устанавливали компонент по инструкции из первой части — переходите к шагу 2.3.
Портал поддержки Automiq
По умолчанию компонент устанавливается в:
После установки Alpha.Domain.Client в директории компонента доступны заголовочные файлы C++ и скомпилированные DLL-библиотеки:
Alpha.Domain.Client\ ├── include\cppclient\ ← заголовочные файлы C++ API │ └── Alpha\Domain\ │ ├── Api\ ← интерфейсы (IModule, IService, ...) │ └── Client\ ← клиентские обёртки ├── bin\ ← скомпилированные DLL │ ├── alpha.domain.client.dll ← ядро компонента │ └── tcp_transport.dll ← TCP-транспорт ├── examples\ ← примеры использования └── doc\ ← документация
Для сборки проектов на C++ необходимо задать переменную окружения ALPHA_DOMAIN_CLIENT_INCLUDE_DIR, указывающую на путь к заголовочным файлам:
Рекомендуется задать переменную через Панель управления — так она будет доступна для всех терминалов и IDE. Путь к проекту не должен содержать кириллицу.
3. Сборка проекта
Проект собирается через CMake. Сборка выполняется из Developer Command Prompt for Visual Studio — специальной командной строки, в которой уже настроены пути к компилятору MSVC.
Используйте именно Developer Command Prompt for Visual Studio, а не обычную командную строку — иначе CMake не найдёт компилятор MSVC. Найти этот терминал можно через меню Пуск → Visual Studio → Developer Command Prompt.
4. VQT — формат данных
Как и в версии для Python, каждое значение элемента (тега) в C++ передаётся как VQT — структура из трёх компонентов. Это промышленный стандарт: помимо самого значения, вы всегда знаете когда оно получено и насколько ему можно доверять.
Типы: Bool, Int8–Int64, Float32/64, String
0 = Good, 28 = Out of Service
100-нс интервалы с 01.01.1601
| ValueKind | C++ тип | Описание |
|---|---|---|
Bool | bool | Логическое значение |
Int32 / UInt32 | int32_t / uint32_t | 32-битное целое |
Int64 / UInt64 | int64_t / uint64_t | 64-битное целое |
Float32 / Float64 | float / double | Число с плавающей запятой |
String | std::string | Строковое значение |
5. Подключение к Alpha.Server
Инициализация Alpha.Domain.Client в C++ проходит по той же цепочке, что и в Python: загрузка модуля → создание сервиса → создание пула соединений → подключение. Каждый объект создаётся из предыдущего.
Конструкция Alpha::auto_throw{} — это обёртка для обработки ошибок. Если операция завершается с ошибкой, автоматически генерируется исключение C++. Это аналог try/except из Python-версии Alpha.Domain.Client.
6. Чтение и запись значений
Ключевая особенность C++ — строгая типизация. Тип записываемого значения должен совпадать с типом элемента на сервере. Для этого Alpha.Domain.Client предоставляет метод ValueStorage::Kind(), который позволяет определить тип текущего значения и выполнить корректное приведение.
При записи важно привести значение к тому же типу, что у элемента на сервере. Вспомогательная функция MakeTypedValue делает это автоматически:
7. Подписки на изменения в реальном времени
Как и в Python-версии, Alpha.Domain.Client на C++ использует каналы данных (DataPipe) для получения обновлений. При подписке сервер сам отправляет новые значения в канал — без постоянного опроса (polling).
8. Обзор адресного пространства
Метод CreateSpaceBrowser() позволяет рекурсивно обойти адресное пространство Alpha.Server и посмотреть, какие объекты и элементы доступны. Результаты возвращаются через канал данных (Pipe) — поуровнево.
9. Интерактивная демонстрация
Нажмите «Запустить», чтобы увидеть симуляцию работы C++ приложения с Alpha.Domain.Client: инициализация, подключение к Alpha.Server, чтение значения, запись нового и получение обновлений через подписку.
10. Демонстрация работы
На видео показан процесс работы C++ приложения с Alpha.Domain.Client: подключение к Alpha.Server, чтение и запись значений, подписки на изменения в реальном времени и обход адресного пространства.