aboutsummaryrefslogtreecommitdiff
path: root/server/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/util')
-rw-r--r--server/src/util/commands.h21
-rw-r--r--server/src/util/events.h24
-rw-r--r--server/src/util/io.cpp41
-rw-r--r--server/src/util/io.h8
4 files changed, 94 insertions, 0 deletions
diff --git a/server/src/util/commands.h b/server/src/util/commands.h
new file mode 100644
index 0000000..1e5ae0f
--- /dev/null
+++ b/server/src/util/commands.h
@@ -0,0 +1,21 @@
+#pragma once
+
+class commands {
+ using func = std::function<void()>;
+ std::unordered_map<std::string_view, func> m_cmds;
+
+ public:
+ bool parse_input(const std::string_view str) {
+ auto it = m_cmds.find(str);
+ if (it != m_cmds.end()) {
+ it->second();
+ return true;
+ }
+ return false;
+ }
+
+ void add(const std::string_view cmd, const func &cb) {
+
+ m_cmds[cmd] = cb;
+ }
+};
diff --git a/server/src/util/events.h b/server/src/util/events.h
new file mode 100644
index 0000000..e6f053d
--- /dev/null
+++ b/server/src/util/events.h
@@ -0,0 +1,24 @@
+#pragma once
+
+template <typename... Args>
+class event {
+ using func_type = std::function<void(Args...)>;
+
+ std::mutex event_lock;
+ std::list<func_type> m_funcs;
+
+ public:
+ void add(const func_type& func) {
+ std::lock_guard<std::mutex> lock(event_lock);
+
+ m_funcs.emplace_back(std::move(func));
+ }
+
+ void call(Args... params) {
+ std::lock_guard<std::mutex> lock(event_lock);
+
+ for (auto& func : m_funcs) {
+ if (func) func(std::forward<Args>(params)...);
+ }
+ }
+};
diff --git a/server/src/util/io.cpp b/server/src/util/io.cpp
new file mode 100644
index 0000000..1f9bca6
--- /dev/null
+++ b/server/src/util/io.cpp
@@ -0,0 +1,41 @@
+#include "../include.h"
+#include "io.h"
+
+std::shared_ptr<spdlog::logger> io::logger;
+
+void io::init(const bool &trunc) {
+ auto sink =
+ std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+ sink->set_pattern("[%R][%^%l%$] %v");
+
+ auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("server.log", trunc);
+
+ std::vector<spdlog::sink_ptr> log_sinks;
+ log_sinks.emplace_back(sink);
+ log_sinks.emplace_back(file_sink);
+
+ logger = std::make_shared<spdlog::logger>("server", log_sinks.begin(), log_sinks.end());
+ spdlog::register_logger(logger);
+
+ spdlog::flush_every(std::chrono::seconds(1));
+}
+
+void io::read_file(const std::string_view name, std::vector<char> &out) {
+ std::ifstream file(name.data());
+ if (!file.good()) {
+ io::logger->error("failed to load {}.", name.data());
+ return;
+ }
+
+ file.unsetf(std::ios::skipws);
+
+ file.seekg(0, std::ios::end);
+ const size_t size = file.tellg();
+ file.seekg(0, std::ios::beg);
+
+ out.resize(size);
+
+ file.read(out.data(), size);
+
+ file.close();
+}
diff --git a/server/src/util/io.h b/server/src/util/io.h
new file mode 100644
index 0000000..437b465
--- /dev/null
+++ b/server/src/util/io.h
@@ -0,0 +1,8 @@
+#pragma once
+
+namespace io {
+extern std::shared_ptr<spdlog::logger> logger;
+
+void init(const bool &trunc);
+void read_file(const std::string_view name, std::vector<char> &out);
+}; // namespace io