mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-01-30 21:09:19 +01:00
Add Entity like to_dict and from_dict support to User, alongside to_json and from_json.
This commit is contained in:
parent
b479b6a1ab
commit
2db29ae49f
@ -1,5 +1,6 @@
|
|||||||
#include "user.h"
|
#include "user.h"
|
||||||
#include "core/class_db.h"
|
#include "core/class_db.h"
|
||||||
|
#include "core/io/json.h"
|
||||||
|
|
||||||
#include "user_module.h"
|
#include "user_module.h"
|
||||||
|
|
||||||
@ -155,6 +156,94 @@ String User::_hash_password(const String &p_password) {
|
|||||||
return p.sha256_text();
|
return p.sha256_text();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dictionary User::to_dict() {
|
||||||
|
return call("_to_dict");
|
||||||
|
}
|
||||||
|
void User::from_dict(const Dictionary &dict) {
|
||||||
|
call("_from_dict", dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary User::_to_dict() {
|
||||||
|
Dictionary dict;
|
||||||
|
|
||||||
|
dict["user_id"] = _user_id;
|
||||||
|
dict["user_name"] = _user_name;
|
||||||
|
dict["email"] = _email;
|
||||||
|
dict["rank"] = _rank;
|
||||||
|
dict["pre_salt"] = _pre_salt;
|
||||||
|
dict["post_salt"] = _post_salt;
|
||||||
|
dict["password_hash"] = _password_hash;
|
||||||
|
dict["banned"] = _banned;
|
||||||
|
dict["password_reset_token"] = _password_reset_token;
|
||||||
|
dict["locked"] = _locked;
|
||||||
|
|
||||||
|
Array marr;
|
||||||
|
|
||||||
|
for (int i = 0; i < _modules.size(); ++i) {
|
||||||
|
Ref<UserModule> m = _modules[i];
|
||||||
|
|
||||||
|
if (m.is_valid()) {
|
||||||
|
Dictionary mdict;
|
||||||
|
|
||||||
|
mdict["index"] = i;
|
||||||
|
mdict["data"] = m->to_dict();
|
||||||
|
|
||||||
|
marr.push_back(mdict);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dict["modules"] = marr;
|
||||||
|
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
void User::_from_dict(const Dictionary &dict) {
|
||||||
|
_user_id = dict["user_id "];
|
||||||
|
_user_name = dict["user_name "];
|
||||||
|
_email = dict["email "];
|
||||||
|
_rank = dict["rank "];
|
||||||
|
_pre_salt = dict["pre_salt "];
|
||||||
|
_post_salt = dict["post_salt "];
|
||||||
|
_password_hash = dict["password_hash "];
|
||||||
|
_banned = dict["banned "];
|
||||||
|
_password_reset_token = dict["password_reset_token "];
|
||||||
|
_locked = dict["locked "];
|
||||||
|
|
||||||
|
Array marr = dict["modules"];
|
||||||
|
|
||||||
|
for (int i = 0; i < marr.size(); ++i) {
|
||||||
|
Dictionary mdict = marr[i];
|
||||||
|
|
||||||
|
if (!mdict.has("index") || !mdict.has("data")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = mdict["index"];
|
||||||
|
|
||||||
|
Ref<UserModule> m = _modules[index];
|
||||||
|
|
||||||
|
ERR_CONTINUE(!m.is_valid());
|
||||||
|
|
||||||
|
m->from_dict(mdict["data"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String User::to_json() {
|
||||||
|
return JSON::print(to_dict());
|
||||||
|
}
|
||||||
|
void User::from_json(const String &data) {
|
||||||
|
Error err;
|
||||||
|
String err_txt;
|
||||||
|
int err_line;
|
||||||
|
Variant v;
|
||||||
|
err = JSON::parse(data, v, err_txt, err_line);
|
||||||
|
|
||||||
|
ERR_FAIL_COND(err != OK);
|
||||||
|
|
||||||
|
Dictionary d = v;
|
||||||
|
|
||||||
|
from_dict(d);
|
||||||
|
}
|
||||||
|
|
||||||
void User::save() {
|
void User::save() {
|
||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
@ -252,6 +341,16 @@ void User::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("_create_password", "password"), &User::_create_password);
|
ClassDB::bind_method(D_METHOD("_create_password", "password"), &User::_create_password);
|
||||||
ClassDB::bind_method(D_METHOD("_hash_password", "password"), &User::_hash_password);
|
ClassDB::bind_method(D_METHOD("_hash_password", "password"), &User::_hash_password);
|
||||||
|
|
||||||
|
BIND_VMETHOD(MethodInfo("_from_dict", PropertyInfo(Variant::DICTIONARY, "dict")));
|
||||||
|
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::DICTIONARY, "dict"), "_to_dict"));
|
||||||
|
ClassDB::bind_method(D_METHOD("from_dict", "dict"), &User::from_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("to_dict"), &User::to_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("_from_dict", "dict"), &User::_from_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("_to_dict"), &User::_to_dict);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("to_json"), &User::to_json);
|
||||||
|
ClassDB::bind_method(D_METHOD("from_json", "data"), &User::from_json);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("save"), &User::save);
|
ClassDB::bind_method(D_METHOD("save"), &User::save);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("read_lock"), &User::read_lock);
|
ClassDB::bind_method(D_METHOD("read_lock"), &User::read_lock);
|
||||||
|
@ -69,6 +69,15 @@ public:
|
|||||||
virtual void _create_password(const String &p_password);
|
virtual void _create_password(const String &p_password);
|
||||||
virtual String _hash_password(const String &p_password);
|
virtual String _hash_password(const String &p_password);
|
||||||
|
|
||||||
|
Dictionary to_dict();
|
||||||
|
void from_dict(const Dictionary &dict);
|
||||||
|
|
||||||
|
virtual Dictionary _to_dict();
|
||||||
|
virtual void _from_dict(const Dictionary &dict);
|
||||||
|
|
||||||
|
String to_json();
|
||||||
|
void from_json(const String &data);
|
||||||
|
|
||||||
void save();
|
void save();
|
||||||
|
|
||||||
void read_lock();
|
void read_lock();
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
|
||||||
int UserModule::get_module_index() const {
|
int UserModule::get_module_index() const {
|
||||||
return _module_id;
|
return _module_index;
|
||||||
}
|
}
|
||||||
void UserModule::set_module_index(const int val) {
|
void UserModule::set_module_index(const int val) {
|
||||||
_module_id = val;
|
_module_index = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
String UserModule::get_module_name() const {
|
String UserModule::get_module_name() const {
|
||||||
@ -25,6 +25,24 @@ void UserModule::set_user(User *user) {
|
|||||||
_user = user;
|
_user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dictionary UserModule::to_dict() {
|
||||||
|
return call("_to_dict");
|
||||||
|
}
|
||||||
|
void UserModule::from_dict(const Dictionary &dict) {
|
||||||
|
call("_from_dict", dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary UserModule::_to_dict() {
|
||||||
|
Dictionary dict;
|
||||||
|
|
||||||
|
dict["module_name"] = _module_name;
|
||||||
|
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
void UserModule::_from_dict(const Dictionary &dict) {
|
||||||
|
_module_name = dict["module_name"];
|
||||||
|
}
|
||||||
|
|
||||||
void UserModule::read_lock() {
|
void UserModule::read_lock() {
|
||||||
_rw_lock.read_lock();
|
_rw_lock.read_lock();
|
||||||
}
|
}
|
||||||
@ -39,7 +57,7 @@ void UserModule::write_unlock() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UserModule::UserModule() {
|
UserModule::UserModule() {
|
||||||
_module_id = -1;
|
_module_index = -1;
|
||||||
_user = nullptr;
|
_user = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,6 +73,13 @@ void UserModule::_bind_methods() {
|
|||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_user"), &UserModule::get_user);
|
ClassDB::bind_method(D_METHOD("get_user"), &UserModule::get_user);
|
||||||
|
|
||||||
|
BIND_VMETHOD(MethodInfo("_from_dict", PropertyInfo(Variant::DICTIONARY, "dict")));
|
||||||
|
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::DICTIONARY, "dict"), "_to_dict"));
|
||||||
|
ClassDB::bind_method(D_METHOD("from_dict", "dict"), &UserModule::from_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("to_dict"), &UserModule::to_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("_from_dict", "dict"), &UserModule::_from_dict);
|
||||||
|
ClassDB::bind_method(D_METHOD("_to_dict"), &UserModule::_to_dict);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("read_lock"), &UserModule::read_lock);
|
ClassDB::bind_method(D_METHOD("read_lock"), &UserModule::read_lock);
|
||||||
ClassDB::bind_method(D_METHOD("read_unlock"), &UserModule::read_unlock);
|
ClassDB::bind_method(D_METHOD("read_unlock"), &UserModule::read_unlock);
|
||||||
ClassDB::bind_method(D_METHOD("write_lock"), &UserModule::write_lock);
|
ClassDB::bind_method(D_METHOD("write_lock"), &UserModule::write_lock);
|
||||||
|
@ -21,6 +21,12 @@ public:
|
|||||||
Ref<User> get_user();
|
Ref<User> get_user();
|
||||||
void set_user(User *user);
|
void set_user(User *user);
|
||||||
|
|
||||||
|
Dictionary to_dict();
|
||||||
|
void from_dict(const Dictionary &dict);
|
||||||
|
|
||||||
|
virtual Dictionary _to_dict();
|
||||||
|
virtual void _from_dict(const Dictionary &dict);
|
||||||
|
|
||||||
void read_lock();
|
void read_lock();
|
||||||
void read_unlock();
|
void read_unlock();
|
||||||
void write_lock();
|
void write_lock();
|
||||||
@ -32,7 +38,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
int _module_id;
|
int _module_index;
|
||||||
String _module_name;
|
String _module_name;
|
||||||
|
|
||||||
User *_user;
|
User *_user;
|
||||||
|
Loading…
Reference in New Issue
Block a user