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