3#include <QLoggingCategory>
4#include "OperateRawStream.h"
5#include "DlgSettingsRawStream.h"
8static Q_LOGGING_CATEGORY(log,
"RawStream.Operate")
13 SetParameter(&m_Parameter);
16COperateRawStream::~COperateRawStream()
29int COperateRawStream::Start()
34 slotUpdateParameter(
this);
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);
43 switch(m_Parameter.GetType()) {
44 case CParameterRawStream::TYPE::TCP:
45 nLen = m_TcpSocket.write(data);
47 case CParameterRawStream::TYPE::NamePipe:
55 check = connect(&m_TcpSocket, SIGNAL(connected()),
58 check = connect(&m_TcpSocket, SIGNAL(readyRead()),
59 this, SLOT(slotReadyRead()));
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());
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());
75 case CParameterRawStream::TYPE::NamePipe:
81 m_pTerminal->startTerminalTeletype();
86int COperateRawStream::Stop()
96void COperateRawStream::slotReadyRead()
98 if(!m_TcpSocket.isOpen())
100 auto data = m_TcpSocket.readAll();
102 GetStats()->AddReceives(data.length());
103 WriteTerminal(data.data(), data.length());
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());
116 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
117 szId = szId.replace(exp,
"_");
123 QString szName = m_Parameter.GetName();
125 if(szName.isEmpty()) {
126 if(CParameterRawStream::TYPE::TCP == m_Parameter.GetType()) {
127 auto &net = m_Parameter.m_Net;
128 if(!net.GetHost().isEmpty()) {
130 && (
GetParameter()->GetGlobalParameters()->GetNameStyles()
131 & CParameterPlugin::NameStyle::Protocol)
134 szName += net.GetHost()
135 +
":" + QString::number(net.GetPort());
147 QString szDescription;
148 if(!
Name().isEmpty())
149 szDescription = tr(
"Name: ") +
Name() +
"\n";
152 szDescription += tr(
"Type: ") +
GetTypeName() +
"\n";
155 szDescription += tr(
"Protocol: ") +
Protocol();
157 if(!
GetPlugin()->DisplayName().isEmpty())
160 szDescription +=
"\n";
163 szDescription += tr(
"Raw stream type: ") + CParameterRawStream::GetTypeName(m_Parameter.GetType()) +
"\n";
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";
174 szDescription += tr(
"Security level: ");
175 if(!sl.GetUnicodeIcon().isEmpty())
176 szDescription += sl.GetUnicodeIcon() +
" ";
177 szDescription += sl.GetString() +
"\n";
183 return szDescription;
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
const QString Description() override
描述
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual CBackend * InstanceBackend() override
新建后端实例。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
const QString Name() override
名称
const QString Id() override
标识
CStats * GetStats() override
得到统计信息。如果有,其派生类则需要重载此函数提供统计信息。
virtual const QString Name() override
名称
virtual CParameterTerminalBase * GetParameter() const
Get parameters
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level
void sigFinished()
断开连接成功信号。仅由插件触发
void sigRunning()
开始成功信号。仅由插件触发。
void sigError(const int nError, const QString &szError)
当有错误产生时触发。
virtual const QString Protocol() const
协议
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
virtual const QString Id()
标识
virtual const QString GetTypeName() const
类型名
CParameterPlugin * GetGlobalParameters()
Get CParameterPlugin
virtual const QString DisplayName() const
在界面上显示的名称
virtual const QString Description() const =0
描述