Rabbit Remote Control 0.0.36
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 return nRet;
49}
50
51qint64 CChannel::writeData(const char *data, qint64 len)
52{
53 //qDebug(log) << Q_FUNC_INFO << len;
54 if(nullptr == data || 0 > len) {
55 qCritical(log) << Q_FUNC_INFO << "The parameters is invalid" << len;
56 return -1;
57 }
58
59 if(0 == len) {
60 qDebug(log) << Q_FUNC_INFO << "len:" << len;
61 return 0;
62 }
63
64 qint64 nRet = 0;
65 if(!m_pSocket) return nRet;
66 nRet = m_pSocket->write(data, len);
67 if(nRet < 0)
68 setErrorString(m_pSocket->errorString());
69 return nRet;
70}
71
72bool CChannel::isSequential() const
73{
74 return true;
75}
76
77void CChannel::slotError(QAbstractSocket::SocketError e)
78{
79 QString szError;
80 if(m_pSocket) {
81 szError = m_pSocket->errorString();
82 setErrorString(szError);
83 }
84 // qDebug(log) << "CChannel::slotError()" << e << szError;
85 emit sigError(e, szError);
86}
87
88bool CChannel::open(OpenMode mode)
89{
90 bool check = false;
91
92 if(!m_pSocket) return false;
93
94 check = connect(m_pSocket, SIGNAL(readyRead()),
95 this, SIGNAL(readyRead()));
96 Q_ASSERT(check);
97 check = connect(m_pSocket, SIGNAL(connected()),
98 this, SIGNAL(sigConnected()));
99 Q_ASSERT(check);
100 check = connect(m_pSocket, SIGNAL(disconnected()),
101 this, SIGNAL(sigDisconnected()));
102 Q_ASSERT(check);
103 check = connect(m_pSocket,
104 #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
105 SIGNAL(errorOccurred(QAbstractSocket::SocketError)),
106 #else
107 SIGNAL(error(QAbstractSocket::SocketError)),
108 #endif
109 this, SLOT(slotError(QAbstractSocket::SocketError)));
110 Q_ASSERT(check);
111 return QIODevice::open(mode);
112}
113
114void CChannel::close()
115{
116 qDebug(log) << Q_FUNC_INFO;
117 if(!isOpen()) return;
118 if(m_pSocket) {
119 m_pSocket->close();
120 m_pSocket = nullptr;
121 }
122 QIODevice::close();
123}
124
126{
127 return QString();
128}
129
131{
132 if(!g_Translator)
133 g_Translator = RabbitCommon::CTools::Instance()->InstallTranslator(
134 "Channel", RabbitCommon::CTools::TranslationType::Library);
135 return 0;
136}
137
139{
140 if(g_Translator)
141 RabbitCommon::CTools::Instance()->RemoveTranslator(g_Translator);
142 return 0;
143}
The channel interface class.
Definition Channel.h:25
static int RemoveTranslation()
Remove translation.
Definition Channel.cpp:138
static int InitTranslation()
Initial translation.
Definition Channel.cpp:130
void sigConnected()
emit when the channel is connected.
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:88
virtual QString GetDetails()
Depend on information.
Definition Channel.cpp:125
CChannel(QTcpSocket *pSocket, QObject *parent=nullptr)
CChannel.
Definition Channel.cpp:19