1#include <QLoggingCategory>
2#include <QRegularExpression>
3#include "ConnecterConnect.h"
4#include "PluginClientThread.h"
6static Q_LOGGING_CATEGORY(log,
"Client.Connecter.Connect")
11 qDebug(log) << Q_FUNC_INFO;
14CConnecterConnect::~CConnecterConnect()
16 qDebug(log) << Q_FUNC_INFO;
21 QString szId =
Protocol() +
"_" + GetPlugClient()->
Name();
28 +
"_" + QString::number(
GetParameter()->m_Net.GetPort());
30 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
31 szId = szId.replace(exp,
"_");
55 &&
GetParameter()->GetParameterClient()->GetShowProtocolPrefix())
67 QString szDescription;
69 szDescription = tr(
"Name: ") +
Name() +
"\n";
72 szDescription += tr(
"Protocol: ") +
Protocol()
80 szDescription += tr(
"Server name: ") +
ServerName() +
"\n";
84 szDescription += tr(
"Server address: ") +
GetParameter()->m_Net.GetHost() +
":"
85 + QString::number(
GetParameter()->m_Net.GetPort()) +
"\n";
87 QString szProxy(tr(
"Proxy") +
" ");
89 switch(proxy.GetUsedType()) {
90 case CParameterProxy::TYPE::SSHTunnel:
92 auto &sshNet = proxy.m_SSH.m_Net;
93 szProxy +=
"(" + tr(
"SSH tunnel") +
"): " + sshNet.GetHost() +
":"
94 + QString::number(sshNet.GetPort());
97 case CParameterProxy::TYPE::SockesV5:
99 auto &sockesV5 = proxy.m_SockesV5;
100 szProxy +=
"(" + tr(
"Sockes v5") +
"): " + sockesV5.GetHost() +
":"
101 + QString::number(sockesV5.GetPort());
109 if(!szProxy.isEmpty())
110 szDescription += szProxy +
"\n";
114 szDescription += tr(
"Description: ") + GetPlugClient()->
Description();
116 return szDescription;
121 return qobject_cast<CParameterBase*>(CConnecter::GetParameter());
127 if(nRet)
return nRet;
131 check = connect(
GetParameter(), SIGNAL(sigNameChanged()),
132 this, SLOT(slotUpdateName()));
134 check = connect(
GetParameter(), SIGNAL(sigShowServerNameChanged()),
135 this, SLOT(slotShowServerName()));
144 check = connect(
GetParameter(), SIGNAL(sigZoomFactorChanged(
double)),
145 pViewer, SLOT(slotSetZoomFactor(
double)));
164 bool check = connect(pPara, SIGNAL(sigShowProtocolPrefixChanged()),
165 this, SLOT(slotUpdateName()));
167 check = connect(pPara, SIGNAL(sigSHowIpPortInNameChanged()),
168 this, SLOT(slotUpdateName()));
173 QString szMsg =
"The CConnecter is not parameters! "
174 "please first create parameters, "
175 "then call SetParameter in the ";
176 szMsg += metaObject()->className() + QString(
"::")
177 + metaObject()->className();
178 szMsg += QString(
" or ") + metaObject()->className()
179 + QString(
"::") +
"Initial()";
180 szMsg +=
" to set the parameters pointer. "
181 "Default set CParameterClient for the parameters of connecter "
182 "(CParameterConnecter or its derived classes) "
183 "See: CClient::CreateConnecter. "
184 "If you are sure the parameter of connecter "
185 "does not need CParameterClient. "
186 "Please overload the SetParameterClient in the ";
187 szMsg += QString(metaObject()->className()) +
" . don't set it";
188 qCritical(log) << szMsg.toStdString().c_str();
196 qDebug(log) << Q_FUNC_INFO;
198 = qobject_cast<CPluginClientThread*>(GetPlugClient());
200 emit sigOpenConnect(
this);
204 int nRet = m_pConnect->
Connect();
217 qDebug(log) << Q_FUNC_INFO;
219 = qobject_cast<CPluginClientThread*>(GetPlugClient());
221 emit sigCloseconnect(
this);
225 m_pConnect->deleteLater();
226 m_pConnect =
nullptr;
237 &&
GetParameter()->GetParameterClient()->GetShowIpPortInName())
240 +
":" + QString::number(
GetParameter()->m_Net.GetPort());
245 return m_szServerName;
250 if(m_szServerName == szName)
253 m_szServerName = szName;
virtual int Disconnect()
断开
virtual int Connect()
开始连接。根据 OnInit() 返回值来决定是否开始定时器来支持非 qt 事件
插件的连接者接口,此接口仅由插件使用。 所有的需要 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:端口
void sigUpdateName(const QString &szName)
void sigConnected()
连接成功信号。仅由插件触发。 应用程序需要在此时设置视图属性 Enabled 为 true 。允许接收键盘和鼠标事件
virtual QWidget * GetViewer()=0
得到显示视图
void sigDisconnected()
断开连接成功信号。仅由插件触发
virtual int SetParameter(CParameter *p)
设置参数
void sigDisconnect()
通知用户断开连接。仅由插件触发。 当从插件中需要要断开连接时触发。例如:对端断开连接、重置连接或者连接出错。 当应用接收到此信号后,调用 DisConnect() 关闭连接。
virtual const QString Protocol() const
Protocol
void sigUpdateParameters(CConnecter *pConnecter)
更新参数,通知应用程序保存或显示参数
用于显示从 CConnectDesktop 输出的图像,和向 CConnectDesktop 发送键盘、鼠标事件。
连接基础参数接口。包括基本参数(网络参数等)。 所有插件的连接参数都应从此类派生。
客户端库 (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))名与其相关。