OnlineSubsystemSteam Implementation Questions

I’ve been messing with the Steam OnlineSubsystem, and I’m trying to figure out a couple implementation details and try to implement a few other steam specific things. Anyway it seems to work as follows:

  • Steam Online Subsystem has an async task manager where you can queue steam related tasks.
  • The async task manager listens for all possible steam related callbacks.
  • Async tasks poll the steam api directly based off of callback handles to see their completion status on tick.

I’m a little curious why the async task manager listens to all the steam related callbacks instead of the tasks themselves. It seems like tasks shouldn’t need to tick at all and could just respond to the callbacks themselves instead of the async task manager.

Anyway, I’m trying to use steam stats to track some user stats that aren’t really related to leaderboards, and I’m having a difficult time trying to work out the best way to get and modify steam stats without involving the leaderboards system. With that in mind a couple follow up questions:

  1. Is there a way to access the steam api safely outside of the steam online subsystem?
  2. If not, is there a safe way to add steam specific functionality to the Steam OnlineSubsystem and be able to access it from my game’s code without having to modify other online subsystems?
  3. Would it be safe to isolate the leaderboard system from user stats? Would it break things?

The best way I can tell to implement what I want is to modify the base IOnlineLeaderboards interface with the extra functionality I need (requesting a single user’s specific stats and modifying a specific user’s specific stats) and then stub out that functionality in all the child leaderboard interfaces.

Just looking for any input that could clear up some of these issues. It feels like the OnlineSubsystemSteam kind of gimps a very generic api to steam itself by assuming it can only be used in certain ways and I’m interested in the best ways to work around that.


One more thing I notice. It seems like the leaderboard interface assumes that you are always incrementing values instead of being able to use them to store arbitrary stats. As well there doesn’t seem to be a way to gain access to the AVGRATE stat type.