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