Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
OperateRawStream.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "OperateRawStream.h"
5#include "DlgSettingsRawStream.h"
6#include "Plugin.h"
7
8static Q_LOGGING_CATEGORY(log, "RawStream.Operate")
9
11 : COperateTerminal(plugin)
12{
13 SetParameter(&m_Parameter);
14}
15
16COperateRawStream::~COperateRawStream()
17{}
18
20{
21 return new CDlgSettingsRawStream(&m_Parameter, parent);
22}
23
25{
26 return nullptr;
27}
28
29int COperateRawStream::Start()
30{
31 if(!m_pTerminal)
32 return -1;
33
34 slotUpdateParameter(this);
35
36 bool check = false;
37 check = connect(m_pTerminal, &QTermWidget::sendData,
38 this, [&](const char* buf, int len){
39 if(!m_TcpSocket.isOpen()) return;
40 QByteArray data(buf, len);
41 //qDebug(log) << "Send data:" << data << data.toHex(':');
42 qint64 nLen = 0;
43 switch(m_Parameter.GetType()) {
44 case CParameterRawStream::TYPE::TCP:
45 nLen = m_TcpSocket.write(data);
46 break;
47 case CParameterRawStream::TYPE::NamePipe:
48 break;
49 }
50 if(GetStats())
51 GetStats()->AddSends(nLen);
52 });
53 Q_ASSERT(check);
54
55 check = connect(&m_TcpSocket, SIGNAL(connected()),
56 this, SIGNAL(sigRunning()));
57 Q_ASSERT(check);
58 check = connect(&m_TcpSocket, SIGNAL(readyRead()),
59 this, SLOT(slotReadyRead()));
60 Q_ASSERT(check);
61 check = connect(&m_TcpSocket, &QTcpSocket::errorOccurred,
62 this, [&](QAbstractSocket::SocketError error) {
63 qCritical(log) << m_TcpSocket.errorString() << error;
64 if(m_TcpSocket.isOpen())
65 emit sigError(error, m_TcpSocket.errorString());
66 });
67 Q_ASSERT(check);
68
69 switch(m_Parameter.GetType()) {
70 case CParameterRawStream::TYPE::TCP: {
71 auto &net = m_Parameter.m_Net;
72 m_TcpSocket.connectToHost(net.GetHost(), net.GetPort());
73 break;
74 }
75 case CParameterRawStream::TYPE::NamePipe:
76 break;
77 default:
78 emit sigRunning();
79 }
80
81 m_pTerminal->startTerminalTeletype();
82
83 return 0;
84}
85
86int COperateRawStream::Stop()
87{
88 if(m_pTerminal)
89 m_pTerminal->close();
90
91 m_TcpSocket.close();
92 emit sigFinished();
93 return 0;
94}
95
96void COperateRawStream::slotReadyRead()
97{
98 if(!m_TcpSocket.isOpen())
99 return;
100 auto data = m_TcpSocket.readAll();
101 if(GetStats())
102 GetStats()->AddReceives(data.length());
103 WriteTerminal(data.data(), data.length());
104}
105
106const QString COperateRawStream::Id()
107{
108 QString szId;
109 szId = COperate::Id();
110 if(CParameterRawStream::TYPE::TCP == m_Parameter.GetType()) {
111 auto &net = m_Parameter.m_Net;
112 if(!net.GetHost().isEmpty())
113 szId += "_" + net.GetHost()
114 + "_" + QString::number(net.GetPort());
115 }
116 static QRegularExpression exp("[-@:/#%!^&* \\.]");
117 szId = szId.replace(exp, "_");
118 return szId;
119}
120
122{
123 QString szName = m_Parameter.GetName();
124
125 if(szName.isEmpty()) {
126 if(CParameterRawStream::TYPE::TCP == m_Parameter.GetType()) {
127 auto &net = m_Parameter.m_Net;
128 if(!net.GetHost().isEmpty()) {
129 if(m_Parameter.GetGlobalParameters()
130 && (GetParameter()->GetGlobalParameters()->GetNameStyles()
131 & CParameterPlugin::NameStyle::Protocol)
132 && !Protocol().isEmpty())
133 szName = Protocol() + ":";
134 szName += net.GetHost()
135 + ":" + QString::number(net.GetPort());
136 }
137 }
138 }
139
140 if(szName.isEmpty())
141 szName = COperateTerminal::Name();
142 return szName;
143}
144
146{
147 QString szDescription;
148 if(!Name().isEmpty())
149 szDescription = tr("Name: ") + Name() + "\n";
150
151 if(!GetTypeName().isEmpty())
152 szDescription += tr("Type: ") + GetTypeName() + "\n";
153
154 if(!Protocol().isEmpty()) {
155 szDescription += tr("Protocol: ") + Protocol();
156#ifdef DEBUG
157 if(!GetPlugin()->DisplayName().isEmpty())
158 szDescription += " - " + GetPlugin()->DisplayName();
159#endif
160 szDescription += "\n";
161 }
162
163 szDescription += tr("Raw stream type: ") + CParameterRawStream::GetTypeName(m_Parameter.GetType()) + "\n";
164
165 if(CParameterRawStream::TYPE::TCP == m_Parameter.GetType()) {
166 auto &net = m_Parameter.m_Net;
167 if(!net.GetHost().isEmpty())
168 szDescription += tr("Server address: ") + net.GetHost()
169 + ":" + QString::number(net.GetPort()) + "\n";
170 }
171
173 if(GetSecurityLevel() != CSecurityLevel::Level::No) {
174 szDescription += tr("Security level: ");
175 if(!sl.GetUnicodeIcon().isEmpty())
176 szDescription += sl.GetUnicodeIcon() + " ";
177 szDescription += sl.GetString() + "\n";
178 }
179
180 if(!GetPlugin()->Description().isEmpty())
181 szDescription += tr("Description: ") + GetPlugin()->Description();
182
183 return szDescription;
184}
Backend interface.
Definition Backend.h:42
const QString Description() override
Description.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
virtual CBackend * InstanceBackend() override
New CBackend.
const QString Name() override
Name.
Terminal operate interface.
CStats * GetStats() override
Get statistics.
virtual const QString Name() override
Name.
virtual CParameterTerminalBase * GetParameter() const
Get parameters.
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level.
Definition Operate.cpp:129
void sigFinished()
Successful disconnection signal.
void sigRunning()
Start success signal.
void sigError(const int nError, const QString &szError)
Triggered when an error is generated.
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
Definition Operate.cpp:219
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin.
Plugin interface.
Definition Plugin.h:15
virtual const QString DisplayName() const
The plugin display name.
Definition Plugin.cpp:76
virtual const QString Description() const =0
Plugin description.
Security level.
Definition Stats.h:79