4
1
mirror of https://github.com/QuasarApp/Snake.git synced 2025-05-13 18:09:43 +00:00

fix object factory

This commit is contained in:
Andrei Yankovich 2019-04-20 15:22:00 +03:00
parent 78779d3a59
commit 5e5f577a44
5 changed files with 152 additions and 22 deletions

@ -117,8 +117,8 @@ bool Client::ping() {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::Ping);
if (!pcg.create(map, Request)) {
QVariantMap map;
if (!(FactoryNetObjects::build(NetworkClasses::Ping, map) && pcg.create(map, Request))) {
return false;
};
@ -141,7 +141,11 @@ bool Client::login(const QString &gmail, const QByteArray &pass) {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::Login);
QVariantMap map;
if (!FactoryNetObjects::build(NetworkClasses::Login, map)) {
return false;
};
map["gmail"] = gmail;
map["hashPass"] = pass;
@ -165,7 +169,11 @@ bool Client::updateData() {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::UpdatePlayerData);
QVariantMap map;
if (!FactoryNetObjects::build(NetworkClasses::UpdatePlayerData, map)) {
return false;
}
map["token"] = _token;
if (!pcg.create(map, Request)) {
@ -187,7 +195,11 @@ bool Client::savaData(const QList<int>& gameData) {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::Game);
QVariantMap map;
if (!FactoryNetObjects::build(NetworkClasses::Game, map)) {
return false;
}
map["token"] = _token;
map["time"] = FactoryNetObjects::buildArray(gameData);
@ -214,7 +226,11 @@ bool Client::getItem(int id) {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::GetItem);
QVariantMap map;
if (!FactoryNetObjects::build(NetworkClasses::GetItem, map)) {
return false;
}
map["token"] = _token;
map["id"] = id;

@ -1,19 +1,127 @@
#include "factorynetobjects.h"
#include "clientprotocol.h"
QVariantMap ClientProtocol::FactoryNetObjects::build(
ClientProtocol::NetworkClasses::Type type) {
namespace ClientProtocol {
auto obj = ClientProtocol::networkObjects.value(type);
QVariantMap res;
bool FactoryNetObjects::build(ClientProtocol::NetworkClasses::Type type, QVariantMap& item) {
res ["command"] = type;
res ["id"] = -1;
item.clear();
for (auto &&i: obj.keys()) {
res[i] = "";
item ["command"] = type;
item ["id"] = -1;
if (NetworkClasses::isCustomType(type)) {
auto keys = networkObjects.value(type);
for (auto i = keys.begin(); i != keys.end(); ++i) {
if (NetworkClasses::isReal(i.value())) {
item[i.key()] = 0.0;
} else if (NetworkClasses::isInteger(i.value())) {
item[i.key()] = 0;
} else if (NetworkClasses::isString(i.value())) {
item[i.key()] = "";
} else if (NetworkClasses::isArray(i.value())) {
QVariantMap array;
if (!build(i.value(), array)) {
return false;
}
item[i.key()] = array.value("res");
} else if (NetworkClasses::isCustomType(i.value())) {
QVariantMap tempItem;
if (!build(i.value(), tempItem)) {
return false;
}
item[i.key()] = tempItem;
} else {
return false;
}
}
} else if (NetworkClasses::isArray(type)) {
item["res"] = QVariantList();
}
return res;
return true;
}
bool FactoryNetObjects::fillRandomData(QVariantMap &item) {
auto type = static_cast<NetworkClasses::Type>(
item.value("command").toInt());
if (NetworkClasses::isCustomType(type)) {
auto keys = networkObjects.value(type);
for (auto i = keys.begin(); i != keys.end(); ++i) {
if (NetworkClasses::isReal(i.value())) {
item[i.key()] = static_cast<double>((rand() % 1000) / 100.0);
} else if (NetworkClasses::isInteger(i.value())) {
item[i.key()] = static_cast<int>((rand() % 1000));
} else if (NetworkClasses::isString(i.value())) {
item[i.key()] = QString("Random&0").arg(rand() % 1000);
} else if (NetworkClasses::isArray(i.value())) {
QVariantMap array;
array["command"] = i.value();
if (!fillRandomData(array)) {
return false;
}
item[i.key()] = array.value("res");
} else if (NetworkClasses::isCustomType(i.value())) {
QVariantMap tempItem;
tempItem["command"] = i.value();
tempItem["id"] = rand() % 10000;
if (!fillRandomData(tempItem)) {
return false;
}
item[i.key()] = tempItem;
} else {
return false;
}
}
} else if (NetworkClasses::isArray(type)) {
int count = rand()% 10;
auto typeArray = static_cast<NetworkClasses::Type>(type & ~NetworkClasses::Array);
QVariantList res;
if (NetworkClasses::isReal(typeArray)) {
for (int i = 0; i < count ; ++i) {
res.push_back(static_cast<double>((rand() % 1000) / 100.0));
}
} else if (NetworkClasses::isInteger(typeArray)) {
for (int i = 0; i < count ; ++i) {
res.push_back(static_cast<int>((rand() % 1000)));
}
} else if (NetworkClasses::isString(typeArray)) {
for (int i = 0; i < count ; ++i) {
res.push_back(QString("Random&0").arg(rand() % 1000));
}
} else if (NetworkClasses::isArray(typeArray)) {
for (int i = 0; i < count ; ++i) {
QVariantMap array;
array["command"] = typeArray;
if (!fillRandomData(array)) {
return false;
}
res.push_back(array.value("res"));
}
} else if (NetworkClasses::isCustomType(typeArray)) {
QVariantMap resitem;
resitem["command"] = typeArray;
resitem["id"] = rand() % 10000;
if (!fillRandomData(resitem)) {
return false;
}
res.push_back(resitem);
} else {
return false;
}
item["res"] = res;
}
return true;
}
}

@ -9,7 +9,9 @@ class CLIENTPROTOCOLSHARED_EXPORT FactoryNetObjects {
public:
FactoryNetObjects() = delete;
static QVariantMap build(NetworkClasses::Type type);
static bool build(NetworkClasses::Type type, QVariantMap&);
static bool fillRandomData(QVariantMap &item);
template <typename T>
static QVariantList buildArray(const T& array) {

@ -27,8 +27,8 @@ bool Server::parsePackage(const Package &pkg, QTcpSocket* sender) {
Package pcg;
auto map = FactoryNetObjects::build(NetworkClasses::Ping);
if (!pcg.create(map, Responke)) {
QVariantMap map;
if (!(FactoryNetObjects::build(NetworkClasses::Ping, map) && pcg.create(map, Responke))) {
return false;
};
@ -188,10 +188,10 @@ void Server::badRequest(quint32 address) {
return;
}
auto map = FactoryNetObjects::build(NetworkClasses::BadRequest);
QVariantMap map;
Package pcg;
if (!pcg.create(map, Request)) {
if (!(FactoryNetObjects::build(NetworkClasses::BadRequest, map) && pcg.create(map, Request))) {
return;
};

@ -228,6 +228,8 @@ void testSankeServer::testApplyData() {
QList<int> listData = {1};
QVERIFY(cle.savaData(listData));
}
void testSankeServer::testSql() {
@ -242,8 +244,10 @@ void testSankeServer::testSql() {
QVERIFY(init);
auto tempItem = ClientProtocol::FactoryNetObjects::build(
ClientProtocol::NetworkClasses::Snake);
QVariantMap tempItem;
QVERIFY(ClientProtocol::FactoryNetObjects::build(
ClientProtocol::NetworkClasses::Snake, tempItem));
QVariantMap resItem;