玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
OperateFtpServer.cpp
1// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2// Author: Kang Lin <kl222@126.com>
3
4#include <QLoggingCategory>
5
6#include "BackendFtpServer.h"
7#include "DlgSettings.h"
8#include "Plugin.h"
9#include "OperateFtpServer.h"
10
11static Q_LOGGING_CATEGORY(log, "FtpServer.Operate")
13 : COperate(plugin)
14 , m_pThread(nullptr)
15 , m_pView(nullptr)
16 , m_pStart(nullptr)
17{
18 qDebug(log) << Q_FUNC_INFO;
19}
20
21COperateFtpServer::~COperateFtpServer()
22{
23 qDebug(log) << Q_FUNC_INFO;
24}
25
26const qint16 COperateFtpServer::Version() const
27{
28 return 0;
29}
30
32{
33 return m_pView;
34}
35
37{
38 qDebug(log) << Q_FUNC_INFO;
39 emit sigRunning();
40 return 0;
41}
42
44{
45 qDebug(log) << Q_FUNC_INFO;
46 if(m_pStart && m_pStart->isChecked())
47 m_pStart->setChecked(false);
48 emit sigFinished();
49 return 0;
50}
51
52CBackend* COperateFtpServer::InstanceBackend()
53{
54 auto p = new CBackendFtpServer(this);
55 bool check = connect(p, SIGNAL(sigConnectCount(int,int,int)),
56 m_pView, SLOT(slotConnectCount(int,int,int)));
57 Q_ASSERT(check);
58 check = connect(p, SIGNAL(sigConnected(QString,quint16)),
59 m_pView, SLOT(slotConnected(QString,quint16)));
60 Q_ASSERT(check);
61 check = connect(p, SIGNAL(sigDisconnected(QString,quint16)),
62 m_pView, SLOT(slotDisconnected(QString,quint16)));
63 Q_ASSERT(check);
64 check = connect(m_pView, SIGNAL(sigDisconnect(QString,quint16)),
65 p, SLOT(slotDisconnect(QString,quint16)));
66 Q_ASSERT(check);
67 return p;
68}
69
71{
72 if(GetParameter()) {
73 GetParameter()->SetGlobalParameters(pPara);
74 GetParameter()->m_Net.m_User.SetSavePassword(true);
75 if(pPara) {
76 bool check = connect(pPara, SIGNAL(sigNameStylesChanged()),
77 this, SLOT(slotUpdateName()));
78 Q_ASSERT(check);
79 }
80 return 0;
81 } else {
82 QString szMsg = "There is not parameters! "
83 "please first create parameters, "
84 "then call SetParameter() in the ";
85 szMsg += metaObject()->className() + QString("::")
86 + metaObject()->className();
87 szMsg += QString("() or ") + metaObject()->className()
88 + QString("::") + "Initial()";
89 szMsg += " to set the parameters pointer. "
90 "Default set CParameterClient for the parameters of operate "
91 "(CParameterOperate or its derived classes) "
92 "See CManager::CreateOperate. "
93 "If you are sure the parameter of operate "
94 "does not need CParameterClient. "
95 "Please overload the SetGlobalParameters() in the ";
96 szMsg += QString(metaObject()->className()) + " . don't set it";
97 qCritical(log) << szMsg.toStdString().c_str();
98 Q_ASSERT(false);
99 }
100 return -1;
101}
102
104{
105 auto pDlg = new CDlgSettings(m_Para, parent);
106 return pDlg;
107}
108
109int COperateFtpServer::Load(QSettings &set)
110{
111 if(m_Para)
112 return m_Para->Load(set);
113 return 0;
114}
115
116int COperateFtpServer::Save(QSettings &set)
117{
118 if(m_Para)
119 return m_Para->Save(set);
120 return 0;
121}
122
124{
125 qDebug(log) << Q_FUNC_INFO;
126 int nRet = 0;
127 bool check = false;
128
129 m_Para = QSharedPointer<CParameterFtpServer>(new CParameterFtpServer());
130 if(!m_Para)
131 return -1;
132
133 check = connect(m_Para.get(), &CParameter::sigChanged,
134 this, [&](){
135 emit this->sigUpdateParameters(this);
136 });
137 Q_ASSERT(check);
138
139 nRet = COperate::Initial();
140 if(nRet)
141 return nRet;
142
143 m_pStart = m_Menu.addAction(QIcon::fromTheme("media-playback-start"), tr("Start server"));
144 check = connect(m_pStart, &QAction::toggled, this, &COperateFtpServer::slotStart);
145 Q_ASSERT(check);
146 m_pStart->setCheckable(true);
147 m_pStart->setToolTip(m_pStart->text());
148 if(m_pActionSettings) {
149 m_Menu.addSeparator();
150 m_Menu.addAction(m_pActionSettings);
151 }
152
153 m_pView = new CFrmMain(this);
154 return nRet;
155}
156
158{
159 qDebug(log) << Q_FUNC_INFO;
160 if(m_pView)
161 delete m_pView;
162 return 0;
163}
164
165QSharedPointer<CParameterFtpServer> COperateFtpServer::GetParameter() const
166{
167 return m_Para;
168}
169
170void COperateFtpServer::slotStart(bool checked)
171{
172 qDebug(log) << Q_FUNC_INFO << m_pStart->isChecked();
173 bool check = false;
174 if(!checked) {
175 m_pStart->setText(tr("Start server"));
176 m_pStart->setToolTip(m_pStart->text());
177 m_pStart->setIcon(QIcon::fromTheme("media-playback-start"));
178 if(m_pThread)
179 {
180 slotSetSecurityLevel(CSecurityLevel::Level::No);
181 m_pThread->quit();
182 //Don't delete m_pThread, See CBackendThread
183 m_pThread = nullptr;
184 }
185 return;
186 }
187
188 m_pStart->setText(tr("Stop server"));
189 m_pStart->setToolTip(m_pStart->text());
190 m_pStart->setIcon(QIcon::fromTheme("media-playback-stop"));
191 Q_ASSERT(!m_pThread);
192 m_pThread = new CBackendThread(this, false);
193 if(!m_pThread) {
194 qCritical(log) << "new CBackendThread fail";
195 return;
196 }
197 check = connect(this, &COperateFtpServer::sigError,
198 this, [this](const int nError, const QString &szError){
199 m_pStart->setChecked(false);
200 });
201 Q_ASSERT(check);
202 m_pThread->start();
203}
204
206{
207 QString szName;
208 // Show the name of parameter
209 if(GetParameter() && !(GetParameter()->GetName().isEmpty()))
210 szName += GetParameter()->GetName();
211 else {
212 // Show the name
213 szName += COperate::Name();
214 }
215
216 // Show the prefix of security level
217 QString szSecurityLevel;
219 if((GetParameter()->GetGlobalParameters()->GetNameStyles()
220 & CParameterPlugin::NameStyle::SecurityLevel)
221 && !(GetSecurityLevel() & CSecurityLevel::Level::No)
222 && !sl.GetUnicodeIcon().isEmpty())
223 szSecurityLevel = sl.GetUnicodeIcon().left(2);
224
225 return szSecurityLevel + szName;
226}
227
229{
230 QString szDescription;
231 if(!Name().isEmpty())
232 szDescription = tr("Name: ") + Name() + "\n";
233
234 if(!GetTypeName().isEmpty())
235 szDescription += tr("Type: ") + GetTypeName() + "\n";
236
237 if(!Protocol().isEmpty()) {
238 szDescription += tr("Protocol: ") + Protocol();
239#ifdef DEBUG
240 if(!GetPlugin()->DisplayName().isEmpty())
241 szDescription += " - " + GetPlugin()->DisplayName();
242#endif
243 szDescription += "\n";
244 }
245
247 if(!(GetSecurityLevel() & CSecurityLevel::Level::No)) {
248 szDescription += tr("Security level: ");
249 if(!sl.GetUnicodeIcon().isEmpty())
250 szDescription += sl.GetUnicodeIcon() + " ";
251 szDescription += sl.GetString() + "\n";
252 }
253
254 if(!GetPlugin()->Description().isEmpty())
255 szDescription += tr("Description: ") + GetPlugin()->Description();
256
257 return szDescription;
258}
The backend thread
virtual void quit()
Quit
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
Definition Backend.h:42
virtual const QString Name() override
名称
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual int Stop() override
关闭
virtual const qint16 Version() const override
版本
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
应用插件全局参数
virtual int Start() override
开始
virtual int Initial() override
Initial parameters and resource
virtual int Clean() override
Clean parameters and resource
virtual QWidget * GetViewer() override
得到显示视图
virtual const QString Description() override
描述
virtual int Save(QSettings &set) override
保存参数
virtual int Load(QSettings &set) override
加载参数
操作接口。
Definition Operate.h:51
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level
Definition Operate.cpp:129
void sigFinished()
断开连接成功信号。仅由插件触发
void sigRunning()
开始成功信号。仅由插件触发。
void sigError(const int nError, const QString &szError)
当有错误产生时触发。
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
Definition Operate.cpp:190
virtual const QString Protocol() const
协议
Definition Operate.cpp:81
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
Definition Operate.cpp:219
virtual const QString Name()
名称
Definition Operate.cpp:46
virtual const QString GetTypeName() const
类型名
Definition Operate.cpp:86
插件的全局参数。
void sigChanged()
当参数改变时,触发 通常如果需要,则相应的参数会对应一个改变事件。
插件接口
Definition Plugin.h:15
virtual const QString DisplayName() const
在界面上显示的名称
Definition Plugin.cpp:76
virtual const QString Description() const =0
描述
安全级别
Definition Stats.h:79