aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/spdlog/sinks/tcp_sink.h
diff options
context:
space:
mode:
authorF1F7Y <64418963+F1F7Y@users.noreply.github.com>2023-06-30 03:10:24 +0200
committerGitHub <noreply@github.com>2023-06-29 21:10:24 -0400
commit71f0ee98ccc85d41ba7587d122c83011ab1e25c3 (patch)
treec362337bedb5d341c3f063e9a0b4840fb8b8ba2c /thirdparty/spdlog/sinks/tcp_sink.h
parentefd907105cf7906c78253631f75bf4fd83f769db (diff)
downloadNorthstarLauncher-71f0ee98ccc85d41ba7587d122c83011ab1e25c3.tar.gz
NorthstarLauncher-71f0ee98ccc85d41ba7587d122c83011ab1e25c3.zip
Reorganize third-party dependencies into `thirdparty` directory (#491)
* rename `include` to `thirdparty` * remove duplicate minhook in wsock32 * move minhook into its own directory * move openssl lib into separate directories
Diffstat (limited to 'thirdparty/spdlog/sinks/tcp_sink.h')
-rw-r--r--thirdparty/spdlog/sinks/tcp_sink.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/thirdparty/spdlog/sinks/tcp_sink.h b/thirdparty/spdlog/sinks/tcp_sink.h
new file mode 100644
index 00000000..9dd9e51d
--- /dev/null
+++ b/thirdparty/spdlog/sinks/tcp_sink.h
@@ -0,0 +1,81 @@
+// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
+// Distributed under the MIT License (http://opensource.org/licenses/MIT)
+
+#pragma once
+
+#include <spdlog/common.h>
+#include <spdlog/sinks/base_sink.h>
+#include <spdlog/details/null_mutex.h>
+#ifdef _WIN32
+#include <spdlog/details/tcp_client-windows.h>
+#else
+#include <spdlog/details/tcp_client.h>
+#endif
+
+#include <mutex>
+#include <string>
+#include <chrono>
+#include <functional>
+
+#pragma once
+
+// Simple tcp client sink
+// Connects to remote address and send the formatted log.
+// Will attempt to reconnect if connection drops.
+// If more complicated behaviour is needed (i.e get responses), you can inherit it and override the sink_it_ method.
+
+namespace spdlog {
+namespace sinks {
+
+struct tcp_sink_config
+{
+ std::string server_host;
+ int server_port;
+ bool lazy_connect = false; // if true connect on first log call instead of on construction
+
+ tcp_sink_config(std::string host, int port)
+ : server_host{std::move(host)}
+ , server_port{port}
+ {}
+};
+
+template<typename Mutex>
+class tcp_sink : public spdlog::sinks::base_sink<Mutex>
+{
+public:
+ // connect to tcp host/port or throw if failed
+ // host can be hostname or ip address
+
+ explicit tcp_sink(tcp_sink_config sink_config)
+ : config_{std::move(sink_config)}
+ {
+ if (!config_.lazy_connect)
+ {
+ this->client_.connect(config_.server_host, config_.server_port);
+ }
+ }
+
+ ~tcp_sink() override = default;
+
+protected:
+ void sink_it_(const spdlog::details::log_msg &msg) override
+ {
+ spdlog::memory_buf_t formatted;
+ spdlog::sinks::base_sink<Mutex>::formatter_->format(msg, formatted);
+ if (!client_.is_connected())
+ {
+ client_.connect(config_.server_host, config_.server_port);
+ }
+ client_.send(formatted.data(), formatted.size());
+ }
+
+ void flush_() override {}
+ tcp_sink_config config_;
+ details::tcp_client client_;
+};
+
+using tcp_sink_mt = tcp_sink<std::mutex>;
+using tcp_sink_st = tcp_sink<spdlog::details::null_mutex>;
+
+} // namespace sinks
+} // namespace spdlog