===== Плагины и их разработка =====
Для расширения функционала платформы можно использовать плагины, которые представляют из себя динамически подгружаемые библиотеки. Каждый плагин реализует функции Get/Set, доступные непосредственно из lua скрипта и механизм, позволяющий генерировать события. Плагин подключается через главный конфигурационный файл:
Далее, после успешной загрузки плагина, доступ к нему можно получить из lua:
Get('<имя_плагина>:<какой-то_адрес>')
или
Set('<имя_плагина>:<какой-то_адрес>=<какое-то_значение>')
**Написание плагина (Windows)**
Создаем DLL, например через Visual Studio. Из DLL должны быть экспортированы функции: Set(…), Get(…) и PollEvents(…). Функции Get/Set вызываются напрямую через lua скрипт. PollEvents вызывается автоматически, перед рендером каждого кадра. Она должна возвратить строку, вида:
"<какой-то_адрес>=<какое-то_значение>"
если надо сгенерировать событие или строку
"[NULL_STRING]"
если не надо.
**Заголовочный файл с прототипами этих функций (lmuLib.h):**
#pragma once
#include
#ifdef LMULIB_EXPORT
#define LMULIB_API extern "C" declspec(dllexport)
#else
#define LMULIB_API extern "C" declspec(dllimport)
#endif
#pragma warning(push)
#pragma warning(disable:4190)
LMULIB_API bool Set(const std::string& _param);
LMULIB_API std::string Get(const std::string& _addr);
LMULIB_API std::string PollEvents();
#pragma warning(pop)
==== Написание плагина (Linux) ====
Все аналогично.
**Заголовочный файл (lmuLib.h):**
#pragma once
#include
extern "C" {
bool Set(const std::string& _param);
std::string Get(const std::string& _addr);
std::string PollEvents();
}
Для того, чтобы скомпилировать динамически загружаемую библиотеку, используем примерно такие команды:
g++ -std=c++11 -c *.cpp -fPIC
g++ -shared -o libplugin.so -std=c++11 *.o