60 #define USENEWSERVER 1
68 CommandThread::CommandThread(
int socketDescriptor, qint32 p_iId, QObject *parent)
70 , socketDescriptor(socketDescriptor)
80 CommandThread::~CommandThread()
89 void CommandThread::attachCommandReply(QString p_blockReply, qint32 p_iID)
91 qDebug() <<
"CommandThread::attachCommandReply";
92 if(p_iID == m_iThreadID)
95 m_qSendData = p_blockReply;
103 void CommandThread::run()
107 QTcpSocket t_qTcpSocket;
109 if (!t_qTcpSocket.setSocketDescriptor(socketDescriptor)) {
110 emit error(t_qTcpSocket.error());
115 printf(
"CommandClient connection accepted from\n\tIP:\t%s\n\tPort:\t%d\n\n",
116 QHostAddress(t_qTcpSocket.peerAddress()).toString().toUtf8().constData(),
117 t_qTcpSocket.peerPort());
120 QDataStream t_FiffStreamIn(&t_qTcpSocket);
121 t_FiffStreamIn.setVersion(QDataStream::Qt_5_1);
124 qint64 t_iMaxBufSize = 1024;
127 while(t_qTcpSocket.state() != QAbstractSocket::UnconnectedState && m_bIsRunning)
133 if(m_qSendData.size() > 0)
136 QDataStream out(&block, QIODevice::WriteOnly);
137 out.setVersion(QDataStream::Qt_5_1);
143 out.device()->seek(0);
144 out << (quint16)(block.size() -
sizeof(quint16));
146 t_qTcpSocket.write(block);
147 t_qTcpSocket.waitForBytesWritten();
154 t_qTcpSocket.waitForReadyRead(100);
156 if (t_qTcpSocket.bytesAvailable() >= (int)
sizeof(quint16))
158 quint16 blockSize = 0;
160 bool respComplete =
false;
161 t_FiffStreamIn >> blockSize;
163 while(!respComplete && blockSize < 65000)
165 if (t_qTcpSocket.bytesAvailable() >= blockSize)
169 t_FiffStreamIn >> t_sCommand;
171 t_sCommand = t_sCommand.simplified();
176 if(!t_sCommand.isEmpty())
177 emit newCommand(t_sCommand, m_iThreadID);
188 if(m_qSendBlock.size() > 0)
190 qint32 t_iBlockSize = m_qSendBlock.size();
192 qint32 t_iBytesWritten = t_qTcpSocket.write(m_qSendBlock);
193 t_qTcpSocket.waitForBytesWritten();
194 if(t_iBytesWritten == t_iBlockSize)
195 m_qSendBlock.clear();
197 m_qSendBlock = m_qSendBlock.mid(t_iBytesWritten, t_iBlockSize-t_iBytesWritten);
205 t_qTcpSocket.waitForReadyRead(100);
207 if (t_qTcpSocket.bytesAvailable() > 0 && t_qTcpSocket.canReadLine())
209 QByteArray t_qByteArrayRaw = t_qTcpSocket.readLine(t_iMaxBufSize);
210 QString t_sCommand = QString(t_qByteArrayRaw).simplified();
215 if(!t_sCommand.isEmpty())
216 emit newCommand(t_sCommand, m_iThreadID);
218 else if(t_qTcpSocket.bytesAvailable() > t_iMaxBufSize)
220 t_qTcpSocket.readAll();
225 t_qTcpSocket.disconnectFromHost();
226 if(t_qTcpSocket.state() != QAbstractSocket::UnconnectedState)
227 t_qTcpSocket.waitForDisconnected();
implementation of the CommandThread Class.