Set lobby member data should be available right away to getlobbymemberdata

This commit is contained in:
Mr_Goldberg 2019-10-25 18:34:37 -04:00
parent 5b471e715a
commit 2986b01d0c
No known key found for this signature in database
GPG Key ID: 8597D87419DEF278

View File

@ -88,6 +88,7 @@ public ISteamMatchmaking
std::vector<struct Chat_Entry> chat_entries; std::vector<struct Chat_Entry> chat_entries;
std::vector<struct Data_Requested> data_requested; std::vector<struct Data_Requested> data_requested;
std::map<uint64, std::map<std::string, std::string>> self_lobby_member_data;
Lobby *get_lobby(CSteamID id) Lobby *get_lobby(CSteamID id)
{ {
auto lobby = std::find_if(lobbies.begin(), lobbies.end(), [&id](Lobby const& item) { return item.room_id() == id.ConvertToUint64(); }); auto lobby = std::find_if(lobbies.begin(), lobbies.end(), [&id](Lobby const& item) { return item.room_id() == id.ConvertToUint64(); });
@ -239,6 +240,7 @@ void remove_lobbies()
while (g != std::end(lobbies)) { while (g != std::end(lobbies)) {
if (g->members().size() == 0 || (g->deleted() && (g->time_deleted() + LOBBY_DELETED_TIMEOUT < current_time))) { if (g->members().size() == 0 || (g->deleted() && (g->time_deleted() + LOBBY_DELETED_TIMEOUT < current_time))) {
PRINT_DEBUG("REMOVING LOBBY %llu\n", g->room_id()); PRINT_DEBUG("REMOVING LOBBY %llu\n", g->room_id());
self_lobby_member_data.erase(g->room_id());
g = lobbies.erase(g); g = lobbies.erase(g);
} else { } else {
++g; ++g;
@ -846,13 +848,22 @@ const char *GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, con
struct Lobby_Member *member = get_lobby_member(get_lobby(steamIDLobby), steamIDUser); struct Lobby_Member *member = get_lobby_member(get_lobby(steamIDLobby), steamIDUser);
const char *ret = ""; const char *ret = "";
if (member) { if (member) {
auto result = member->values().find(std::string(pchKey)); if (steamIDUser == settings->get_local_steam_id()) {
if (result == member->values().end()) return ""; auto result = self_lobby_member_data.find(steamIDLobby.ConvertToUint64());
PRINT_DEBUG("GetLobbyMemberData res %s\n", result->second.c_str()); if (result != self_lobby_member_data.end()) {
ret = result->second.c_str(); auto value = result->second.find(std::string(pchKey));
if (value != result->second.end()) {
ret = value->second.c_str();
}
}
} else {
auto result = member->values().find(std::string(pchKey));
if (result == member->values().end()) return "";
ret = result->second.c_str();
}
} }
PRINT_DEBUG("GetLobbyMemberData res %s\n", ret);
return ret; return ret;
} }
@ -879,6 +890,8 @@ void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *
(*message->mutable_map())[pchKey] = pchValue; (*message->mutable_map())[pchKey] = pchValue;
send_owner_packet(steamIDLobby, message); send_owner_packet(steamIDLobby, message);
} }
self_lobby_member_data[steamIDLobby.ConvertToUint64()][pchKey] = pchValue;
} }
@ -1348,6 +1361,7 @@ void Callback(Common_Message *msg)
Lobby_Member *member = get_lobby_member(lobby, (uint64)msg->source_id()); Lobby_Member *member = get_lobby_member(lobby, (uint64)msg->source_id());
if (member) { if (member) {
for (auto const &p : msg->lobby_messages().map()) { for (auto const &p : msg->lobby_messages().map()) {
PRINT_DEBUG("member data %s:%s\n", p.first.c_str(), p.second.c_str());
(*member->mutable_values())[p.first] = p.second; (*member->mutable_values())[p.first] = p.second;
} }