Rabbit Remote Control 0.1.0-bate10
Loading...
Searching...
No Matches
ManageBackend.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "ManageBackend.h"
5
6static Q_LOGGING_CATEGORY(log, "Manage.Backend")
7CManageBackend::CManageBackend(QObject *parent)
8 : QObject{parent}
9{
10 qDebug(log) << Q_FUNC_INFO;
11}
12
13CManageBackend::~CManageBackend()
14{
15 qDebug(log) << Q_FUNC_INFO;
16 foreach(auto pBackend, m_Backends)
17 {
18 pBackend->Stop();
19 pBackend->deleteLater();
20 }
21}
22
23void CManageBackend::slotNewBackend(COperate *pOperate)
24{
25 qDebug(log) << Q_FUNC_INFO;
26 if(-1 == pOperate->metaObject()->indexOfMethod("InstanceBackend()"))
27 {
28 QString szErr;
29 szErr = "The class " + QString(pOperate->metaObject()->className())
30 + " has not method InstanceBackend()."
31 "Please add 'Q_INVOKABLE virtual CBackend* InstanceBackend()' to "
32 + QString(pOperate->metaObject()->className());
33 qCritical(log) << szErr;
34 Q_ASSERT_X(false, "BackendThread", szErr.toStdString().c_str());
35 }
36
37 CBackend* pBackend = nullptr;
38 bool bRet = QMetaObject::invokeMethod(
39 pOperate, "InstanceBackend",
40 Qt::DirectConnection,
41 Q_RETURN_ARG(CBackend*, pBackend));
42 if(!pBackend || !bRet)
43 {
44 qCritical(log) << "InstanceBackend fail";
45 emit pOperate->sigStop();
46 return;
47 }
48 m_Backends.insert(pOperate, pBackend);
49 int nRet = pBackend->Start();
50 if(nRet)
51 emit pOperate->sigStop();
52}
53
54void CManageBackend::slotDeleteBackend(COperate *pOperate)
55{
56 qDebug(log) << Q_FUNC_INFO;
57 auto it = m_Backends.find(pOperate);
58 if(m_Backends.end() == it) return;
59 auto pBackend = it.value();
60 m_Backends.remove(pOperate);
61 pBackend->Stop();
62 pBackend->deleteLater();
63 //emit pOperate->sigFinished();
64}
Backend interface.
Definition Backend.h:42
virtual int Stop()
Stop.
Definition Backend.cpp:103
virtual int Start()
Start.
Definition Backend.cpp:84
Manage the backend of operate.
Operate interface.
Definition Operate.h:51
void sigStop()
Notify the user to stop.