Advertisement
Guest User

Sorgenti

a guest
Aug 24th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. [main.cpp] (PERÒ NEL MAIN.CPP NON CI SONO TEST RIGUARDO AL DATABASE, È SOLO INCLUSO SERVER.H)
  2. #include "server.h"
  3. #include <QCoreApplication>
  4.  
  5. int main(int argc, char** argv)
  6. {
  7. QCoreApplication app(argc, argv);
  8. Server server;
  9. return app.exec();
  10. }
  11.  
  12. [server.h]
  13. #include <QtNetwork>
  14. #include <QObject>
  15. #include <QTcpServer>
  16. #include <QTcpSocket>
  17. #include <QString>
  18. #include <SQLiteCpp/SQLiteCpp.h>
  19.  
  20. class Server: public QObject
  21. {
  22. Q_OBJECT
  23. public:
  24. Server(QObject * parent = 0);
  25. ~Server();
  26. void registerUser();
  27. QString checkLogin(QString name, QString password);
  28. QString getName(QString token);
  29. QString getEmail(QString token);
  30. static const QString DB_TOOMANYFOUND = "Too many users";
  31. static const QString DB_NOTFOUND = "User not found";
  32. public slots:
  33. void acceptConnection();
  34. void startRead();
  35. private:
  36. QTcpServer server;
  37. QTcpSocket* client;
  38. SQLite::Database* db;
  39. };
  40.  
  41. [server.cpp]
  42. #include "server.h"
  43. #include <iostream>
  44. #include <regex>
  45.  
  46. #include <sstream>
  47. #include <string>
  48.  
  49. #include <SQLiteCpp/SQLiteCpp.h>
  50.  
  51. using namespace std;
  52.  
  53. Server::Server(QObject* parent): QObject(parent)
  54. {
  55. db = new SQLite::Database("data.sqlite3");
  56. connect(&server, SIGNAL(newConnection()),
  57. this, SLOT(acceptConnection()));
  58.  
  59. server.listen(QHostAddress::Any, 8888);
  60. }
  61.  
  62. Server::~Server()
  63. {
  64. server.close();
  65. }
  66.  
  67. void Server::acceptConnection()
  68. {
  69. client = server.nextPendingConnection();
  70.  
  71. connect(client, SIGNAL(readyRead()),
  72. this, SLOT(startRead()));
  73. }
  74.  
  75. void Server::startRead()
  76. {
  77. char buffer[1024] = {0};
  78.  
  79. client->read(buffer, client->bytesAvailable());
  80.  
  81. regex reg("^REGISTER ([A-Za-z0-9_-]+) ([A-Za-z0-9.-_]+@[A-Za-z0-9.-_]+\\.[A-Za-z]+) ([0-9A-Za-z]+)$");
  82.  
  83. const string buffer_s = string(buffer);
  84.  
  85. if (regex_match(buffer_s, reg))
  86. {
  87. smatch match;
  88.  
  89. if (regex_search(buffer_s.begin(), buffer_s.end(), match, reg))
  90. cout << "USERNAME: " << match[1] << ", EMAIL: " << match[2] << ", PASSWORD: " << match[3] << ".\n";
  91.  
  92. cout << "YES ";
  93. }
  94. else
  95. {
  96. cout << "NO ";
  97. }
  98.  
  99. cout << buffer << endl;
  100.  
  101. client->close();
  102. }
  103.  
  104. int Server::registerUser(QString name, QString password, QString email, QString token)
  105. {
  106. SQLite::Statement query(db, "INSERT INTO users(name,password,email,token) VALUES(?,?,?,?)");
  107. query.bind(1, name);
  108. query.bind(2, password);
  109. query.bind(3, email);
  110. query.bind(4, token);
  111. int exitCode = query.exec();
  112. return exitCode;
  113. }
  114.  
  115. QString Server::checkLogin(QString name, QString password)
  116. {
  117. SQLite::Statement query(db, "SELECT token FROM users WHERE name=? AND password=?");
  118. query.bind(1, name);
  119. query.bind(2, password);
  120. QString token;
  121. for(int i = 0; query.executeStep(); i++)
  122. {
  123. token = query.getColumn(query.getColumnIndex("token"));
  124. }
  125. if(i < 1) return DB_NOTFOUND;
  126. else if(i > 1) return DB_TOOMANYFOUND;
  127. return token;
  128. }
  129.  
  130. QString Server::getName(QString token)
  131. {
  132. SQLite::Statement query(db, "SELECT name FROM users WHERE token=?");
  133. query.bind(1, token);
  134. QString name;
  135. for(int i = 0; query.executeStep(); i++)
  136. {
  137. name = query.getColumn(query.getColumnIndex("name"));
  138. }
  139. if(i < 1) return DB_NOTFOUND;
  140. else if(i > 1) return DB_TOOMANYFOUND;
  141. return name;
  142. }
  143.  
  144. QString Server::getEmail(QString token)
  145. {
  146. SQLite::Statement query(db, "SELECT email FROM users WHERE token=?");
  147. query.bind(1, token);
  148. QString email;
  149. for(int i = 0; query.executeStep(); i++)
  150. {
  151. email = query.getColumn(query.getColumnIndex("name"));
  152. }
  153. if(i < 1) return DB_NOTFOUND;
  154. else if(i > 1) return DB_TOOMANYFOUND;
  155. return email;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement