refs #316 Application context relays messages over DBus between the CLogHandler instances of different processes.

This commit is contained in:
Mathew Sutcliffe
2014-09-25 22:07:19 +01:00
parent eceb67c38f
commit ebab95dd06
6 changed files with 52 additions and 0 deletions

View File

@@ -4,6 +4,7 @@
#include "blackcore/context_settings.h"
#include "blackcore/input_manager.h"
#include "blackmisc/statusmessage.h"
#include "blackmisc/loghandler.h"
#include <QCoreApplication>
#include <QThread>
@@ -34,6 +35,11 @@ namespace BlackCore
IContextApplication::IContextApplication(CRuntimeConfig::ContextMode mode, CRuntime *runtime) :
CContext(mode, runtime)
{
connect(CLogHandler::instance(), &CLogHandler::localMessageLogged, this, [this](const CStatusMessage &message)
{
this->logMessage(message, {});
});
changeSettings(IContextSettings::SettingsHotKeys);
}

View File

@@ -11,6 +11,7 @@
#include "blackcore/context.h"
#include "blackmisc/statusmessagelist.h"
#include "blackmisc/eveventhotkeyfunction.h"
#include "blackmisc/evoriginator.h"
#include <QObject>
#include <QReadWriteLock>
@@ -86,7 +87,13 @@ namespace BlackCore
//! A component changes
void componentChanged(uint component, uint action);
//! A log message was logged
void messageLogged(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin);
public slots:
//! Log a log message
//! \note Not pure because it can be called from the base class constructor.
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) { Q_UNUSED(message); Q_UNUSED(origin); }
//! \brief Ping a token, used to check if application is alive
virtual qint64 ping(qint64 token) const = 0;

View File

@@ -8,6 +8,7 @@
#include "input_manager.h"
#include "blackmisc/settingutilities.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/loghandler.h"
#include <QtMsgHandler>
#include <QFile>
@@ -22,6 +23,18 @@ namespace BlackCore
IContextApplication(mode, runtime)
{}
/*
* Log a message
*/
void CContextApplication::logMessage(const CStatusMessage &message, const Event::COriginator &origin)
{
if (!origin.isFromSameProcess())
{
CLogHandler::instance()->logRemoteMessage(message);
}
emit this->messageLogged(message, origin);
}
/*
* Ping, is DBus alive?
*/

View File

@@ -25,6 +25,9 @@ namespace BlackCore
friend class IContextApplication;
public slots:
//! \copydoc IContextApplication::logMessage
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) override;
//! \copydoc IContextApplication::ping()
virtual qint64 ping(qint64 token) const override;

View File

@@ -6,6 +6,7 @@
#include "blackcore/context_application_proxy.h"
#include "blackcore/input_manager.h"
#include "blackmisc/blackmiscfreefunctions.h"
#include "blackmisc/loghandler.h"
#include <QObject>
#include <QMetaEnum>
#include <QDBusConnection>
@@ -25,6 +26,14 @@ namespace BlackCore
CInputManager *inputManager = CInputManager::getInstance();
connect(inputManager, &CInputManager::hotkeyFuncEvent, this, &CContextApplicationProxy::processHotkeyFuncEvent);
inputManager->setEventForwarding(true);
connect(this, &IContextApplication::messageLogged, this, [](const CStatusMessage &message, const Event::COriginator &origin)
{
if (!origin.isFromSameProcess())
{
CLogHandler::instance()->logRemoteMessage(message);
}
});
}
/*
@@ -34,11 +43,22 @@ namespace BlackCore
{
// signals originating from impl side
bool s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(),
"messageLogged", this, SIGNAL(messageLogged(BlackMisc::CStatusMessage,BlackMisc::Event::COriginator)));
Q_ASSERT(s);
s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(),
"componentChanged", this, SIGNAL(componentChanged(uint, uint)));
Q_ASSERT(s);
}
/*
* Log a message
*/
void CContextApplicationProxy::logMessage(const CStatusMessage &message, const Event::COriginator &origin)
{
this->m_dBusInterface->callDBus(QLatin1Literal("logMessage"), message, origin);
}
/*
* Ping, is DBus alive?
*/

View File

@@ -24,6 +24,9 @@ namespace BlackCore
virtual ~CContextApplicationProxy() {}
public slots:
//! \copydoc IContextApplication::logMessage
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) override;
//! \copydoc IContextApplication::ping()
virtual qint64 ping(qint64 token) const override;