public void SetManualLobbyDataCallback(ulong steamId, Action <Lobby> callback) { if (callback != null) { if (ManualLobbyDataCallbacks == null) { ManualLobbyDataCallbacks = new Dictionary <ulong, Action <Lobby> >(); } if (!ManualLobbyDataCallbacks.ContainsKey(steamId)) { ManualLobbyDataCallbacks.Add(steamId, callback); } else { ManualLobbyDataCallbacks[steamId] = callback; } } else { if (ManualLobbyDataCallbacks == null) { return; } if (ManualLobbyDataCallbacks.ContainsKey(steamId)) { ManualLobbyDataCallbacks.Remove(steamId); } } }
void OnLobbyDataUpdated(LobbyDataUpdate_t callback) { if (callback.Success == 1) //1 if success, 0 if failure { if (ManualLobbyDataCallbacks.ContainsKey(callback.SteamIDLobby)) { ManualLobbyDataCallbacks[callback.SteamIDLobby]?.Invoke(Lobby.FromSteam(client, callback.SteamIDLobby)); } //find the lobby that has been updated Lobby lobby = Lobbies.Find(x => x != null && x.LobbyID == callback.SteamIDLobby); //if this lobby isn't yet in the list of lobbies, we know that we should add it if (lobby == null) { if (requests.Contains(callback.SteamIDLobby)) { lobby = Lobby.FromSteam(client, callback.SteamIDLobby); Lobbies.Add(lobby); checkFinished(); } } //otherwise lobby data in general was updated and you should listen to see what changed if (requests.Contains(callback.SteamIDLobby)) { OnLobbiesUpdated?.Invoke(); } } }