diff options
Diffstat (limited to 'public/steamnetworkingsockets/isteamnetworkingutils.h')
| -rw-r--r-- | public/steamnetworkingsockets/isteamnetworkingutils.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/public/steamnetworkingsockets/isteamnetworkingutils.h b/public/steamnetworkingsockets/isteamnetworkingutils.h new file mode 100644 index 0000000..80190e9 --- /dev/null +++ b/public/steamnetworkingsockets/isteamnetworkingutils.h @@ -0,0 +1,125 @@ +//====== Copyright Valve Corporation, All rights reserved. ==================== +// +// Purpose: misc networking utilities +// +//============================================================================= + +#ifndef ISTEAMNETWORKINGUTILS +#define ISTEAMNETWORKINGUTILS +#ifdef _WIN32 +#pragma once +#endif + +#include "steamnetworkingtypes.h" +struct SteamDatagramRelayAuthTicket; + +//----------------------------------------------------------------------------- +/// Misc networking utilities for checking the local networking environment +/// and estimating pings. +class ISteamNetworkingUtils +{ +public: + + /// Fetch current timestamp. These values never go backwards, and + /// the initial value is low enough that practically speaking it's + /// not necessary to worry about the value wrapping around. + virtual SteamNetworkingMicroseconds GetLocalTimestamp() = 0; + + /// Check if the ping data of sufficient recency is available, and if + /// it's too old, start refreshing it. + /// + /// Games that use the ping location information will typically + /// want to call this at boot time, to make sure all prerequisites + /// are ready. Especially since the first measurement might take + /// slightly longer than subsequent measurements. + /// + /// Returns true if sufficiently recent data is already available. + /// + /// Returns false if sufficiently recent data is not available. In this + /// case, ping measurement is initiated, if it is not already active. + /// (You cannot restart a measurement already in progress.) + /// + /// A FIXME event will be posted when measurement is completed. + virtual bool CheckPingDataUpToDate( float flMaxAgeSeconds ) = 0; + + /// Return location info for the current host. Returns the approximate + /// age of the data, in seconds, or -1 if no data is available. + /// Note that this might return an age older than the age of your game's + /// process, if the data was obtained before you game started. + /// + /// This always return the most up-to-date information we have available + /// right now, even if we are in the middle of re-calculating ping times. + virtual float GetLocalPingLocation( SteamNetworkPingLocation_t &result ) = 0; + + /// Return true if we are taking ping measurements to update our ping + /// location or select optimal routing. Ping measurement typically takes + /// a few seconds, perhaps up to 10 seconds. + virtual bool IsPingMeasurementInProgress() = 0; + + /// Estimate the round-trip latency between two arbitrary locations, in + /// milliseconds. This is a conservative estimate, based on routing through + /// the relay network. For most basic connections based on SteamID, + /// this ping time will be pretty accurate, since it will be based on the + /// route likely to be actually used. + /// + /// If a direct IP route is used (perhaps via NAT traversal), then the route + /// will be different, and the ping time might be better. Or it might actually + /// be a bit worse! Standard IP routing is frequently suboptimal! + /// + /// but even in this case, the estimate obtained using this method is a + /// reasonable upper bound on the ping time. (Also it has the advantage + /// of returning immediately and not sending any packets.) + /// + /// In a few cases we might not able to estimate the route. In this case + /// a negative value is returned. k_nSteamNetworkingPing_Failed means + /// the reason was because of some networking difficulty. (Failure to + /// ping, etc) k_nSteamNetworkingPing_Unknown is returned if we cannot + /// currently answer the question for some other reason. + virtual int EstimatePingTimeBetweenTwoLocations( const SteamNetworkPingLocation_t &location1, const SteamNetworkPingLocation_t &location2 ) = 0; + + /// Same as EstimatePingTime, but assumes that one location is the local host. + /// This is a bit faster, especially if you need to calculate a bunch of + /// these in a loop to find the fastest one. + /// + /// In rare cases this might return a slightly different estimate than combining + /// GetLocalPingLocation with EstimatePingTimeBetweenTwoLocations. That's because + /// this function uses a slightly more complete description + virtual int EstimatePingTimeFromLocalHost( const SteamNetworkPingLocation_t &remoteLocation ) = 0; + + // FIXME: + // + // Check current internet connection status + + // + // Low level ticket stuff. I need to get some advice and talk through how this should work + // or how best to tuck it away and make it transparent. + // + + virtual bool ReceivedTicket( const void *pvTicket, int cbTicket, SteamDatagramRelayAuthTicket *pOutParsedTicket ) = 0; + virtual bool HasTicketForServer( CSteamID steamID ) = 0; + virtual uint32 GetIPForServerSteamIDFromTicket( CSteamID steamID ) = 0; + + // + // Low level network config stuff I haven't figure out how best to tuck away. + // Dota and CSGO use it because we have gameservers in the datacenter, and + // we need this information to do region selection. But most games won't + // need it. + // + + /// Fetch directly measured ping time from local host to a particular network PoP. + /// Most games will not need to call this. + virtual int GetPingToDataCenter( SteamNetworkingPOPID popID, SteamNetworkingPOPID *pViaRelayPoP ) = 0; + virtual int GetDirectPingToPOP( SteamNetworkingPOPID popID ) = 0; + + /// Get number of network PoPs in the config + virtual int GetPOPCount() = 0; + + /// Get list of all POP IDs + virtual int GetPOPList( SteamNetworkingPOPID *list, int nListSz ) = 0; +}; +#define STEAMNETWORKINGUTILS_VERSION "SteamNetworkingUtils001" + +/// Get ISteamNetworkingUtils object. This will eventually go in Steam_api.h with all the rest of its kin +STEAMDATAGRAMLIB_INTERFACE ISteamNetworkingUtils *SteamNetworkingUtils(); + +#endif // ISTEAMNETWORKINGUTILS |