玉兔远程控制 0.0.31
载入中...
搜索中...
未找到
ConnecterConnect.cpp
1#include <QLoggingCategory>
2#include <QRegularExpression>
3#include "ConnecterConnect.h"
4#include "PluginClientThread.h"
5
6static Q_LOGGING_CATEGORY(log, "Client.Connecter.Connect")
8 : CConnecter(plugin)
9 , m_pConnect(nullptr)
10{
11 qDebug(log) << Q_FUNC_INFO;
12}
13
14CConnecterConnect::~CConnecterConnect()
15{
16 qDebug(log) << Q_FUNC_INFO;
17}
18
19const QString CConnecterConnect::Id()
20{
21 QString szId = Protocol() + "_" + GetPlugClient()->Name();
22 if(GetParameter())
23 {
24 if(!GetParameter()->GetName().isEmpty())
25 szId += "_" + GetParameter()->GetName();
26 if(!GetParameter()->m_Net.GetHost().isEmpty())
27 szId += "_" + GetParameter()->m_Net.GetHost()
28 + "_" + QString::number(GetParameter()->m_Net.GetPort());
29 }
30 static QRegularExpression exp("[-@:/#%!^&* \\.]");
31 szId = szId.replace(exp, "_");
32 return szId;
33}
34
52{
53 QString szName;
54 if(GetParameter() && GetParameter()->GetParameterClient()
55 && GetParameter()->GetParameterClient()->GetShowProtocolPrefix())
56 szName = Protocol() + ":";
57
58 if(GetParameter() && !(GetParameter()->GetName().isEmpty()))
59 szName += GetParameter()->GetName();
60 else
61 szName += ServerName();
62 return szName;
63}
64
66{
67 return tr("Name: ") + Name() + "\n"
68 + tr("Protocol: ") + Protocol()
69#ifdef DEBUG
70 + " - " + GetPlugClient()->DisplayName()
71#endif
72 + "\n"
73 + tr("Server name: ") + ServerName() + "\n"
74 + tr("Description: ") + GetPlugClient()->Description();
75}
76
78{
79 return qobject_cast<CParameterBase*>(CConnecter::GetParameter());
80}
81
82int CConnecterConnect::SetParameter(CParameterBase *p)
83{
84 int nRet = CConnecter::SetParameter(p);
85 if(nRet) return nRet;
86 if(GetParameter())
87 {
88 bool check = false;
89 check = connect(GetParameter(), SIGNAL(sigNameChanged()),
90 this, SLOT(slotUpdateName()));
91 Q_ASSERT(check);
92 check = connect(GetParameter(), SIGNAL(sigShowServerNameChanged()),
93 this, SLOT(slotShowServerName()));
94 Q_ASSERT(check);
95 check = connect(GetParameter(), &CParameter::sigChanged,
96 this, [&](){
97 emit this->sigUpdateParameters(this);
98 });
99 Q_ASSERT(check);
100 CFrmViewer* pViewer = qobject_cast<CFrmViewer*>(GetViewer());
101 if(pViewer) {
102 check = connect(GetParameter(), SIGNAL(sigZoomFactorChanged(double)),
103 pViewer, SLOT(slotSetZoomFactor(double)));
104 Q_ASSERT(check);
105 check = connect(
106 GetParameter(),
107 SIGNAL(sigAdaptWindowsChanged(CFrmViewer::ADAPT_WINDOWS)),
108 pViewer, SLOT(slotSetAdaptWindows(CFrmViewer::ADAPT_WINDOWS)));
109 Q_ASSERT(check);
110 }
111 }
112 return 0;
113}
114
116{
117 if(GetParameter())
118 {
119 GetParameter()->SetParameterClient(pPara);
120 if(pPara)
121 {
122 bool check = connect(pPara, SIGNAL(sigShowProtocolPrefixChanged()),
123 this, SLOT(slotUpdateName()));
124 Q_ASSERT(check);
125 check = connect(pPara, SIGNAL(sigSHowIpPortInNameChanged()),
126 this, SLOT(slotUpdateName()));
127 Q_ASSERT(check);
128 }
129 return 0;
130 } else {
131 QString szMsg = "The CConnecter is not parameters! "
132 "please first create parameters, "
133 "then call SetParameter in the ";
134 szMsg += metaObject()->className() + QString("::")
135 + metaObject()->className();
136 szMsg += QString(" or ") + metaObject()->className()
137 + QString("::") + "Initial()";
138 szMsg += " to set the parameters pointer. "
139 "Default set CParameterClient for the parameters of connecter "
140 "(CParameterConnecter or its derived classes) "
141 "See: CClient::CreateConnecter. "
142 "If you are sure the parameter of connecter "
143 "does not need CParameterClient. "
144 "Please overload the SetParameterClient in the ";
145 szMsg += QString(metaObject()->className()) + " . don't set it";
146 qCritical(log) << szMsg.toStdString().c_str();
147 Q_ASSERT(false);
148 }
149 return -1;
150}
151
153{
154 qDebug(log) << Q_FUNC_INFO;
156 = qobject_cast<CPluginClientThread*>(GetPlugClient());
157 if(pPlug)
158 emit sigOpenConnect(this);
159 else {
160 m_pConnect = InstanceConnect();
161 if(m_pConnect) {
162 int nRet = m_pConnect->Connect();
163 emit sigConnected();
164 return nRet;
165 }
166 }
167 return 0;
168}
169
171{
172 qDebug(log) << Q_FUNC_INFO;
174 = qobject_cast<CPluginClientThread*>(GetPlugClient());
175 if(pPlug)
176 emit sigCloseconnect(this);
177 else {
178 if(m_pConnect) {
179 int nRet = m_pConnect->Disconnect();
180 m_pConnect->deleteLater();
181 emit sigDisconnected();
182 return nRet;
183 }
184 }
185 return 0;
186}
187
189{
190 if(GetParameter() && GetParameter()->GetParameterClient()
191 && GetParameter()->GetParameterClient()->GetShowIpPortInName())
192 {
193 return GetParameter()->m_Net.GetHost()
194 + ":" + QString::number(GetParameter()->m_Net.GetPort());
195 }
196
197 if(m_szServerName.isEmpty() && GetParameter())
198 return GetParameter()->GetServerName();
199 return m_szServerName;
200}
201
202void CConnecterConnect::slotSetServerName(const QString& szName)
203{
204 if(m_szServerName == szName)
205 return;
206
207 m_szServerName = szName;
208 if(GetParameter())
209 {
210 if(GetParameter()->GetServerName() == szName)
211 return;
212 GetParameter()->SetServerName(szName);
213 }
214
215 emit sigUpdateName(Name());
216}
virtual int Disconnect()
断开
Definition Connect.cpp:89
virtual int Connect()
开始连接。根据 OnInit() 返回值来决定是否开始定时器来支持非 qt 事件
Definition Connect.cpp:77
插件的连接者接口,此接口仅由插件使用。 所有的需要 CConnect 的插件连接者均需要从此接口派生。
virtual const QString Id() override
Identity
virtual int DisConnect() override
在此函数中触发 sigDisconnected()
virtual const QString Description() override
Description
virtual int Connect() override
virtual void slotSetServerName(const QString &szName)
virtual CParameterBase * GetParameter()
Get parameter
virtual const QString Name() override
显示顺序:
virtual int SetParameterClient(CParameterClient *pPara) override
Set CParameterClient
virtual CConnect * InstanceConnect()=0
新建 CConnect 对象。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual QString ServerName()
当前连接名(远程桌面的名称,如果没有,则是 IP:端口)。例如:服务名或 IP:端口
连接者应用接口。
Definition Connecter.h:62
void sigUpdateName(const QString &szName)
void sigConnected()
连接成功信号。仅由插件触发。 应用程序需要在此时设置视图属性 Enabled 为 true 。允许接收键盘和鼠标事件
virtual QWidget * GetViewer()=0
得到显示视图
void sigDisconnected()
断开连接成功信号。仅由插件触发
virtual int SetParameter(CParameter *p)
设置参数
virtual const QString Protocol() const
Protocol
Definition Connecter.cpp:69
void sigUpdateParameters(CConnecter *pConnecter)
更新参数,通知应用程序保存或显示参数
用于显示从 CConnectDesktop 输出的图像,和向 CConnectDesktop 发送键盘、鼠标事件。
Definition FrmViewer.h:49
ADAPT_WINDOWS
窗口适配枚举常量
Definition FrmViewer.h:61
连接基础参数接口。包括基本参数(网络参数等)。 所有插件的连接参数都应从此类派生。
客户端库 (CClient) 参数。仅在客户端库 (CClient) 和插件中使用。
void sigChanged()
当参数改变时,触发 通常如果需要,则相应的参数会对应一个改变事件。
它默认启动一个后台线程。 它与 CConnecterConnect 一起可实现一个后台线程处理多个远程桌面连接。
客户端插件接口。用于建立 CConnecter 实例,它由协议插件实现。
virtual const QString DisplayName() const
在界面上显示的名称
virtual const QString Description() const =0
描述
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。