Newer
Older
#include "DapServiceController.h"
DapServiceController::DapServiceController(QObject *apParent)
: QObject(apParent)
{
/// Client controller initialization.
/// @param apDapServiceClient Network connection controller.
void DapServiceController::init(DapServiceClient *apDapServiceClient)
{
m_pDapServiceClient = apDapServiceClient;
// Socket initialization
m_DAPRpcSocket = new DapRpcSocket(apDapServiceClient->getClientSocket(), this);
// Register command.
registerCommand();
QString DapServiceController::getBrand() const
{
return m_sBrand;
}
/// Get app version.
/// @return Application version.
QString DapServiceController::getVersion() const
{
return m_sVersion;
}
/// Get an instance of a class.
/// @return Instance of a class.
DapServiceController &DapServiceController::getInstance()
{
static DapServiceController instance;
return instance;
}
/// Send request to service.
/// @param arg1...arg10 Parametrs.
void DapServiceController::requestToService(const QString &asServicename, const QVariant &arg1,
const QVariant &arg2, const QVariant &arg3, const QVariant &arg4,
const QVariant &arg5, const QVariant &arg6, const QVariant &arg7,
const QVariant &arg8, const QVariant &arg9, const QVariant &arg10)
{
DapAbstractCommand * transceiver = m_transceivers.find(asServicename).value().first;
Q_ASSERT(transceiver);
transceiver->requestToService(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
connect(transceiver, SIGNAL(serviceResponded(QVariant)), SLOT(findEmittedSignal(QVariant)));
}
/// Register command.
void DapServiceController::registerCommand()
{
m_transceivers.insert("ADD", qMakePair(new DapAddWalletCommand("ADD", m_DAPRpcSocket, this), QString("addWalletResponded")));
}
/// Find the emitted signal.
/// @param aValue Transmitted parameter.
void DapServiceController::findEmittedSignal(const QVariant &aValue)
{
DapAbstractCommand * transceiver = dynamic_cast<DapAbstractCommand *>(sender());
Q_ASSERT(transceiver);
auto service = std::find_if(m_transceivers.begin(), m_transceivers.end(), [=] (const QPair<DapAbstractCommand*, QString>& it)
{
QString s = it.first->getName();
QString t = transceiver->getName();
return it.first->getName() == transceiver->getName() ? true : false;
});
for (int idx = 0; idx < metaObject()->methodCount(); ++idx)
{
const QMetaMethod method = metaObject()->method(idx);
if (method.methodType() == QMetaMethod::Signal && method.name() == service.value().second)
{
metaObject()->method(idx).invoke(this, Q_ARG(QVariant, aValue));
}
}
}