玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Src
ManageBackend.cpp
1
// Author: Kang Lin <kl222@126.com>
2
3
#include <QLoggingCategory>
4
#include "ManageBackend.h"
5
6
static
Q_LOGGING_CATEGORY(log,
"Manage.Backend"
)
7
CManageBackend
::
CManageBackend
(QObject *parent)
8
: QObject{parent}
9
{
10
qDebug(log) << Q_FUNC_INFO;
11
}
12
13
CManageBackend::~CManageBackend()
14
{
15
qDebug(log) << Q_FUNC_INFO;
16
foreach
(
auto
pBackend, m_Backends)
17
{
18
pBackend->Stop();
19
pBackend->deleteLater();
20
}
21
}
22
23
void
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
54
void
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
}
CBackend::Stop
virtual int Stop()
停止
定义
Backend.cpp:103
CBackend::Start
virtual int Start()
开始。根据 OnInit() 返回值来决定是否开始定时器来支持非 qt 事件
定义
Backend.cpp:84
CManageBackend
管理操作的后端。此类仅用于 CPluginThread
定义
ManageBackend.h:19
COperate
操作接口。
定义
Operate.h:51
COperate::sigStop
void sigStop()
通知用户停止。仅由插件触发。 当从插件中需要停止时触发。例如:对端断开连接、重置连接或者连接出错。 当应用接收到此信号后,调用 Stop() 关闭连接。
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力