玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Src
Channel
Channel.cpp
1
// Author: Kang Lin <kl222@126.com>
2
3
#include "Channel.h"
4
#include <QtGlobal>
5
#include <QCoreApplication>
6
#include <QLoggingCategory>
7
#include <QTranslator>
8
#include "RabbitCommonTools.h"
9
10
static
Q_LOGGING_CATEGORY(log,
"Channel"
)
11
12
QSharedPointer<QTranslator> g_Translator =
nullptr
;
13
14
CChannel
::
CChannel
(QObject *parent)
15
: QIODevice(parent),
16
m_pSocket(
nullptr
)
17
{}
18
19
CChannel::CChannel
(QTcpSocket *pSocket, QObject *parent)
20
: QIODevice(parent),
21
m_pSocket(pSocket)
22
{
23
qDebug(log) <<
"CChannel::CChannel"
;
24
Q_ASSERT(m_pSocket);
25
}
26
27
CChannel::~CChannel()
28
{
29
qDebug(log) <<
"CChannel::~CChannel"
;
30
}
31
32
qint64 CChannel::readData(
char
*data, qint64 maxlen)
33
{
34
//qDebug(log) << Q_FUNC_INFO << maxlen;
35
qint64 nRet = 0;
36
if
(
nullptr
== data || 0 > maxlen) {
37
qCritical(log) << Q_FUNC_INFO <<
"The parameters is invalid"
<< maxlen;
38
return
-1;
39
}
40
if
(0 == maxlen) {
41
qDebug(log) << Q_FUNC_INFO <<
"maxlen:"
<< maxlen;
42
return
0;
43
}
44
if
(!m_pSocket)
return
nRet;
45
nRet = m_pSocket->read(data, maxlen);
46
if
(nRet < 0)
47
setErrorString(m_pSocket->errorString());
48
else
49
emit
sigReceive
(nRet);
50
return
nRet;
51
}
52
53
qint64 CChannel::writeData(
const
char
*data, qint64 len)
54
{
55
//qDebug(log) << Q_FUNC_INFO << len;
56
if
(
nullptr
== data || 0 > len) {
57
qCritical(log) << Q_FUNC_INFO <<
"The parameters is invalid"
<< len;
58
return
-1;
59
}
60
61
if
(0 == len) {
62
qDebug(log) << Q_FUNC_INFO <<
"len:"
<< len;
63
return
0;
64
}
65
66
qint64 nRet = 0;
67
if
(!m_pSocket)
return
nRet;
68
nRet = m_pSocket->write(data, len);
69
if
(nRet < 0)
70
setErrorString(m_pSocket->errorString());
71
else
72
emit
sigSend
(nRet);
73
return
nRet;
74
}
75
76
bool
CChannel::isSequential()
const
77
{
78
return
true
;
79
}
80
81
void
CChannel::slotError(QAbstractSocket::SocketError e)
82
{
83
QString szError;
84
if
(m_pSocket) {
85
szError = m_pSocket->errorString();
86
setErrorString(szError);
87
}
88
// qDebug(log) << "CChannel::slotError()" << e << szError;
89
emit
sigError
(e, szError);
90
}
91
92
bool
CChannel::open
(OpenMode mode)
93
{
94
bool
check =
false
;
95
96
if
(!m_pSocket)
return
false
;
97
98
check = connect(m_pSocket, SIGNAL(readyRead()),
99
this
, SIGNAL(readyRead()));
100
Q_ASSERT(check);
101
check = connect(m_pSocket, SIGNAL(connected()),
102
this
, SIGNAL(
sigConnected
()));
103
Q_ASSERT(check);
104
check = connect(m_pSocket, SIGNAL(disconnected()),
105
this
, SIGNAL(
sigDisconnected
()));
106
Q_ASSERT(check);
107
check = connect(m_pSocket,
108
#
if
QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
109
SIGNAL(errorOccurred(QAbstractSocket::SocketError)),
110
#
else
111
SIGNAL(error(QAbstractSocket::SocketError)),
112
#endif
113
this
, SLOT(slotError(QAbstractSocket::SocketError)));
114
Q_ASSERT(check);
115
return
QIODevice::open(mode);
116
}
117
118
void
CChannel::close()
119
{
120
qDebug(log) << Q_FUNC_INFO;
121
if
(!isOpen())
return
;
122
if
(m_pSocket) {
123
m_pSocket->close();
124
m_pSocket =
nullptr
;
125
}
126
QIODevice::close();
127
}
128
129
QString
CChannel::GetDetails
()
130
{
131
return
QString();
132
}
133
134
int
CChannel::InitTranslation
()
135
{
136
if
(!g_Translator)
137
g_Translator = RabbitCommon::CTools::Instance()->InstallTranslator(
138
"Channel"
, RabbitCommon::CTools::TranslationType::Library);
139
return
0;
140
}
141
142
int
CChannel::RemoveTranslation
()
143
{
144
if
(g_Translator)
145
RabbitCommon::CTools::Instance()->RemoveTranslator(g_Translator);
146
return
0;
147
}
CChannel
通道接口类。此类默认实现一个 TCP 的通道。
定义
Channel.h:28
CChannel::RemoveTranslation
static int RemoveTranslation()
Remove translation
定义
Channel.cpp:142
CChannel::InitTranslation
static int InitTranslation()
Initial translation
定义
Channel.cpp:134
CChannel::sigSend
void sigSend(quint64 counts)
Send data counts
CChannel::sigConnected
void sigConnected()
emit when the channel is connected.
CChannel::sigReceive
void sigReceive(quint64 counts)
Receive data counts
CChannel::sigDisconnected
void sigDisconnected()
emit when the channel is disconnected
CChannel::sigError
void sigError(int nErr, const QString &szErr)
emit when the channel is error
CChannel::open
virtual bool open(OpenMode mode) override
定义
Channel.cpp:92
CChannel::GetDetails
virtual QString GetDetails()
依赖信息
定义
Channel.cpp:129
CChannel::CChannel
CChannel(QTcpSocket *pSocket, QObject *parent=nullptr)
CChannel
定义
Channel.cpp:19
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力