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:
parent
78779d3a59
commit
5e5f577a44
SnakeServer
ClientProtocol
serverProtocolTests
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user