#pragma once #include #include #include #include class SteamNetworkingManager; // Forward declaration class SteamRoomManager; // Forward declaration for callbacks class SteamFriendsCallbacks { public: SteamFriendsCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); void OnGameRichPresenceJoinRequested(GameRichPresenceJoinRequested_t *pCallback); void OnGameLobbyJoinRequested(GameLobbyJoinRequested_t *pCallback); private: SteamNetworkingManager *manager_; SteamRoomManager *roomManager_; }; class SteamMatchmakingCallbacks { public: SteamMatchmakingCallbacks(SteamNetworkingManager *manager, SteamRoomManager *roomManager); void OnLobbyCreated(LobbyCreated_t *pCallback); void OnLobbyListReceived(LobbyMatchList_t *pCallback); void OnLobbyEntered(LobbyEnter_t *pCallback); private: SteamNetworkingManager *manager_; SteamRoomManager *roomManager_; }; class SteamRoomManager { public: SteamRoomManager(SteamNetworkingManager *networkingManager); ~SteamRoomManager(); bool createLobby(); void leaveLobby(); bool searchLobbies(); bool joinLobby(CSteamID lobbyID); bool startHosting(); void stopHosting(); CSteamID getCurrentLobby() const { return currentLobby; } const std::vector& getLobbies() const { return lobbies; } void setCurrentLobby(CSteamID lobby) { currentLobby = lobby; } void addLobby(CSteamID lobby) { lobbies.push_back(lobby); } void clearLobbies() { lobbies.clear(); } private: SteamNetworkingManager *networkingManager_; CSteamID currentLobby; std::vector lobbies; SteamFriendsCallbacks *steamFriendsCallbacks; SteamMatchmakingCallbacks *steamMatchmakingCallbacks; };