holywyvern/carbuncle

View on GitHub
gems/carbuncle-steamworks/include/isteamclient.h

Summary

Maintainability
Test Coverage
//====== Copyright Valve Corporation, All rights reserved. ====================
//
// Internal low-level access to Steamworks interfaces.
//
// Most users of the Steamworks SDK do not need to include this file.
// You should only include this if you are doing something special.
//=============================================================================

#ifndef ISTEAMCLIENT_H
#define ISTEAMCLIENT_H
#ifdef _WIN32
#pragma once
#endif

#include "steam_api_common.h"

//-----------------------------------------------------------------------------
// Purpose: Interface to creating a new steam instance, or to
//            connect to an existing steam instance, whether it's in a
//            different process or is local.
//
//            For most scenarios this is all handled automatically via SteamAPI_Init().
//            You'll only need these APIs if you have a more complex versioning scheme,
//            or if you want to implement a multiplexed gameserver where a single process
//            is handling multiple games at once with independent gameserver SteamIDs.
//-----------------------------------------------------------------------------
class ISteamClient
{
public:
    // Creates a communication pipe to the Steam client.
    // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
    virtual HSteamPipe CreateSteamPipe() = 0;

    // Releases a previously created communications pipe
    // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
    virtual bool BReleaseSteamPipe( HSteamPipe hSteamPipe ) = 0;

    // connects to an existing global user, failing if none exists
    // used by the game to coordinate with the steamUI
    // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
    virtual HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe ) = 0;

    // used by game servers, create a steam user that won't be shared with anyone else
    // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
    virtual HSteamUser CreateLocalUser( HSteamPipe *phSteamPipe, EAccountType eAccountType ) = 0;

    // removes an allocated user
    // NOT THREADSAFE - ensure that no other threads are accessing Steamworks API when calling
    virtual void ReleaseUser( HSteamPipe hSteamPipe, HSteamUser hUser ) = 0;

    // retrieves the ISteamUser interface associated with the handle
    virtual ISteamUser *GetISteamUser( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // retrieves the ISteamGameServer interface associated with the handle
    virtual ISteamGameServer *GetISteamGameServer( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // set the local IP and Port to bind to
    // this must be set before CreateLocalUser()
    virtual void SetLocalIPBinding( const SteamIPAddress_t &unIP, uint16 usPort ) = 0; 

    // returns the ISteamFriends interface
    virtual ISteamFriends *GetISteamFriends( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the ISteamUtils interface
    virtual ISteamUtils *GetISteamUtils( HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the ISteamMatchmaking interface
    virtual ISteamMatchmaking *GetISteamMatchmaking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the ISteamMatchmakingServers interface
    virtual ISteamMatchmakingServers *GetISteamMatchmakingServers( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the a generic interface
    virtual void *GetISteamGenericInterface( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the ISteamUserStats interface
    virtual ISteamUserStats *GetISteamUserStats( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns the ISteamGameServerStats interface
    virtual ISteamGameServerStats *GetISteamGameServerStats( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns apps interface
    virtual ISteamApps *GetISteamApps( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // networking
    virtual ISteamNetworking *GetISteamNetworking( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // remote storage
    virtual ISteamRemoteStorage *GetISteamRemoteStorage( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // user screenshots
    virtual ISteamScreenshots *GetISteamScreenshots( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // game search
    virtual ISteamGameSearch *GetISteamGameSearch( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Deprecated. Applications should use SteamAPI_RunCallbacks() or SteamGameServer_RunCallbacks() instead.
    STEAM_PRIVATE_API( virtual void RunFrame() = 0; )

    // returns the number of IPC calls made since the last time this function was called
    // Used for perf debugging so you can understand how many IPC calls your game makes per frame
    // Every IPC call is at minimum a thread context switch if not a process one so you want to rate
    // control how often you do them.
    virtual uint32 GetIPCCallCount() = 0;

    // API warning handling
    // 'int' is the severity; 0 for msg, 1 for warning
    // 'const char *' is the text of the message
    // callbacks will occur directly after the API function is called that generated the warning or message.
    virtual void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) = 0;

    // Trigger global shutdown for the DLL
    virtual bool BShutdownIfAllPipesClosed() = 0;

    // Expose HTTP interface
    virtual ISteamHTTP *GetISteamHTTP( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Deprecated - the ISteamUnifiedMessages interface is no longer intended for public consumption.
    STEAM_PRIVATE_API( virtual void *DEPRECATED_GetISteamUnifiedMessages( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0 ; )

    // Exposes the ISteamController interface - deprecated in favor of Steam Input
    virtual ISteamController *GetISteamController( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Exposes the ISteamUGC interface
    virtual ISteamUGC *GetISteamUGC( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // returns app list interface, only available on specially registered apps
    virtual ISteamAppList *GetISteamAppList( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;
    
    // Music Player
    virtual ISteamMusic *GetISteamMusic( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Music Player Remote
    virtual ISteamMusicRemote *GetISteamMusicRemote(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;

    // html page display
    virtual ISteamHTMLSurface *GetISteamHTMLSurface(HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion) = 0;

    // Helper functions for internal Steam usage
    STEAM_PRIVATE_API( virtual void DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
    STEAM_PRIVATE_API( virtual void DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)() ) = 0; )
    STEAM_PRIVATE_API( virtual void Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) = 0; )

    // inventory
    virtual ISteamInventory *GetISteamInventory( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Video
    virtual ISteamVideo *GetISteamVideo( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Parental controls
    virtual ISteamParentalSettings *GetISteamParentalSettings( HSteamUser hSteamuser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Exposes the Steam Input interface for controller support
    virtual ISteamInput *GetISteamInput( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Steam Parties interface
    virtual ISteamParties *GetISteamParties( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    // Steam Remote Play interface
    virtual ISteamRemotePlay *GetISteamRemotePlay( HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion ) = 0;

    STEAM_PRIVATE_API( virtual void DestroyAllInterfaces() = 0; )

};
#define STEAMCLIENT_INTERFACE_VERSION        "SteamClient020"

#ifndef STEAM_API_EXPORTS

// Global ISteamClient interface accessor
inline ISteamClient *SteamClient();
STEAM_DEFINE_INTERFACE_ACCESSOR( ISteamClient *, SteamClient, SteamInternal_CreateInterface( STEAMCLIENT_INTERFACE_VERSION ), "global", STEAMCLIENT_INTERFACE_VERSION );

// The internal ISteamClient used for the gameserver interface.
// (This is actually the same thing.  You really shouldn't need to access any of this stuff directly.)
inline ISteamClient *SteamGameServerClient() { return SteamClient(); }

#endif

#endif // ISTEAMCLIENT_H