У меня есть задача по разработке нового интерфейса для распределенного приложения (несколько процессов, выполняющихся на одном компьютере, но не распределенных физически - пока), который состоит из множества модулей графической панели, написанных на C ++ / OpenGL, и одного модуля, написанного на Ada.
Модули обмениваются информацией о форме параметров (части скалярной неструктурированной информации, например: целые, строки, числа с плавающей запятой и т. Д.) Я намереваюсь спроектировать асинхронный компонент на основе сокетов (который я в дальнейшем буду называть «Интерфейсный компонент» или IC), который будет связан каждым модулем на основе библиотеки Boost :: Asio с двумя простыми «клиентскими» примитивами:
Put([ParameterName], [DestinationModule], [Payload], [Type])
Get([ParameterName], [Sourcemodule], [Payload])
ParameterName : обозначает уникальное имя параметра
DestinationModule / SourceModule : адрес модуля в системе
Полезная нагрузка : фактические данные
Тип : строка или значение, определяющее тип передаваемого параметра
Каждый из этих примитивов обрабатывается на стороне сервера двумя соответствующими функциями (на IC):
//No function parameters shown here as I don't know
//exactly how I'm going to do this
ProcessPutRequest()
ProcessGetRequest()
Поскольку обработка входящих команд будет начата IC, я намерен использовать обработчики функций, которые будут переданы вышеприведенным функциям. Таким образом, каждый программист, ответственный за каждый модуль, может обрабатывать входящие команды и выполнять необходимые преобразования типов в своем собственном коде.
Вопрос в том ... возможно ли это в Аде? Я знаю, что можно импортировать функции в C ++ и вызывать их из программ Ada. Btu можно ли передать обработчики функций из Ada в компонент C ++?
(дополнительный вопрос: есть ли у вас какие-либо предложения относительно лучшего способа реализации этого интерфейса?)