From b14bcfada73fe0f083f826d2c8436097d494a15e Mon Sep 17 00:00:00 2001 From: Green Sky Date: Thu, 18 Jan 2024 21:36:58 +0100 Subject: [PATCH] update to versioned plugin interface --- plugins/plugin_sdbot-webui.cpp | 54 ++++++++++++---------------------- 1 file changed, 19 insertions(+), 35 deletions(-) diff --git a/plugins/plugin_sdbot-webui.cpp b/plugins/plugin_sdbot-webui.cpp index 4036528..5a938b2 100644 --- a/plugins/plugin_sdbot-webui.cpp +++ b/plugins/plugin_sdbot-webui.cpp @@ -2,18 +2,19 @@ #include "../src/sd_bot.hpp" +#include + #include #include -#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_sdbot = nullptr; +constexpr const char* plugin_name = "SDBot-webui"; + extern "C" { SOLANA_PLUGIN_EXPORT const char* solana_plugin_get_name(void) { - return "SDBot-webui"; + return plugin_name; } SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) { @@ -21,56 +22,39 @@ SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) { } SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_start(struct SolanaAPI* solana_api) { - std::cout << "PLUGIN SDB START()\n"; + std::cout << "PLUGIN " << plugin_name << " START()\n"; if (solana_api == nullptr) { return 1; } - Contact3Registry* cr; - RegistryMessageModel* rmm = nullptr; - ConfigModelI* conf = nullptr; + try { + auto* cr = PLUG_RESOLVE_INSTANCE_VERSIONED(Contact3Registry, "1"); + auto* rmm = PLUG_RESOLVE_INSTANCE(RegistryMessageModel); + auto* conf = PLUG_RESOLVE_INSTANCE(ConfigModelI); - { // make sure required types are loaded - cr = RESOLVE_INSTANCE(Contact3Registry); - rmm = RESOLVE_INSTANCE(RegistryMessageModel); - conf = RESOLVE_INSTANCE(ConfigModelI); + // static store, could be anywhere tho + // construct with fetched dependencies + g_sdbot = std::make_unique(*cr, *rmm, *conf); - if (cr == nullptr) { - std::cerr << "PLUGIN SDB missing Contact3Registry\n"; - return 2; - } - - if (rmm == nullptr) { - std::cerr << "PLUGIN SDB missing RegistryMessageModel\n"; - return 2; - } - - if (conf == nullptr) { - std::cerr << "PLUGIN SDB missing ConfigModelI\n"; - return 2; - } + // register types + PLUG_PROVIDE_INSTANCE(SDBot, plugin_name, g_sdbot.get()); + } catch (const ResolveException& e) { + std::cerr << "PLUGIN " << plugin_name << " " << e.what << "\n"; + return 2; } - // static store, could be anywhere tho - // construct with fetched dependencies - g_sdbot = std::make_unique(*cr, *rmm, *conf); - - // register types - PROVIDE_INSTANCE(SDBot, "SDBot", g_sdbot.get()); - return 0; } SOLANA_PLUGIN_EXPORT void solana_plugin_stop(void) { - std::cout << "PLUGIN SDB STOP()\n"; + std::cout << "PLUGIN " << plugin_name << " STOP()\n"; g_sdbot.reset(); } SOLANA_PLUGIN_EXPORT float solana_plugin_tick(float delta) { (void)delta; - //std::cout << "PLUGIN SDB TICK()\n"; return g_sdbot->iterate(); }