aboutsummaryrefslogtreecommitdiff
path: root/primedev/plugins/interfaces/sys
diff options
context:
space:
mode:
authoruniboi <64006268+uniboi@users.noreply.github.com>2024-02-04 02:14:46 +0100
committerGitHub <noreply@github.com>2024-02-04 02:14:46 +0100
commitedf013952ca2d110f190dc8cd16e5529846656e4 (patch)
treeca219c17665810d94f2cb23b27f58fa9c82f3a62 /primedev/plugins/interfaces/sys
parent6ad955ae0aab8b79910cb4a12777419a78a42a90 (diff)
downloadNorthstarLauncher-edf013952ca2d110f190dc8cd16e5529846656e4.tar.gz
NorthstarLauncher-edf013952ca2d110f190dc8cd16e5529846656e4.zip
Replaces the current plugin api with source interfaces. - backwards compatible - no more json in binaries (wtf) - does not rely on structs from third party libraries (wtf) - actually initializes variables - no more basically unused classes The launcher exposes almost everything required by plugins in interfaces that allow for backwards compatibility. The only thing that's passed to a plugin directly is the northstar dll HWND and a struct of data that's different for each plugin.
Diffstat (limited to 'primedev/plugins/interfaces/sys')
-rw-r--r--primedev/plugins/interfaces/sys/ISys.cpp66
-rw-r--r--primedev/plugins/interfaces/sys/ISys.h21
2 files changed, 87 insertions, 0 deletions
diff --git a/primedev/plugins/interfaces/sys/ISys.cpp b/primedev/plugins/interfaces/sys/ISys.cpp
new file mode 100644
index 00000000..6b0b41dd
--- /dev/null
+++ b/primedev/plugins/interfaces/sys/ISys.cpp
@@ -0,0 +1,66 @@
+#include "plugins/interfaces/interface.h"
+#include "ISys.h"
+#include "plugins/plugins.h"
+#include "plugins/pluginmanager.h"
+
+class CSys : public ISys
+{
+public:
+ void Log(HMODULE handle, LogLevel level, char* msg)
+ {
+ spdlog::level::level_enum spdLevel;
+
+ switch (level)
+ {
+ case LogLevel::WARN:
+ spdLevel = spdlog::level::level_enum::warn;
+ break;
+ case LogLevel::ERR:
+ spdLevel = spdlog::level::level_enum::err;
+ break;
+ default:
+ NS::log::PLUGINSYS->warn("Attempted to log with invalid level {}. Defaulting to info", (int)level);
+ case LogLevel::INFO:
+ spdLevel = spdlog::level::level_enum::info;
+ break;
+ }
+
+ std::optional<Plugin> plugin = g_pPluginManager->GetPlugin(handle);
+ if (plugin)
+ {
+ plugin->Log(spdLevel, msg);
+ }
+ else
+ {
+ NS::log::PLUGINSYS->warn("Attempted to log message '{}' with invalid plugin handle {}", msg, static_cast<void*>(handle));
+ }
+ }
+
+ void Unload(HMODULE handle)
+ {
+ std::optional<Plugin> plugin = g_pPluginManager->GetPlugin(handle);
+ if (plugin)
+ {
+ plugin->Unload();
+ }
+ else
+ {
+ NS::log::PLUGINSYS->warn("Attempted to unload plugin with invalid handle {}", static_cast<void*>(handle));
+ }
+ }
+
+ void Reload(HMODULE handle)
+ {
+ std::optional<Plugin> plugin = g_pPluginManager->GetPlugin(handle);
+ if (plugin)
+ {
+ plugin->Reload();
+ }
+ else
+ {
+ NS::log::PLUGINSYS->warn("Attempted to reload plugin with invalid handle {}", static_cast<void*>(handle));
+ }
+ }
+};
+
+EXPOSE_SINGLE_INTERFACE(CSys, ISys, SYS_VERSION);
diff --git a/primedev/plugins/interfaces/sys/ISys.h b/primedev/plugins/interfaces/sys/ISys.h
new file mode 100644
index 00000000..3e55a6d9
--- /dev/null
+++ b/primedev/plugins/interfaces/sys/ISys.h
@@ -0,0 +1,21 @@
+#ifndef ILOGGING_H
+#define ILOGGING_H
+
+#define SYS_VERSION "NSSys001"
+
+enum class LogLevel : int
+{
+ INFO = 0,
+ WARN,
+ ERR,
+};
+
+class ISys
+{
+public:
+ virtual void Log(HMODULE handle, LogLevel level, char* msg) = 0;
+ virtual void Unload(HMODULE handle) = 0;
+ virtual void Reload(HMODULE handle) = 0;
+};
+
+#endif