From 28f66dee8a9fe49aadb5c1d67de48d9232363963 Mon Sep 17 00:00:00 2001 From: alpine Date: Thu, 4 Jun 2020 16:13:19 +0200 Subject: Initial commit --- server/src/util/commands.h | 21 +++++++++++++++++++++ server/src/util/events.h | 24 ++++++++++++++++++++++++ server/src/util/io.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ server/src/util/io.h | 8 ++++++++ 4 files changed, 94 insertions(+) create mode 100644 server/src/util/commands.h create mode 100644 server/src/util/events.h create mode 100644 server/src/util/io.cpp create mode 100644 server/src/util/io.h (limited to 'server/src/util') 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; + std::unordered_map 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 +class event { + using func_type = std::function; + + std::mutex event_lock; + std::list m_funcs; + + public: + void add(const func_type& func) { + std::lock_guard lock(event_lock); + + m_funcs.emplace_back(std::move(func)); + } + + void call(Args... params) { + std::lock_guard lock(event_lock); + + for (auto& func : m_funcs) { + if (func) func(std::forward(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 io::logger; + +void io::init(const bool &trunc) { + auto sink = + std::make_shared(); + sink->set_pattern("[%R][%^%l%$] %v"); + + auto file_sink = std::make_shared("server.log", trunc); + + std::vector log_sinks; + log_sinks.emplace_back(sink); + log_sinks.emplace_back(file_sink); + + logger = std::make_shared("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 &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 logger; + +void init(const bool &trunc); +void read_file(const std::string_view name, std::vector &out); +}; // namespace io -- cgit v1.2.3