Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
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}
The channel interface class.
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()
Depend on information.
Definition Channel.cpp:129
CChannel(QTcpSocket *pSocket, QObject *parent=nullptr)
CChannel.
Definition Channel.cpp:19