mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
configurable throw function
This commit is contained in:
parent
dbe1e3f577
commit
d7d70b707f
@ -8,6 +8,7 @@
|
||||
#ifdef _WIN32
|
||||
#include "Win32/Win32Service.h"
|
||||
#ifdef WIN32_APP
|
||||
#include <windows.h>
|
||||
#include "Win32/Win32App.h"
|
||||
#endif
|
||||
|
||||
@ -23,6 +24,11 @@ namespace util
|
||||
setlocale(LC_ALL, "Russian");
|
||||
setlocale(LC_TIME, "C");
|
||||
|
||||
i2p::log::SetThrowFunction ([](const std::string& s)
|
||||
{
|
||||
MessageBox(0, TEXT(s.c_str ()), TEXT("i2pd"), MB_ICONERROR | MB_TASKMODAL | MB_OK );
|
||||
});
|
||||
|
||||
if (!Daemon_Singleton::init(argc, argv))
|
||||
return false;
|
||||
|
||||
|
@ -236,5 +236,11 @@ namespace log {
|
||||
Log & Logger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
static ThrowFunction g_ThrowFunction;
|
||||
ThrowFunction GetThrowFunction () { return g_ThrowFunction; }
|
||||
void SetThrowFunction (ThrowFunction f) { g_ThrowFunction = f; }
|
||||
|
||||
} // log
|
||||
} // i2p
|
||||
|
||||
|
@ -17,16 +17,13 @@
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
#include <functional>
|
||||
#include "Queue.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <syslog.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_APP
|
||||
#include <windows.h> // TODO: move away to win32app
|
||||
#endif
|
||||
|
||||
enum LogLevel
|
||||
{
|
||||
eLogNone = 0,
|
||||
@ -155,6 +152,10 @@ namespace log {
|
||||
};
|
||||
|
||||
Log & Logger();
|
||||
|
||||
typedef std::function<void (const std::string&)> ThrowFunction;
|
||||
ThrowFunction GetThrowFunction ();
|
||||
void SetThrowFunction (ThrowFunction f);
|
||||
} // log
|
||||
}
|
||||
|
||||
@ -201,7 +202,6 @@ void LogPrint (LogLevel level, TArgs&&... args) noexcept
|
||||
log.Append(msg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Throw fatal error message with the list of arguments
|
||||
* @param args Array of message parts
|
||||
@ -209,6 +209,8 @@ void LogPrint (LogLevel level, TArgs&&... args) noexcept
|
||||
template<typename... TArgs>
|
||||
void ThrowFatal (TArgs&&... args) noexcept
|
||||
{
|
||||
auto f = i2p::log::GetThrowFunction ();
|
||||
if (!f) return;
|
||||
// fold message to single string
|
||||
std::stringstream ss("");
|
||||
#if (__cplusplus >= 201703L) // C++ 17 or higher
|
||||
@ -216,12 +218,7 @@ void ThrowFatal (TArgs&&... args) noexcept
|
||||
#else
|
||||
LogPrint (ss, std::forward<TArgs>(args)...);
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_APP
|
||||
MessageBox(0, TEXT(ss.str ().c_str ()), TEXT("i2pd"), MB_ICONERROR | MB_TASKMODAL | MB_OK );
|
||||
#else
|
||||
std::cout << ss.str ();
|
||||
#endif
|
||||
f (ss.str ());
|
||||
}
|
||||
|
||||
#endif // LOG_H__
|
||||
|
Loading…
Reference in New Issue
Block a user