appserver.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "appserver.h"
  2. #include "clientthread.h"
  3. #include "../ytDMPServerDog/dogshm.h"
  4. AppServer::AppServer(QObject *parent) : QTcpServer(parent)
  5. {
  6. isWorking = false;
  7. UpTime = 0;
  8. logThread = new LogThread(this);
  9. AppPDataList.clear();
  10. db = QSqlDatabase::addDatabase("QMYSQL");
  11. db.setHostName("101.133.214.75");
  12. db.setPort(3306);
  13. db.setUserName("usky");
  14. db.setPassword("Yt#75Usky");
  15. db.setDatabaseName("usky-cloud");
  16. timer = new QTimer(this);
  17. connect(timer,&QTimer::timeout,this,&AppServer::timeout);
  18. timeout();
  19. }
  20. void AppServer::start()
  21. {
  22. if(listen(QHostAddress::Any,51212)){
  23. printf("listen 51212 start\n");
  24. }else{
  25. printf("listen failed\n");
  26. exit(-1);
  27. }
  28. logThread->start();
  29. timer->start(1000);
  30. }
  31. void AppServer::timeout()
  32. {
  33. if(!isWorking){
  34. isWorking=true;
  35. uint t = QDateTime::currentDateTime().toTime_t();
  36. dogshm->version_feedtime = t;
  37. if((t-UpTime)>1800){
  38. if(db.open()){
  39. QList<AppPData> tmpList;
  40. QStringList AppIDList;
  41. UpTime=t;
  42. QSqlQuery qry;
  43. AppIDList.clear();
  44. qry = db.exec("select software_id from dmp_software_info");
  45. while(qry.next()){
  46. AppIDList.append(qry.value(0).toString());
  47. }
  48. qry.clear();
  49. for(int i=0;i<AppIDList.length();i++)
  50. {
  51. qry = db.exec(QString("SELECT software_id,id,major_version,minor_version,package_length,implement_time,check_code FROM dmp_software_upgrade where software_id='%1' order by major_version,minor_version desc limit 0,1").arg(AppIDList.at(i)));
  52. if (qry.next()) {
  53. AppPData pdata = AppPData(qry.value(0).toString(), qry.value(6).toString(), qry.value(2).toInt(), qry.value(3).toInt(), qry.value(4).toUInt(), qry.value(5).toDateTime().toTime_t());
  54. QSqlQuery qry2 = db.exec(QString("select subpackage_number,apply_package,subpackage_length,check_code from dmp_software_subpackage where upgrade_id = %1 order by subpackage_number").arg(qry.value(1).toInt()));
  55. int nrow = 0;
  56. while(qry2.next()){
  57. QByteArray d = qry2.value(1).toByteArray();
  58. bool ok;
  59. if((d.length()==qry2.value(2).toInt())&&(nrow==qry2.value(0).toInt())){
  60. pdata.AppendData(PData(qry2.value(3).toString().toUInt(&ok,16)&0xffff,d));
  61. nrow++;
  62. printf("nrow = %d\n",nrow);
  63. }else{
  64. db.close();
  65. isWorking=false;
  66. return;
  67. }
  68. }
  69. tmpList.append(pdata);
  70. }
  71. }
  72. db.close();
  73. if(tmpList.length()>0){
  74. AppPDataList.clear();
  75. AppPDataList.append(tmpList);
  76. }
  77. }
  78. }
  79. isWorking=false;
  80. }
  81. }
  82. void AppServer::commlog(QByteArray data, bool flag){
  83. QString log = QString("[ %1 %2 ] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(flag?"<<<":">>>");
  84. for(int i=0;i<data.length();i++)
  85. log.append(QString("%1 ").arg(data.at(i)&0xff,2,16,QChar('0')));
  86. logThread->appendData(log);
  87. }
  88. void AppServer::datalog(QString log){
  89. QString dat = QString("[ %1 ]").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
  90. dat.append(log);
  91. logThread->appendData(dat);
  92. }
  93. void AppServer::incomingConnection(qintptr socketDescriptor)
  94. {
  95. ClientThread *thread = new ClientThread(socketDescriptor,this);
  96. thread->setAppPDataList(AppPDataList);
  97. printf("AppPDataList0.length() [%d]\n",AppPDataList.length());
  98. connect(thread,&ClientThread::commlog,this,&AppServer::commlog);
  99. connect(thread,&ClientThread::datalog,this,&AppServer::datalog);
  100. connect(thread,&ClientThread::finished,thread,&ClientThread::quit);
  101. thread->run();
  102. }