138 lines
3.2 KiB
C++
138 lines
3.2 KiB
C++
#include "Parse.h"
|
|
|
|
|
|
Parse::Parse(QObject *parent) : QObject(parent)
|
|
{
|
|
setAutoDelete(true);
|
|
|
|
qRegisterMetaType<QList<QByteArray>>("QList<QByteArray>");
|
|
|
|
Packer_init(&packer);
|
|
Parser_init(&parser);
|
|
|
|
datagram.clear();
|
|
|
|
}
|
|
|
|
Parse::~Parse()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void Parse::run()
|
|
{
|
|
QElapsedTimer time;
|
|
time.start();
|
|
qDebug() << "parse thread:" << QThread::currentThreadId();
|
|
|
|
|
|
while (datagram.size() > 0) {
|
|
|
|
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
|
{
|
|
uint8_t id = -1;
|
|
switch (id = Parser_char(&parser,*i))
|
|
{
|
|
case 0x01:
|
|
{
|
|
union{uint8_t B[8];qint16 h[4];quint16 H[4]; qint32 i[2];quint32 I[2];qint64 q;quint64 Q;}src;
|
|
|
|
uint32_t index = 0;
|
|
|
|
src.B[0] = parser.buff[index++];
|
|
src.B[1] = parser.buff[index++];
|
|
src.B[2] = parser.buff[index++];
|
|
src.B[3] = parser.buff[index++];
|
|
src.B[4] = parser.buff[index++];
|
|
src.B[5] = parser.buff[index++];
|
|
src.B[6] = parser.buff[index++];
|
|
src.B[7] = parser.buff[index++];
|
|
qint64 time_t =src.Q;
|
|
|
|
QDateTime time = QDateTime::fromMSecsSinceEpoch(time_t);
|
|
|
|
src.B[0] = parser.buff[index++];
|
|
src.B[1] = parser.buff[index++];
|
|
src.B[2] = parser.buff[index++];
|
|
src.B[3] = parser.buff[index++];
|
|
src.B[4] = parser.buff[index++];
|
|
src.B[5] = parser.buff[index++];
|
|
src.B[6] = parser.buff[index++];
|
|
src.B[7] = parser.buff[index++];
|
|
qint64 save_count =src.Q;
|
|
|
|
src.B[0] = parser.buff[index++];
|
|
src.B[1] = parser.buff[index++];
|
|
src.B[2] = parser.buff[index++];
|
|
src.B[3] = parser.buff[index++];
|
|
quint32 ip = src.I[0];
|
|
|
|
|
|
src.B[0] = parser.buff[index++];
|
|
src.B[1] = parser.buff[index++];
|
|
quint16 port =src.H[0];
|
|
|
|
QByteArray frame;
|
|
frame.clear();
|
|
|
|
for(int i =0;i < parser.len;i++)
|
|
{
|
|
frame.append((const char)parser.buff[i]);
|
|
}
|
|
|
|
//qDebug() << time << save_count << QHostAddress(ip) << port;
|
|
|
|
FrameData.append(frame);
|
|
}
|
|
break;
|
|
default:
|
|
|
|
break;
|
|
}
|
|
}
|
|
emit frameList(FrameData);
|
|
|
|
|
|
|
|
|
|
datagram.clear();
|
|
break;//退出,结束线程
|
|
}
|
|
|
|
qDebug() << "thread finished, time: " << time.nsecsElapsed() << "ns";
|
|
}
|
|
|
|
void Parse::parseData(const QString filename)
|
|
{
|
|
qDebug() << "current thread is:" << QThread::currentThreadId();
|
|
|
|
if(filename.size() <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
QFile *file = new QFile(filename);
|
|
|
|
if(!file->open(QIODevice::ReadOnly))
|
|
{
|
|
delete file;
|
|
file = nullptr;
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
FrameData.clear();
|
|
datagram.clear();
|
|
datagram.append(file->readAll());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|