#include #include "loader/component_loader.hpp" #include "profile_infos.hpp" #include "network.hpp" #include #include #include #include "../steam/steam.hpp" #include namespace profile_infos { namespace { using profile_map = std::unordered_map; utils::concurrency::container profile_mapping; std::optional load_profile_info() { std::string data{}; if (!utils::io::read_file("players/user/profile_info", &data)) { return {}; } profile_info info{}; constexpr auto version_size = sizeof(info.version); if(data.size() < sizeof(version_size)) { return {}; } memcpy(&info.version, data.data(), version_size); info.ddl.assign(data.begin() + version_size, data.end()); return { std::move(info) }; } } std::optional get_profile_info(uint64_t user_id) { if (user_id == steam::SteamUser()->GetSteamID().bits) { return load_profile_info(); } return profile_mapping.access>([user_id](const profile_map& profiles) { std::optional result{}; const auto profile_entry = profiles.find(user_id); if (profile_entry != profiles.end()) { result = profile_entry->second; } return result; }); } void update_profile_info(const profile_info& info) { std::string data{}; data.reserve(4 + info.ddl.size()); data.append(reinterpret_cast(&info.version), sizeof(info.version)); data.append(info.ddl); utils::io::write_file("players/user/profile_info", data); } struct component final : generic_component { void post_load() override { } void post_unpack() override { /*network::on("profileInfo", [](const game::netadr_t& server, const network::data_view& data) { });*/ } }; } REGISTER_COMPONENT(profile_infos::component)