Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. #include <Server.hpp>
  2.  
  3. Server::Server(quint16 nPort, QWidget* pwgt) : QWidget(pwgt), sizeOfData (0) {
  4. db.setUserName("postgres");
  5. db.setHostName("77.223.89.11");
  6. db.setPort(5432);
  7. db.setPassword("Gaponuk62nata1953290402");
  8. db.setDatabaseName("museums");
  9. if(!db.open()) QMessageBox::about(nullptr, "MuseumOfNature", db.lastError().text());
  10. pServer = new QTcpServer(this);
  11. if (!pServer->listen(QHostAddress::Any, nPort)) {
  12. QMessageBox::critical(nullptr, "Server Error", "Unable to start the server: " + pServer->errorString());
  13. pServer->close();
  14. return;
  15. }
  16.  
  17. connect(pServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
  18. pText = new QTextEdit;
  19. pText->setReadOnly(true);
  20.  
  21. QVBoxLayout* pVboxLayout = new QVBoxLayout;
  22. pVboxLayout->addWidget(new QLabel("<h1>Server</h1>"));
  23. pVboxLayout->addWidget(pText);
  24. setLayout(pVboxLayout);
  25. }
  26.  
  27. void Server::slotNewConnection() {
  28. QTcpSocket* pClientSocket = pServer->nextPendingConnection();
  29. connect(pClientSocket, SIGNAL(disconnected()), pClientSocket, SLOT(deleteLater()));
  30. connect(pClientSocket, SIGNAL(readyRead()), this, SLOT(slotReadClient()));
  31. }
  32.  
  33. void Server::slotReadClient() {
  34. QTcpSocket* pClientSocket = qobject_cast<QTcpSocket*>(sender());
  35. QDataStream in(pClientSocket);
  36. in.setVersion(QDataStream::Qt_5_3);
  37. for (;;) {
  38. if (!sizeOfData) {
  39. if (pClientSocket->bytesAvailable() < sizeof(quint16)) {
  40. break;
  41. }
  42. in >> sizeOfData;
  43. }
  44. if (pClientSocket->bytesAvailable() < sizeOfData) {
  45. break;
  46. }
  47. QString str;
  48. in>> str;
  49.  
  50. QString strMessage ="Client has sent - " + str;
  51. pText->append(strMessage);
  52. sizeOfData = 0;
  53.  
  54. sendToClient(pClientSocket, str);
  55. }
  56. }
  57.  
  58. void Server::sendToClient(QTcpSocket *pSocket, QString &str) {
  59. query.exec(str);
  60. QList<QString> results;
  61. QList<QByteArray> imgs;
  62. QSqlRecord record = query.record();
  63. while (query.next()) {
  64. results << query.value(record.indexOf("Описание квеста")).toString();
  65. results << query.value(record.indexOf("Название квеста")).toString();
  66. imgs << query.value(record.indexOf("Картинка № 1")).toByteArray();
  67. }
  68. QByteArray arrBlock;
  69. QDataStream out(&arrBlock, QIODevice::WriteOnly);
  70. out.setVersion(QDataStream::Qt_5_3);
  71. out << quint64(0)<<imgs;
  72. out.device()->seek(0);
  73. out <<quint64(arrBlock.size() - sizeof(quint64));
  74. //qDebug()<<arrBlock.size();
  75. pSocket->write(arrBlock);
  76. }
  77.  
  78. Server::~Server() {
  79. db.close();
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement