123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #include "waterserver4.h"
- #include <string.h>
- #include "../ytUserInfoProcess/userinfo.h"
- #include "../DataPrecessDog/dataprecess.h"
- //#include "water.h"
- #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
- WaterServer4::WaterServer4(QObject *parent) :
- QObject(parent)
- {
- timer = new QTimer(this);
- connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
- svr = new QTcpServer(this);
- connect(svr, SIGNAL(newConnection()),this,SLOT(new_incomming()));
- }
- void WaterServer4::start(){
- if(!svr->listen(QHostAddress::Any,55222)){
- printf("55222 listen failed\n");
- exit(-1);
- }
- timer->start(1000);
- }
- void WaterServer4::timeout()
- {
- uint t = QDateTime::currentDateTime().toTime_t();
- // dataProcessShm->processStatus[14].upTime[0].Enabled = 0x01;
- // dataProcessShm->processStatus[14].upTime[0].t_time = t;
- }
- void WaterServer4::new_incomming(){
- QTcpSocket *so = svr->nextPendingConnection();
- connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
- }
- quint8 WaterServer4::hexstr_to_byte(QString dat)
- {
- quint8 tmp[2];
- QByteArray Dat = dat.toLower().toLatin1();
- quint8 temp;
- temp = Dat.at(0)&0xff;
- if((temp>=0x30)&&(temp<=0x39))
- tmp[0] = temp-0x30;
- else
- tmp[0] = temp-0x37;
- temp = Dat.at(1)&0xff;
- if((temp>=0x30)&&(temp<=0x39))
- tmp[1] = temp-0x30;
- else
- tmp[1] = temp-0x37;
- return static_cast<quint8>(((tmp[0]&0x0f)<<4)|(tmp[1]&0x0f));
- }
- void WaterServer4::check_framedata(QString data, QString etime, QString ip)
- {
- UN_REFERENCED_PARAMETER(etime);
- if((data.length()%2)==0){
- int len = data.length()/2;
- QByteArray Dat = QByteArray(len,0x00);
- for(int i=0;i<len;i++)
- Dat[i] = static_cast<char>(hexstr_to_byte(data.mid(i*2,2))&0xff);
- if(((Dat[0]&0xff)==0x7e)&&((Dat[len-1]&0xff)==0x7e)&&((Dat[1]&0xff)==0x01)&&((Dat[10]&0xff)==0x01)){
- QDateTime stime = QDateTime::fromTime_t(static_cast<uint>(((Dat[2]&0x000000ff)<<24)|((Dat[3]&0x000000ff)<<16)|((Dat[4]&0x000000ff)<<8)|(Dat[5]&0x000000ff)));
- quint16 bodyLen = static_cast<quint16>(((Dat[8]&0x00ff)<<8)|(Dat[9]&0x00ff));
- if(len==(bodyLen+15)){
- int cur = 0;
- QByteArray Body = Dat.mid(12,bodyLen);
- quint64 device_id=0;
- double wsignal=0;
- quint8 vbattery=0;
- quint16 vsmoke=0;
- quint8 alarm=0;
- qint8 temp=0;
- while(cur<(bodyLen-1)){
- quint8 type = Body.at(cur)&0xff;
- int dLen = static_cast<int>(Body.at(cur+1)&0xff);
- if(bodyLen>=(cur+2+dLen)){
- if((type==0x03)||(type==0x16))
- return;
- if((type==0x65)&&(dLen==0x08)){
- for(int i=0;i<8;i++){
- device_id =device_id*100+ ((Body.at(cur+2+i)>>4)&0x0f)*10+(Body.at(cur+2+i)&0x0f);
- }
- }else if((type==0x6c)&&(dLen==0x02)){
- wsignal = (static_cast<qint16>(((Body.at(cur+2)&0x00ff)<<8)|(Body.at(cur+3)&0x00ff)))*0.1;
- }else if((type==0x24)&&(dLen==0x01)){
- vbattery = Body.at(cur+2)&0xff;
- }else if((type==0x0b)&&(dLen==0x01)){
- temp = static_cast<qint8>(Body.at(cur+2)&0xff);
- }else if((type==0x14)&&(dLen==0x02)){
- vsmoke = static_cast<quint16>(((Body.at(cur+2)&0x00ff)<<8)|(Body.at(cur+3)&0x00ff));
- }else if((type==0x01)&&(dLen==0x01)&&((Body.at(cur+2)&0xff)==0x01)){
- alarm = 0x01;
- }else if((type==0x19)&&(dLen==0x01)&&((Body.at(cur+2)&0xff)==0x01)){
- alarm =0x01;
- }
- }else
- return;
- cur += dLen+2;
- }
- }
- }
- }
- }
- void WaterServer4::check_smokedata(QString data, QString ip){
- QJsonParseError json_error;
- QString jEventTime="",jPayload="";
- QJsonDocument jsonDoc(QJsonDocument::fromJson(data.toUtf8(),&json_error));
- if(json_error.error==QJsonParseError::NoError){
- QJsonObject root = jsonDoc.object();
- if((!root.value("service").isUndefined())&&(!root.value("service").isNull())&&(root.value("service").isObject())){
- QJsonObject jService = root.value("service").toObject();
- if((!jService.value("eventTime").isUndefined())&&(!jService.value("eventTime").isNull())&&(jService.value("eventTime").isString()))
- jEventTime = jService.value("eventTime").toString();
- if((!jService.value("data").isUndefined())&&(!jService.value("data").isNull())&&(jService.value("data").isObject())){
- QJsonObject jData = jService.value("data").toObject();
- if((!jData.value("payload").isUndefined())&&(!jData.value("payload").isNull())&&(jData.value("payload").isString()))
- jPayload = jData.value("payload").toString();
- }
- }
- }
- if((jPayload.length()>0)&&(jEventTime.length()>0)){
- check_framedata(jPayload,jEventTime,ip);
- }
- }
- void WaterServer4::check_serverdata(QString data, QString ip){
- QDateTime dt = QDateTime::currentDateTime();
- QStringList dataList = data.split("\r\n");
- for(int i=0;i<dataList.length();i++){
- if(dataList.at(i).indexOf("\"notifyType\":\"deviceDataChanged\"")>0){
- check_smokedata(dataList.at(i), ip);
- }
- }
- }
- void WaterServer4::read_data(){
- QTcpSocket *so = static_cast<QTcpSocket *>(sender());
- QString data = QString(so->readAll());
- emit getCommData(QString("[ %1 %2 <<< ] %3").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz").arg(so->peerAddress().toString()).arg(data)));
- so->write("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n");
- so->close();
- check_serverdata(data, so->peerAddress().toString());
- }
|