sledgehammer999
10 years ago
3 changed files with 214 additions and 2 deletions
@ -0,0 +1,127 @@
@@ -0,0 +1,127 @@
|
||||
#include "logger.h" |
||||
|
||||
#include <QDateTime> |
||||
|
||||
namespace Log |
||||
{ |
||||
Msg::Msg() {} |
||||
|
||||
Msg::Msg(int id, MsgType type, const QString &message) |
||||
: id(id) |
||||
, timestamp(QDateTime::currentMSecsSinceEpoch()) |
||||
, type(type) |
||||
, message(message) |
||||
{ |
||||
} |
||||
|
||||
Peer::Peer() {} |
||||
|
||||
#if LIBTORRENT_VERSION_NUM < 10000 |
||||
Peer::Peer(int id, const QString &ip, bool blocked) |
||||
#else |
||||
Peer::Peer(int id, const QString &ip, bool blocked, const QString &reason) |
||||
#endif |
||||
: id(id) |
||||
, timestamp(QDateTime::currentMSecsSinceEpoch()) |
||||
, ip(ip) |
||||
, blocked(blocked) |
||||
#if LIBTORRENT_VERSION_NUM >= 10000 |
||||
, reason(reason) |
||||
#endif |
||||
{ |
||||
} |
||||
|
||||
} |
||||
|
||||
Logger* Logger::m_instance = 0; |
||||
|
||||
Logger::Logger() |
||||
: lock(QReadWriteLock::Recursive) |
||||
, msgCounter(0) |
||||
, peerCounter(0) |
||||
{ |
||||
} |
||||
|
||||
Logger::~Logger() {} |
||||
|
||||
Logger * Logger::instance() |
||||
{ |
||||
if (!m_instance) |
||||
m_instance = new Logger; |
||||
|
||||
return m_instance; |
||||
} |
||||
|
||||
void Logger::drop() |
||||
{ |
||||
if (m_instance) { |
||||
delete m_instance; |
||||
m_instance = 0; |
||||
} |
||||
} |
||||
|
||||
void Logger::addMessage(const QString &message, const Log::MsgType &type) |
||||
{ |
||||
QWriteLocker locker(&lock); |
||||
|
||||
Log::Msg temp(msgCounter++, type, message); |
||||
m_messages.push_back(temp); |
||||
|
||||
if (m_messages.size() >= MAX_LOG_MESSAGES) |
||||
m_messages.pop_front(); |
||||
|
||||
emit newLogMessage(temp); |
||||
} |
||||
|
||||
#if LIBTORRENT_VERSION_NUM < 10000 |
||||
void Logger::addPeer(const QString &ip, bool blocked) |
||||
#else |
||||
void Logger::addPeer(const QString &ip, bool blocked, const QString &reason) |
||||
#endif |
||||
{ |
||||
QWriteLocker locker(&lock); |
||||
|
||||
#if LIBTORRENT_VERSION_NUM < 10000 |
||||
Log::Peer temp(peerCounter++, ip, blocked); |
||||
#else |
||||
Log::Peer temp(peerCounter++, ip, blocked, reason); |
||||
#endif |
||||
m_peers.push_back(temp); |
||||
|
||||
if (m_peers.size() >= MAX_LOG_MESSAGES) |
||||
m_peers.pop_front(); |
||||
|
||||
emit newLogPeer(temp); |
||||
} |
||||
|
||||
QVector<Log::Msg> Logger::getMessages(int lastKnownId) const |
||||
{ |
||||
QReadLocker locker(&lock); |
||||
|
||||
int diff = msgCounter - lastKnownId - 1; |
||||
int size = m_messages.size(); |
||||
|
||||
if ((lastKnownId == -1) || (diff >= size)) |
||||
return m_messages; |
||||
|
||||
if (diff <= 0) |
||||
return QVector<Log::Msg>(); |
||||
|
||||
return m_messages.mid(size - diff); |
||||
} |
||||
|
||||
QVector<Log::Peer> Logger::getPeers(int lastKnownId) const |
||||
{ |
||||
QReadLocker locker(&lock); |
||||
|
||||
int diff = peerCounter - lastKnownId - 1; |
||||
int size = m_peers.size(); |
||||
|
||||
if ((lastKnownId == -1) || (diff >= size)) |
||||
return m_peers; |
||||
|
||||
if (diff <= 0) |
||||
return QVector<Log::Peer>(); |
||||
|
||||
return m_peers.mid(size - diff); |
||||
} |
@ -0,0 +1,83 @@
@@ -0,0 +1,83 @@
|
||||
#ifndef LOGGER_H |
||||
#define LOGGER_H |
||||
|
||||
#include <QString> |
||||
#include <QVector> |
||||
#include <QReadWriteLock> |
||||
#include <QObject> |
||||
#include <libtorrent/version.hpp> |
||||
|
||||
const int MAX_LOG_MESSAGES = 1000; |
||||
|
||||
namespace Log |
||||
{ |
||||
enum MsgType |
||||
{ |
||||
NORMAL, |
||||
INFO, |
||||
WARNING, |
||||
CRITICAL //ERROR is defined by libtorrent and results in compiler error
|
||||
}; |
||||
|
||||
struct Msg |
||||
{ |
||||
Msg(); |
||||
Msg(int id, MsgType type, const QString &message); |
||||
int id; |
||||
qint64 timestamp; |
||||
MsgType type; |
||||
QString message; |
||||
}; |
||||
|
||||
struct Peer |
||||
{ |
||||
#if LIBTORRENT_VERSION_NUM < 10000 |
||||
Peer(int id, const QString &ip, bool blocked); |
||||
#else |
||||
Peer(int id, const QString &ip, bool blocked, const QString &reason); |
||||
#endif |
||||
Peer(); |
||||
int id; |
||||
qint64 timestamp; |
||||
QString ip; |
||||
bool blocked; |
||||
#if LIBTORRENT_VERSION_NUM >= 10000 |
||||
QString reason; |
||||
#endif |
||||
}; |
||||
} |
||||
|
||||
class Logger : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
Q_DISABLE_COPY(Logger) |
||||
|
||||
public: |
||||
static Logger* instance(); |
||||
static void drop(); |
||||
~Logger(); |
||||
|
||||
void addMessage(const QString &message, const Log::MsgType &type = Log::NORMAL); |
||||
#if LIBTORRENT_VERSION_NUM < 10000 |
||||
void addPeer(const QString &ip, bool blocked); |
||||
#else |
||||
void addPeer(const QString &ip, bool blocked, const QString &reason = QString()); |
||||
#endif |
||||
QVector<Log::Msg> getMessages(int lastKnownId = -1) const; |
||||
QVector<Log::Peer> getPeers(int lastKnownId = -1) const; |
||||
|
||||
signals: |
||||
void newLogMessage(const Log::Msg &message); |
||||
void newLogPeer(const Log::Peer &peer); |
||||
|
||||
private: |
||||
Logger(); |
||||
static Logger* m_instance; |
||||
QVector<Log::Msg> m_messages; |
||||
QVector<Log::Peer> m_peers; |
||||
mutable QReadWriteLock lock; |
||||
int msgCounter; |
||||
int peerCounter; |
||||
}; |
||||
|
||||
#endif // LOGGER_H
|
Loading…
Reference in new issue