aboutsummaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp53
1 files changed, 50 insertions, 3 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 856af41..165c574 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1,12 +1,59 @@
-// Needed to bootstrap plugin abi
-#include "plugin.h"
+#include "ns_plugin.h"
#include "internal/logging.h"
+#include "server.h"
+#include "plugin.h"
+
+Plugin* plugin = nullptr;
+
extern "C" __declspec(dllexport)
void PLUGIN_INIT(PluginInitFuncs* funcs, PluginNorthstarData* data)
{
spdlog::default_logger()->sinks().pop_back();
spdlog::default_logger()->sinks().push_back(std::make_shared<PluginSink>(funcs->logger));
- spdlog::info(PLUGIN_NAME " succesfully initialised!");
+ plugin = new Plugin(funcs, data);
+}
+
+extern "C" __declspec(dllexport)
+void PLUGIN_DEINIT()
+{
+ if (plugin)
+ {
+ delete plugin;
+ plugin = nullptr;
+ }
+}
+
+extern "C" __declspec(dllexport)
+void PLUGIN_INFORM_DLL_LOAD(PluginLoadDLL dll, void* data) {
+ switch (dll) {
+ case PluginLoadDLL::ENGINE:
+ plugin->LoadEngineData(data);
+ break;
+ case PluginLoadDLL::CLIENT:
+ case PluginLoadDLL::SERVER:
+ break;
+ default:
+ spdlog::warn("PLUGIN_INFORM_DLL_LOAD called with unknown type {}", (int)dll);
+ break;
+ }
+}
+
+// There is no deinit logic for Plugins
+// Recreate it using DllMain
+BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_DETACH:
+ PLUGIN_DEINIT();
+
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ break;
+ }
+
+ return TRUE;
}