Управляем чем угодно откуда угодно

[C++] [RPC] [lib] Библиотека vtrc

Обсуждение линуксовой части и софта на борту виртурилки

[C++] [RPC] [lib] Библиотека vtrc

Сообщение nwnclv » 26 авг 2014, 21:21

Всем снова привет.

Как-то давно купил железку, потому что хотелось помимо видны, солярки и прочего подергать железку, покрутить моторчик и поморгать диодик...

Библиотека vtrc - библиотека накоженая на С++, используется для создания сервров и клиентов с RPC протоколом. Само название VTRC взял от имени железки (Virt To Real Controll; v2rc не взял потому что могли возражать авторы Virt2Real ну и + нашел еще упоминание о каком-то девайсе с таким именем).

Гит с сорсами либы и примерами (о них ниже) тут: https://github.com/newenclave/vtrc

Пишется JustForFun и о том, что "есть же куча подобных!!!11", я знаю.

Изначально хотел сделать маааленькую библиотечку с описательным интерфейсом протокола, на основе которого можно будет строить управлялку железом.

В результате получилась либа, которая умеет делать вызовы:
- с ожиданием (запрос->ждем ответа->получаем ответ)
- без ожидания (сделали вызов, забыли, получили ответ когда-то потом, где-то там, или не получили вообще)
- коллбеки (вызовы в контексте других вызовов на другой стороне)

немного инфы есть тут: https://github.com/newenclave/vtrc-docs ... ription.md (cо схемами =) )

Поддерживает транспорт:
- TCP (v4, v6)
- Локальный транспорт системы (POSIX Local IPC Sockets, Named Pipe для Windows)

Все удаленные вызовы и сообщения описываются в формате protobuf (см файлы протоколов от примеров).

В состав самой либы входят несколько примеров, демонстрирующих работу. https://github.com/newenclave/vtrc/tree/master/examples

Lukki-db - пример небольшой memory-only базы данных (ключ-значение) с возможностью установить значения, прочитать, обновить + получить статистику и подписаться на события изменения значений. Сервер написан таким образом, что обращения к базе (std::map :)) ) происходят только из одного потока, сколько бы одновременных соединений не было
протокол описан тут: https://github.com/newenclave/vtrc/blob ... kidb.proto

Remote-fs - пример файлового клиента и сервера. Можно сделать листинг директории, вывернуть дерево рекурсивно, скачать файл, залить файл, скачать директорию, залить директорию. И!! ПОМОРГАТЬ ДИОДИКОМ (из-за этого все затевалось). Протокол тут:
https://github.com/newenclave/vtrc/blob ... tefs.proto

Stress - стресс тест. Клиент умеет флудить сервер, показывать некоторые цифры времени. Умеет делать рекурсивные взаимовызовы и получать Stack overflow от библиотеки при заданной со стороны сервера глубине вызовов. Умеет просить сервер послать несколько событий, как в контекст текущего вызова (callback), так и вне его(event). Сделан для того, чтоб посмотреть как ведет себя библиотека в тех или иных случаях. Протокол:
https://github.com/newenclave/vtrc/blob ... ress.proto

Все примеры собраны для v2r и их можно взять тут: https://dl.dropboxusercontent.com/u/221 ... in/lin.zip (архив с бинарниками) еще есть собранные клиенты и серверы для win (https://dl.dropboxusercontent.com/u/221 ... in/win.zip). Собраны 12 студией, и скорее всего на XP не заведутся.

Как собрать для линукс (Ubuntu в моём случае) есть дока тут https://github.com/newenclave/vtrc/blob ... -howto.txt

У всех серверных сторон можно открыть множество серверных точек, которые замечательно будет жить на 1-2-... потоках и обслуживать клиентов.

Пример:
откроем файловый сервер на стороне железки.
[root@virt2real default]# ./remote_fs_server -s 0.0.0.0:55550


Соединимся с сервером, откроем /dev/v2r_gpio, и запишем туда все, что попало на консоль (параметр "-u -").
./remote_fs_client -s 192.168.3.1:55550 -u - -o /dev/v2r_gpio


После слова Input: можно будет вбить команду из Wiki (set gpio 74 output 1) и нажать Enter, Ctrl+D (для windows Ctrl+Z, Enter)

% ./remote_fs_client -s 192.168.3.1:55550 -u - -o /dev/v2r_gpio
Creating client ... Ok
Connection is ready...
Connected to 192.168.3.1:55550
Path is: ''
Creating interface...Success; id is '101'
Path not exists
File size is unknown: - 'boost::filesystem::file_size: No such file or directory: "-"
Open remote file success.
Starting...
Block size = 4096
Input:
set gpio 74 output 1

Upload complete


Получим красный диодик =))

второй вариант включения: (для unix-консоли)

% echo "set gpio 74 output 1" > d.txt && ./remote_fs_client -s 192.168.3.1:55550 -u d.txt -o /dev/v2r_gpio

записали файл и его заслали в устройство.

а вот так:
./remote_fs_client -s 192.168.3.1:55550 -g /dev/mmcblk0 -o dump.dmp -b 65530
можно сдампить карту =)

тут еще есть дока по файловому клиенту-серверу, стресс-тесту https://github.com/newenclave/vtrc-docs/tree/master/ru

Дока по тому, как использовать вместе с С++ есть тут: https://github.com/newenclave/vtrc-docs ... u/howto.md

К сожалению я не большой писатель доков поэтому доками пока все не очень хорошо :( да и хронически недостает времени.
nwnclv
 
Сообщения: 67
Зарегистрирован: 22 авг 2014, 19:04

Re: [C++] [RPC] [lib] Библиотека vtrc

Сообщение realizator » 27 авг 2014, 07:13

Ого! Круто! Это тот "велик" о котором вы говорили?
Аватара пользователя
realizator
virt2real team
 
Сообщения: 641
Зарегистрирован: 17 фев 2012, 23:18

Re: [C++] [RPC] [lib] Библиотека vtrc

Сообщение nwnclv » 27 авг 2014, 17:56

realizator писал(а):Ого! Круто! Это тот "велик" о котором вы говорили?


Да, это и есть тот самый велосипед. :D
nwnclv
 
Сообщения: 67
Зарегистрирован: 22 авг 2014, 19:04

Re: [C++] [RPC] [lib] Библиотека vtrc

Сообщение verial » 04 ноя 2015, 08:44

Очень слежу, это как раз то что мне не хватало.
Спасибо!
verial
 
Сообщения: 48
Зарегистрирован: 22 июл 2014, 13:38
Откуда: Москва


Вернуться в Софт на виртурилке - SDK, Linux, Github, программирование (C/C++ и др.)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron