mainwindow.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <memory>
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. mpSocket = new QUdpSocket(this);
  10. mpSocketListen = new QUdpSocket(this);
  11. mpSocketListen->bind(QHostAddress::Any,60019);//
  12. connect(mpSocketListen,SIGNAL(readyRead()),this,SLOT(onRecvData()));
  13. #ifdef ANDROID
  14. ui->pushButton_Start->setGeometry(100,100,600,100);
  15. ui->pushButton_Stop->setGeometry(100,300,600,100);
  16. ui->pushButton_Query->setGeometry(100,500,600,100);
  17. ui->plainTextEdit->setGeometry(100,800,600,600);
  18. #endif
  19. }
  20. MainWindow::~MainWindow()
  21. {
  22. delete ui;
  23. }
  24. void MainWindow::on_pushButton_Start_clicked()
  25. {
  26. ui->plainTextEdit->setPlainText("");
  27. int nCode = 1;
  28. char strout[100];
  29. memcpy(strout,&nCode,sizeof(int));
  30. mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
  31. }
  32. void MainWindow::on_pushButton_Stop_clicked()
  33. {
  34. ui->plainTextEdit->setPlainText("");
  35. int nCode = 0;
  36. char strout[100];
  37. memcpy(strout,&nCode,sizeof(int));
  38. mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
  39. }
  40. void MainWindow::on_pushButton_Query_clicked()
  41. {
  42. ui->plainTextEdit->setPlainText("");
  43. int nCode = 2;
  44. char strout[100];
  45. memcpy(strout,&nCode,sizeof(int));
  46. mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
  47. }
  48. void MainWindow::onRecvData()
  49. {
  50. while(mpSocketListen->hasPendingDatagrams())
  51. {
  52. QByteArray ba;
  53. ba.resize(static_cast<int>(mpSocketListen->bytesAvailable()) );
  54. mpSocketListen->readDatagram(ba.data(),ba.size());
  55. if(ba.size()>=2*static_cast<int>(sizeof(int)))
  56. {
  57. char * pdata = ba.data();
  58. int nsize = static_cast<int>(ba.size());
  59. int nservicecode,nservicestatus;
  60. memcpy(&nservicecode,pdata,sizeof(int));
  61. memcpy(&nservicestatus,pdata+sizeof(int),sizeof(int));
  62. unsigned long nerrorlen = static_cast<unsigned long>(nsize-2*static_cast<int>(sizeof(int)));
  63. std::shared_ptr<char> pstrerr_ptr = std::shared_ptr<char>(new char[nerrorlen +1]);
  64. if(nsize>2*static_cast<int>(sizeof(int)))
  65. {
  66. memcpy(pstrerr_ptr.get(),pdata+2*sizeof(int),nerrorlen);
  67. pstrerr_ptr.get()[nerrorlen] = 0;
  68. }
  69. switch (nservicestatus) {
  70. case 0:
  71. if(nservicecode == 0)
  72. {
  73. ui->plainTextEdit->setPlainText("Init Status.");
  74. }
  75. else
  76. {
  77. ui->plainTextEdit->setPlainText(pstrerr_ptr.get());
  78. }
  79. break;
  80. case 1:
  81. ui->plainTextEdit->setPlainText("Starting Service.");
  82. break;
  83. case 2:
  84. {
  85. char strout[1000];
  86. snprintf(strout,1000,"Service Code: %d",nservicecode);
  87. ui->plainTextEdit->setPlainText(strout);
  88. }
  89. break;
  90. default:
  91. break;
  92. }
  93. }
  94. }
  95. }