mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-01-04 00:23:25 +08:00
168 lines
5.5 KiB
C++
168 lines
5.5 KiB
C++
//====== Copyright © 1996-2004, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef STEAM_API_H
|
|
#define STEAM_API_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "isteamclient.h"
|
|
#include "isteamuser.h"
|
|
#include "isteamfriends.h"
|
|
#include "isteamutils.h"
|
|
#include "isteambilling.h"
|
|
|
|
// Steam API export macro
|
|
#ifdef _WIN32
|
|
#if defined( STEAM_API_EXPORTS )
|
|
#define S_API extern "C" __declspec( dllexport )
|
|
#else
|
|
#define S_API extern "C" __declspec( dllimport )
|
|
#endif // STEAM_API_EXPORTS
|
|
#else // !WIN32
|
|
#if defined( STEAM_API_EXPORTS )
|
|
#define S_API extern "C"
|
|
#else
|
|
#define S_API extern "C"
|
|
#endif // STEAM_API_EXPORTS
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
// Steam API setup & teardown
|
|
//
|
|
// These functions manage loading, initializing and shutdown of the steamclient.dll
|
|
//
|
|
// bugbug johnc: seperate defining these to defining game server interface more cleanly
|
|
//
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
|
|
S_API bool SteamAPI_Init();
|
|
S_API void SteamAPI_Shutdown();
|
|
|
|
|
|
// interface pointers, configured by SteamAPI_Init()
|
|
S_API ISteamUser *SteamUser();
|
|
S_API ISteamFriends *SteamFriends();
|
|
S_API ISteamClient *SteamClient();
|
|
S_API ISteamUtils *SteamUtils();
|
|
S_API ISteamBilling *SteamBilling();
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
// steam callback helper functions
|
|
//
|
|
// These following classes/macros are used to be able to easily multiplex callbacks
|
|
// from the Steam API into various objects in the app in a thread-safe manner
|
|
//
|
|
// This functors are triggered via the SteamAPI_RunCallbacks() function, mapping the callback
|
|
// to as many functions/objects as are registered to it
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
|
|
S_API void SteamAPI_RunCallbacks();
|
|
|
|
|
|
|
|
// functions used by the utility CCallback objects to receive callbacks
|
|
S_API void SteamAPI_RegisterCallback( class CCallbackBase *pCallback, int iCallback );
|
|
S_API void SteamAPI_UnregisterCallback( class CCallbackBase *pCallback );
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: base for callbacks,
|
|
// used only by CCallback, shouldn't be used directly
|
|
//-----------------------------------------------------------------------------
|
|
class CCallbackBase
|
|
{
|
|
public:
|
|
CCallbackBase() { m_nCallbackFlags = 0; }
|
|
virtual void Run( void *pvParam ) = 0;
|
|
|
|
protected:
|
|
enum { k_ECallbackFlagsRegistered = 0x01, k_ECallbackFlagsGameServer = 0x02 };
|
|
uint8 m_nCallbackFlags;
|
|
private:
|
|
int m_iCallback;
|
|
friend class CCallbackMgr;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: maps a steam callback to a class member function
|
|
// template params: T = local class, P = parameter struct
|
|
//-----------------------------------------------------------------------------
|
|
template< class T, class P, bool bGameServer >
|
|
class CCallback : private CCallbackBase
|
|
{
|
|
public:
|
|
typedef void (T::*func_t)( P* );
|
|
|
|
// If you can't support constructing a callback with the correct parameters
|
|
// then uncomment the empty constructor below and manually call
|
|
// ::Register() for your object
|
|
//CCallback() {}
|
|
|
|
// constructor for initializing this object in owner's constructor
|
|
CCallback( T *pObj, func_t func ) : m_pObj( pObj ), m_Func( func )
|
|
{
|
|
if ( bGameServer )
|
|
{
|
|
m_nCallbackFlags |= k_ECallbackFlagsGameServer;
|
|
}
|
|
|
|
Register( pObj, func );
|
|
}
|
|
|
|
~CCallback()
|
|
{
|
|
SteamAPI_UnregisterCallback( this );
|
|
}
|
|
|
|
// manual registration of the callback
|
|
void Register( T *pObj, func_t func )
|
|
{
|
|
m_pObj = pObj;
|
|
m_Func = func;
|
|
SteamAPI_RegisterCallback( this, P::k_iCallback );
|
|
}
|
|
|
|
private:
|
|
virtual void Run( void *pvParam )
|
|
{
|
|
(m_pObj->*m_Func)( (P *)pvParam );
|
|
}
|
|
|
|
T *m_pObj;
|
|
func_t m_Func;
|
|
};
|
|
|
|
|
|
// utility macro for declaring the function and callback object together
|
|
#define STEAM_CALLBACK( thisclass, func, param, var ) CCallback< thisclass, param, false > var; void func( param *pParam )
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
// steamclient.dll private wrapper functions
|
|
//
|
|
// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
|
|
|
|
// initializes the global instance of steam - should only be used by SteamUI app itself
|
|
S_API bool SteamAPI_InitGlobalInstance();
|
|
|
|
// pumps out all the steam messages, calling the register callback
|
|
S_API void Steam_RunCallbacks( HSteamPipe hSteamPipe, bool bGameServerCallbacks );
|
|
|
|
// register the callback funcs to use to interact with the steam dll
|
|
S_API void Steam_RegisterInterfaceFuncs( void *hModule );
|
|
|
|
// returns the HSteamUser of the last user to dispatch a callback
|
|
S_API HSteamUser Steam_GetHSteamUserCurrent();
|
|
|
|
|
|
#endif // STEAM_API_H
|