Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [main.cpp] (PERÒ NEL MAIN.CPP NON CI SONO TEST RIGUARDO AL DATABASE, È SOLO INCLUSO SERVER.H)
- #include "server.h"
- #include <QCoreApplication>
- int main(int argc, char** argv)
- {
- QCoreApplication app(argc, argv);
- Server server;
- return app.exec();
- }
- [server.h]
- #include <QtNetwork>
- #include <QObject>
- #include <QTcpServer>
- #include <QTcpSocket>
- #include <QString>
- #include <SQLiteCpp/SQLiteCpp.h>
- class Server: public QObject
- {
- Q_OBJECT
- public:
- Server(QObject * parent = 0);
- ~Server();
- void registerUser();
- QString checkLogin(QString name, QString password);
- QString getName(QString token);
- QString getEmail(QString token);
- static const QString DB_TOOMANYFOUND = "Too many users";
- static const QString DB_NOTFOUND = "User not found";
- public slots:
- void acceptConnection();
- void startRead();
- private:
- QTcpServer server;
- QTcpSocket* client;
- SQLite::Database* db;
- };
- [server.cpp]
- #include "server.h"
- #include <iostream>
- #include <regex>
- #include <sstream>
- #include <string>
- #include <SQLiteCpp/SQLiteCpp.h>
- using namespace std;
- Server::Server(QObject* parent): QObject(parent)
- {
- db = new SQLite::Database("data.sqlite3");
- connect(&server, SIGNAL(newConnection()),
- this, SLOT(acceptConnection()));
- server.listen(QHostAddress::Any, 8888);
- }
- Server::~Server()
- {
- server.close();
- }
- void Server::acceptConnection()
- {
- client = server.nextPendingConnection();
- connect(client, SIGNAL(readyRead()),
- this, SLOT(startRead()));
- }
- void Server::startRead()
- {
- char buffer[1024] = {0};
- client->read(buffer, client->bytesAvailable());
- regex reg("^REGISTER ([A-Za-z0-9_-]+) ([A-Za-z0-9.-_]+@[A-Za-z0-9.-_]+\\.[A-Za-z]+) ([0-9A-Za-z]+)$");
- const string buffer_s = string(buffer);
- if (regex_match(buffer_s, reg))
- {
- smatch match;
- if (regex_search(buffer_s.begin(), buffer_s.end(), match, reg))
- cout << "USERNAME: " << match[1] << ", EMAIL: " << match[2] << ", PASSWORD: " << match[3] << ".\n";
- cout << "YES ";
- }
- else
- {
- cout << "NO ";
- }
- cout << buffer << endl;
- client->close();
- }
- int Server::registerUser(QString name, QString password, QString email, QString token)
- {
- SQLite::Statement query(db, "INSERT INTO users(name,password,email,token) VALUES(?,?,?,?)");
- query.bind(1, name);
- query.bind(2, password);
- query.bind(3, email);
- query.bind(4, token);
- int exitCode = query.exec();
- return exitCode;
- }
- QString Server::checkLogin(QString name, QString password)
- {
- SQLite::Statement query(db, "SELECT token FROM users WHERE name=? AND password=?");
- query.bind(1, name);
- query.bind(2, password);
- QString token;
- for(int i = 0; query.executeStep(); i++)
- {
- token = query.getColumn(query.getColumnIndex("token"));
- }
- if(i < 1) return DB_NOTFOUND;
- else if(i > 1) return DB_TOOMANYFOUND;
- return token;
- }
- QString Server::getName(QString token)
- {
- SQLite::Statement query(db, "SELECT name FROM users WHERE token=?");
- query.bind(1, token);
- QString name;
- for(int i = 0; query.executeStep(); i++)
- {
- name = query.getColumn(query.getColumnIndex("name"));
- }
- if(i < 1) return DB_NOTFOUND;
- else if(i > 1) return DB_TOOMANYFOUND;
- return name;
- }
- QString Server::getEmail(QString token)
- {
- SQLite::Statement query(db, "SELECT email FROM users WHERE token=?");
- query.bind(1, token);
- QString email;
- for(int i = 0; query.executeStep(); i++)
- {
- email = query.getColumn(query.getColumnIndex("name"));
- }
- if(i < 1) return DB_NOTFOUND;
- else if(i > 1) return DB_TOOMANYFOUND;
- return email;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement