fix client protocol server signals

This commit is contained in:
Andrei Yankovich 2019-05-18 19:05:36 +03:00
parent 6a9ee29312
commit 5a3af94dc0
11 changed files with 57 additions and 26 deletions

View File

@ -42,10 +42,8 @@ bool Server::parsePackage(const Package &pkg, QTcpSocket* sender) {
default: {
BaseNetworkObject *obj = pkg.parse();
emit incomingReques(obj, qHash(sender->peerAddress()));
delete obj;
emit incomingReques(static_cast<Command>(pkg.hdr.command),
pkg.data, qHash(sender->peerAddress()));
}
}
@ -194,6 +192,8 @@ void Server::badRequest(quint32 address) {
Package pcg;
if (!(pcg.create(Command::BadRequest, Type::Responke))) {
QuasarAppUtils::Params::verboseLog("Bad request detected, bud responce command nor received!",
QuasarAppUtils::Error);
};
if (!sendPackage(pcg, client.sct)) {

View File

@ -72,7 +72,7 @@ public:
QStringList baned() const;
signals:
void incomingReques(BaseNetworkObject *map, const quint32 &sender);
void incomingReques(Command cmd, const QByteArray &data, const quint32 &sender);
};
}

View File

@ -19,15 +19,20 @@ int main(int argc, char *argv[])
QString address = "";
unsigned short port = 0;
QString db = "";
if(QuasarAppUtils::Params::isEndable("address")) {
address = QuasarAppUtils::Params::getStrArg("address");
}
if(QuasarAppUtils::Params::isEndable("port")) {
port = QuasarAppUtils::Params::getStrArg("port").toUShort();
port = static_cast<unsigned short>(QuasarAppUtils::Params::getArg("port").toUInt());
}
if(QuasarAppUtils::Params::isEndable("db")) {
db = QuasarAppUtils::Params::getStrArg("db");
}
if(ServerUtils::runDaemon()) {
return 0;
}

View File

