|
@@ -0,0 +1,75 @@
|
|
|
+#include "wechartthreads.h"
|
|
|
+
|
|
|
+WechartThreads::WechartThreads(QObject *parent, quint16 idx, QString ip, QString path) :
|
|
|
+ QThread(parent)
|
|
|
+{
|
|
|
+ Idx = idx;
|
|
|
+ DestIp = ip;
|
|
|
+ DestPath = path;
|
|
|
+ DataList.clear();
|
|
|
+}
|
|
|
+
|
|
|
+void WechartThreads::appendData(QString data)
|
|
|
+{
|
|
|
+ QString Data = QString("POST %1 HTTP/1.1\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nContent-Length: %2\r\nAccept-Encoding: gzip\r\nAccept-Language: zh-CN,en,*\r\nUser-Agent: Mozilla/5.0\r\nHost: %3\r\n\r\n%4")
|
|
|
+ .arg(DestPath).arg(data.length()).arg("iot.usky.cn").arg(data);
|
|
|
+ DataList.append(Data);
|
|
|
+}
|
|
|
+
|
|
|
+void WechartThreads::stopwx()
|
|
|
+{
|
|
|
+ keepWorking = false;
|
|
|
+}
|
|
|
+
|
|
|
+void WechartThreads::wxchart(quint16 idx, QDateTime t, QString data, bool dirflag){
|
|
|
+ if(dirflag)
|
|
|
+ printf("[ %04d-%02d-%02d %02d:%02d:%02d >>> ] %s\n",
|
|
|
+ t.date().year(),t.date().month(),t.date().day(),
|
|
|
+ t.time().hour(),t.time().minute(),t.time().second(),
|
|
|
+ data.toUtf8().data());
|
|
|
+ else
|
|
|
+ printf("[ %04d-%02d-%02d %02d:%02d:%02d <<< ] %s\n",
|
|
|
+ t.date().year(),t.date().month(),t.date().day(),
|
|
|
+ t.time().hour(),t.time().minute(),t.time().second(),
|
|
|
+ data.toUtf8().data());
|
|
|
+}
|
|
|
+
|
|
|
+void WechartThreads::run()
|
|
|
+{
|
|
|
+ quint8 cur;
|
|
|
+ for(int i=0;i<16;i++){
|
|
|
+ so[i] = new QTcpSocket;
|
|
|
+ }
|
|
|
+ keepWorking = true;
|
|
|
+ cur=0;
|
|
|
+ while(keepWorking){
|
|
|
+ if(DataList.length()>0){
|
|
|
+ QString data = DataList.first();
|
|
|
+ so[cur]->connectToHost(QHostAddress(DestIp),80,QIODevice::ReadWrite);
|
|
|
+ if(so[cur]->waitForConnected()){
|
|
|
+ so[cur]->write(data.toUtf8());
|
|
|
+ so[cur]->flush();
|
|
|
+ wxchart(Idx,QDateTime::currentDateTime(),data,true);
|
|
|
+ DataList.removeFirst();
|
|
|
+ if(so[cur]->waitForReadyRead()){
|
|
|
+ QByteArray ret = so[cur]->readAll();
|
|
|
+ if(ret.length()>512)
|
|
|
+ ret = ret.mid(0,512);
|
|
|
+ wxchart(Idx,QDateTime::currentDateTime(),QString(ret),false);
|
|
|
+ so[cur]->close();
|
|
|
+ }else{
|
|
|
+ wxchart(Idx,QDateTime::currentDateTime(),QString("timeout"),false);
|
|
|
+ so[cur]->abort();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ cur++;
|
|
|
+ cur &= 0x0f;
|
|
|
+ }
|
|
|
+ usleep(100000);
|
|
|
+ }
|
|
|
+ for(int i=0;i<16;i++){
|
|
|
+ if(so[i]->isOpen())
|
|
|
+ so[i]->abort();
|
|
|
+ so[i]->deleteLater();
|
|
|
+ }
|
|
|
+}
|