Guest User

Untitled

a guest
Nov 23rd, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. void MyTask::run()
  2. {
  3. Core core(descriptor, exit);
  4. core.exec();
  5. }
  6.  
  7. #define CHUNK 2048
  8. Core::Core(qintptr handle, bool *exit, QObject *parent)
  9. : QEventLoop(parent), descriptor(handle)
  10. {
  11. socket = new QTcpSocket(this);
  12. socket->setSocketOption(QAbstractSocket::KeepAliveOption, 64);
  13. socket->setSocketDescriptor(descriptor);
  14.  
  15. //Подключаем сигналы сокета к слотам
  16. connect(socket, &QTcpSocket::readyRead, this, &Core::onReadyRead);
  17. connect(socket, &QTcpSocket::disconnected, this, &Core::onDisconnected);
  18. }
  19.  
  20. void Core::sendMessage(const QJsonValue &object)
  21. {
  22. //Формируется стандартная шапка ответа сервера клиенту
  23. //В параметр value передается объект с ответом под каждую комманду
  24. QJsonObject message;
  25. message.insert("ans", "ok");
  26. message.insert("command", command);
  27. message.insert("value", object);
  28.  
  29. QJsonDocument doc(message);
  30. auto data = doc.toJson(QJsonDocument::Compact);
  31.  
  32. while(!data.isEmpty()){
  33. socket->write(data.left(CHUNK));
  34. data.remove(0, CHUNK);
  35. if(!socket->waitForBytesWritten(10000)){
  36. socket->disconnectFromHost();
  37. quit();
  38. }
  39. }
  40. }
  41.  
  42. MyDialog::MyDialog(QTcpSocket *socket, QWidget *parent) : QDialog(parent), socket(socket)
  43. {
  44. connect(this->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
  45. }
  46.  
  47. void MyDialog::onError(QAbstractSocket::SocketError)
  48. {
  49. qDebug() << QTime::currentTime();
  50. QMessageBox::warning(this, "Ошибка соединения", socket->errorString());
  51. socket->disconnectFromHost();
  52. errorStatus = true;
  53. }
  54.  
  55. void &MyDialog::sendMessage(const QJsonDocument &doc)
  56. {
  57. errorStatus = false;
  58. socket->connectToHost(ip, port, QIODevice::ReadWrite, QAbstractSocket::IPv4Protocol);
  59. if(!socket->waitForConnected(5000)){
  60. root = QJsonValue();
  61. errorStatus = true;
  62. return root;
  63. }
  64.  
  65. socket->write(doc.toJson(QJsonDocument::Compact));
  66. QByteArray messageData;
  67. while(1){
  68. if(!socket->waitForReadyRead(5000)){
  69. break;
  70. }else{
  71. messageData.append(socket->readAll());
  72. }
  73. }
  74. socket->disconnectFromHost();
  75.  
  76. ans = QJsonDocument::fromJson(messageData);
  77. }
Add Comment
Please, Sign In to add comment