玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
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
10static Q_LOGGING_CATEGORY(log, "Channel")
11
12QSharedPointer<QTranslator> g_Translator = nullptr;
13
14CChannel::CChannel(QObject *parent)
15 : QIODevice(parent),
16 m_pSocket(nullptr)
17{}
18
19CChannel::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
27CChannel::~CChannel()
28{
29 qDebug(log) << "CChannel::~CChannel";
30}
31
32qint64 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
53qint64 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
76bool CChannel::isSequential() const
77{
78 return true;
79}
80
81void 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
92bool 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
118void 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
130{
131 return QString();
132}
133
135{
136 if(!g_Translator)
137 g_Translator = RabbitCommon::CTools::Instance()->InstallTranslator(
138 "Channel", RabbitCommon::CTools::TranslationType::Library);
139 return 0;
140}
141
143{
144 if(g_Translator)
145 RabbitCommon::CTools::Instance()->RemoveTranslator(g_Translator);
146 return 0;
147}
通道接口类。此类默认实现一个 TCP 的通道。
Definition Channel.h:28
static int RemoveTranslation()
Remove translation
Definition Channel.cpp:142
static int InitTranslation()
Initial translation
Definition Channel.cpp:134
void sigSend(quint64 counts)
Send data counts
void sigConnected()
emit when the channel is connected.
void sigReceive(quint64 counts)
Receive data counts
void sigDisconnected()
emit when the channel is disconnected
void sigError(int nErr, const QString &szErr)
emit when the channel is error
virtual bool open(OpenMode mode) override
Definition Channel.cpp:92
virtual QString GetDetails()
依赖信息
Definition Channel.cpp:129
CChannel(QTcpSocket *pSocket, QObject *parent=nullptr)
CChannel
Definition Channel.cpp:19