@ -1,8 +1,10 @@
#include "mainserver.h"
#include "sqldbcache.h"
#include <spserver.h>
#include <cpserver.h>
#include <quasarapp.h>
#include <basenetworkobject.h>
#include <login.h>
bool MainServer::restartSrver(const QString &ip, unsigned short port) {
if (_serverDaemon->isListening()) {
@ -16,16 +18,27 @@ bool MainServer::restartSrver(const QString &ip, unsigned short port) {
return true;
}
void MainServer::handleRequest(ClientProtocol::BaseNetworkObject *obj,
void MainServer::handleRequest(ClientProtocol::Command cmd,
const QByteArray& data,
const quint32 &addres) {
Q_UNUSED(addres);
auto command = static_cast<ClientProtocol::Command>
(obj->getClass());
switch (command) {
switch (cmd) {
case ClientProtocol::Command::Login: {
ClientProtocol::Login loginData;
loginData.fromBytes(data);
if (!loginData.isValid()) {
_serverDaemon->badRequest(addres);
return ;
}
// TODO
break;
}
@ -102,6 +115,8 @@ MainServer::MainServer(QObject *ptr):
_serverDaemon = new ClientProtocol::Server(this);
_terminalPort = new ServerProtocol::Server(this);
_db = new SqlDBCache();
connect(_serverDaemon, &ClientProtocol::Server::incomingReques,
this, &MainServer::handleRequest);
@ -110,14 +125,21 @@ MainServer::MainServer(QObject *ptr):
}
bool MainServer::run(const QString &ip, unsigned short port) {
bool MainServer::run(const QString &ip, unsigned short port, const QString& db) {
if (!_db->initDb((db.size())? db: DEFAULT_DB_PATH)) {
QuasarAppUtils::Params::verboseLog("init db fail!", QuasarAppUtils::Error);
return false;
}
if (!_terminalPort->run(DEFAULT_SERVER)) {
QuasarAppUtils::Params::verboseLog("run termonal fail!", QuasarAppUtils::Error);
return false;
}
if (!restartSrver(ip.isEmpty()? DEFAULT_SNAKE_SERVER: ip,
port ? port : DEFAULT_SNAKE_PORT)) {
QuasarAppUtils::Params::verboseLog("restart server fail", QuasarAppUtils::Error);
return false;
}

View File

@ -3,6 +3,7 @@
#include <serverprotocol.h>
#include "server_global.h"
#include <QHostAddress>
#include <clientprotocol.h>
namespace ServerProtocol {
class Server;
@ -13,12 +14,16 @@ namespace ClientProtocol {
class BaseNetworkObject;
}
class SqlDBCache;
class SERVERSHARED_EXPORT MainServer: public QObject
{
Q_OBJECT
private:
ServerProtocol::Server *_terminalPort = nullptr;
ClientProtocol::Server *_serverDaemon= nullptr;
SqlDBCache* _db = nullptr;
bool payItem(int player, int idItem);
bool sellItem(int player, int idItem);
@ -26,13 +31,13 @@ private:
bool restartSrver(const QString& ip, unsigned short port);
private slots:
void handleRequest(ClientProtocol::BaseNetworkObject *obj,
void handleRequest(ClientProtocol::Command cmd, const QByteArray &data,
const quint32& addres);
void handleTerminalRequest(QVariantMap obj);
public:
MainServer(QObject *ptr = nullptr);
bool run(const QString& ip = "", unsigned short port = 0);
bool run(const QString& ip = "", unsigned short port = 0, const QString &db = "");
virtual ~MainServer();
};

View File

@ -147,8 +147,8 @@ SqlDBCache::~SqlDBCache() {
globalUpdateDataBase(SqlDBCasheWriteMode::Force);
}
bool SqlDBCache::initDb(const QString &sql, const QString &path) {
if (!SqlDBWriter::initDb(sql, path)) {
bool SqlDBCache::initDb(const QString &pdbath) {
if (!SqlDBWriter::initDb(pdbath)) {
return false;
}

View File

@ -45,8 +45,7 @@ public:
SqlDBCache(qint64 updateInterval = DEFAULT_UPDATE_INTERVAL);
~SqlDBCache() override;
bool initDb(const QString &sql = DEFAULT_DB_NAME,
const QString &path = DEFAULT_DB_PATH) override;
bool initDb(const QString &pdbath = DEFAULT_DB_PATH) override;
Item getItem(int id) override;
int saveItem(const Item& saveData) override;

View File

@ -414,12 +414,12 @@ SqlDBWriter::SqlDBWriter() {
}
bool SqlDBWriter::initDb(const QString& database, const QString &databasePath) {
bool SqlDBWriter::initDb(const QString &databasePath) {
QStringList drivers = QSqlDatabase::drivers();
db = new QSqlDatabase();
*db = QSqlDatabase::addDatabase("QSQLITE", database);
db->setDatabaseName(QFileInfo(databasePath).absolutePath() + "/" + database);
*db = QSqlDatabase::addDatabase("QSQLITE", QFileInfo(databasePath).fileName());
db->setDatabaseName(QFileInfo(databasePath).absoluteFilePath());
query = new QSqlQuery(*db);
if (!db->open()) {

View File

@ -8,7 +8,7 @@
#include <player.h>
#define DEFAULT_DB_NAME "SnakeDatabase.db"
#define DEFAULT_DB_PATH QDir::homePath() + "/SnakeServer"
#define DEFAULT_DB_PATH QDir::homePath() + "/SnakeServer/" + DEFAULT_DB_NAME
#define DEFAULT_UPDATE_INTERVAL 3600000 // 1 hour
class QSqlQuery;
@ -51,8 +51,7 @@ protected:
public:
SqlDBWriter();
virtual bool initDb(const QString &sql = DEFAULT_DB_NAME,
const QString &path = DEFAULT_DB_PATH);
virtual bool initDb(const QString &path = DEFAULT_DB_PATH);
virtual bool isValid() const;

View File

@ -17,6 +17,7 @@ void ServerUtils::helpDaemon() {
qInfo() << " daemon / d : start like daemon.";
qInfo() << " -port (port) : start with custom port.";
qInfo() << " -address (address) : start with custom address.";
qInfo() << " -db (path/to/db.file) : start with custom db";
qInfo() << " verbose : show debug log";

View File

@ -237,7 +237,7 @@ void testSankeServer::testBaseSql() {
SqlDBWriter db;
QFile::remove("./test.db");
bool init = db.initDb("test.db", "./");
bool init = db.initDb("./test.db");
if (!init) {
QFile::remove("./test.db");
@ -336,7 +336,7 @@ void testSankeServer::testSqlCache() {
QFile::remove("./test2.db");
bool init = db.initDb("test2.db", "./");
bool init = db.initDb("./test2.db");
if (!init) {
QFile::remove("./test2.db");