玉兔远程控制 0.0.34
载入中...
搜索中...
未找到
PluginClientThread.cpp
1#include "PluginClientThread.h"
2
3#include <QLoggingCategory>
4
5static Q_LOGGING_CATEGORY(log, "Client.Plugin.Thread")
6
8 : CPluginClient(parent),
9 m_pThread(nullptr)
10{
11 m_pThread = new CPluginThread(); // Note that the parent object pointer cannot be set here.
12 if(m_pThread)
13 {
14 // The object is also deleted when the thread finishes executing.
15 bool check = connect(m_pThread, SIGNAL(finished()),
16 m_pThread, SLOT(deleteLater()));
17 Q_ASSERT(check);
18 m_pThread->start();
19 }
20}
21
22CPluginClientThread::~CPluginClientThread()
23{
24 qDebug(log) << "CPluginClientThread::~CPluginClientThread";
25 if(m_pThread)
26 m_pThread->quit(); // The don't deleteLater().
27 // because of it is connected finished signal
28}
29
31 const QString &szProtocol, CParameterClient *para)
32{
33 qDebug(log) << "CPluginClientThread::CreateConnecter()" << szProtocol;
34 CConnecter* p = CPluginClient::CreateConnecter(szProtocol, para);
35 if(!p) return nullptr;
36 CConnecterConnect* pConnecter = qobject_cast<CConnecterConnect*>(p);
37 if(!pConnecter) {
38 QString szMsg = "Must be derived from CConnecterConnect*, Current is ";
39 szMsg += p->metaObject()->className();
40 szMsg += ";\nThe super class:\n";
41 auto super = p->metaObject()->superClass();
42 int n = 1;
43 while(super){
44 szMsg += QString(2 * n++, ' ') + "- ";
45 szMsg += super->className();
46 super = super->superClass();
47 }
48 qCritical(log) << szMsg;
49 Q_ASSERT(false);
50 return nullptr;
51 }
52
53 if(nullptr == m_pThread)
54 {
55 qDebug(log) << "The thread is nullptr";
56 return nullptr;
57 }
58
59 bool check = connect(pConnecter, SIGNAL(sigOpenConnect(CConnecterConnect*)),
60 m_pThread, SIGNAL(sigConnect(CConnecterConnect*)));
61 Q_ASSERT(check);
62 check = connect(pConnecter, SIGNAL(sigCloseconnect(CConnecterConnect*)),
63 m_pThread, SIGNAL(sigDisconnect(CConnecterConnect*)));
64 Q_ASSERT(check);
65
66 return pConnecter;
67}
插件的连接者接口,此接口仅由插件使用。 所有的需要 CConnect 的插件连接者均需要从此接口派生。
连接者应用接口。
Definition Connecter.h:62
客户端库 (CClient) 参数。仅在客户端库 (CClient) 和插件中使用。
它默认启动一个后台线程。 它与 CConnecterConnect 一起可实现一个后台线程处理多个远程桌面连接。
virtual CConnecter * CreateConnecter(const QString &szProtocol, CParameterClient *para) override
新建 CConnecter 实例。仅由 CClient 调用
客户端插件接口。用于建立 CConnecter 实例,它由协议插件实现。
virtual Q_INVOKABLE CConnecter * CreateConnecter(const QString &szId, CParameterClient *para)
新建 CConnecter 实例。仅由 CClient 调用
一个线程处理多个连接者 CConnecterConnect 。 一个连接者对应一个连接,也就是一个线程处理多个连接。 此类仅用于 CPluginClientThread 由插件使用。