gluk47

Qt json

May 29th, 2014
547
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <QJsonArray>
  2. #include <QJsonDocument>
  3. #include <QJsonObject>
  4.  
  5. /*
  6. Сервак узнаёт по url, что надо парсить json и вызывать некоторую функцию. URL парсится из HTTP-заголовка вручную.
  7. */
  8. void HttpClient::processRequest(HttpClient::NetRequest& req) {
  9.     writeStandardHeaders (200, "OK");
  10.     if (req.url == "/tableCount.json") {
  11.         QByteArray data = sock.readAll ();
  12.         QJsonDocument doc = QJsonDocument::fromJson (static_cast <const char*> (data),
  13.                                                         data.size ());
  14.         getTableCount (doc.object ());
  15.     } else
  16.         createHtml ()
  17.                 .writeHead (Heads::mainPage)
  18.                 .writeBody ("<h3>It works!</h3>\n"
  19.                             "<p>Cheesecake server "
  20.                             + QString (version) + "</p>");
  21. }
  22.  
  23. void HttpClient::getTableCount(const QJsonObject& obj) {
  24.     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  25.     // Парсинг данных от клиента
  26.     db.setHostName (obj.value ("host").toString ());
  27.     db.setDatabaseName (obj.value ("db").toString ());
  28.     db.setUserName(obj.value ("user").toString ());
  29.     db.setPassword(obj.value ("pass").toString ());
  30.     bool ok = db.open();
  31.     if (not ok) {
  32.         qDebug () << db.lastError ().text ();
  33.     }
  34.  
  35.     QSqlQuery query;
  36.     query.exec ("SELECT count(*) from information_schema.tables WHERE table_schema = 'cheesecakes';");
  37.     // Формирование и отправка данных на клиента
  38.     QJsonDocument doc;
  39.     QJsonObject obj;
  40.     obj.insert ("table-count", query.value (0).toInt ());
  41.     doc.setObject (obj);
  42.     writeHttpBody (doc.toJson ());
  43. }
Advertisement
Add Comment
Please, Sign In to add comment