From f5566251c94dfd4bbb7083a37d0c05aa0e31e3a9 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Thu, 3 Aug 2023 23:35:25 +0200 Subject: [PATCH] start with plugins --- CMakeLists.txt | 2 +- plugins/CMakeLists.txt | 11 +++++++ plugins/plugin_zox_ngc.cpp | 66 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 plugins/CMakeLists.txt create mode 100644 plugins/plugin_zox_ngc.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c33dafc..a9379e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,5 +48,5 @@ endif() # cmake setup end -#add_subdirectory(./src) +add_subdirectory(./plugins) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt new file mode 100644 index 0000000..2a02711 --- /dev/null +++ b/plugins/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.9 FATAL_ERROR) + +add_library(plugin_zox_ngc SHARED + ./plugin_zox_ngc.cpp +) + +target_link_libraries(plugin_zox_ngc PUBLIC + solanaceae_plugin + solanaceae_zox +) + diff --git a/plugins/plugin_zox_ngc.cpp b/plugins/plugin_zox_ngc.cpp new file mode 100644 index 0000000..013a1e6 --- /dev/null +++ b/plugins/plugin_zox_ngc.cpp @@ -0,0 +1,66 @@ +#include + +#include + +#include +#include + +// fwd +class RegMessageModel; + +#define RESOLVE_INSTANCE(x) static_cast(solana_api->resolveInstance(#x)) +#define PROVIDE_INSTANCE(x, p, v) solana_api->provideInstance(#x, p, static_cast(v)) + +static std::unique_ptr g_zngc = nullptr; + +extern "C" { + +SOLANA_PLUGIN_EXPORT const char* solana_plugin_get_name(void) { + return "ZoxNGC"; +} + +SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) { + return SOLANA_PLUGIN_VERSION; +} + +SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_start(struct SolanaAPI* solana_api) { + std::cout << "PLUGIN ZNGC START()\n"; + + if (solana_api == nullptr) { + return 1; + } + + ToxEventProviderI* tox_event_provider_i = nullptr; + + { // make sure required types are loaded + tox_event_provider_i = RESOLVE_INSTANCE(ToxEventProviderI); + + if (tox_event_provider_i == nullptr) { + std::cerr << "PLUGIN ZNGC missing ToxEventProviderI\n"; + return 2; + } + } + + // static store, could be anywhere tho + // construct with fetched dependencies + g_zngc = std::make_unique(*tox_event_provider_i); + + // register types + PROVIDE_INSTANCE(ZoxNGCEventProviderI, "ZoxNGC", g_zngc.get()); + + return 0; +} + +SOLANA_PLUGIN_EXPORT void solana_plugin_stop(void) { + std::cout << "PLUGIN ZNGC STOP()\n"; + + g_zngc.reset(); +} + +SOLANA_PLUGIN_EXPORT void solana_plugin_tick(float delta) { + (void)delta; + //std::cout << "PLUGIN ZNGC TICK()\n"; +} + +} // extern C +