284 lines
11 KiB
C#
284 lines
11 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Linq;
|
|
|
|
namespace SteamNative
|
|
{
|
|
internal unsafe class SteamClient : IDisposable
|
|
{
|
|
//
|
|
// Holds a platform specific implentation
|
|
//
|
|
internal Platform.Interface platform;
|
|
internal Facepunch.Steamworks.BaseSteamworks steamworks;
|
|
|
|
//
|
|
// Constructor decides which implementation to use based on current platform
|
|
//
|
|
internal SteamClient( Facepunch.Steamworks.BaseSteamworks steamworks, IntPtr pointer )
|
|
{
|
|
this.steamworks = steamworks;
|
|
|
|
if ( Platform.IsWindows64 ) platform = new Platform.Win64( pointer );
|
|
else if ( Platform.IsWindows32 ) platform = new Platform.Win32( pointer );
|
|
else if ( Platform.IsLinux32 ) platform = new Platform.Linux32( pointer );
|
|
else if ( Platform.IsLinux64 ) platform = new Platform.Linux64( pointer );
|
|
else if ( Platform.IsOsx ) platform = new Platform.Mac( pointer );
|
|
}
|
|
|
|
//
|
|
// Class is invalid if we don't have a valid implementation
|
|
//
|
|
public bool IsValid{ get{ return platform != null && platform.IsValid; } }
|
|
|
|
//
|
|
// When shutting down clear all the internals to avoid accidental use
|
|
//
|
|
public virtual void Dispose()
|
|
{
|
|
if ( platform != null )
|
|
{
|
|
platform.Dispose();
|
|
platform = null;
|
|
}
|
|
}
|
|
|
|
// bool
|
|
public bool BReleaseSteamPipe( HSteamPipe hSteamPipe /*HSteamPipe*/ )
|
|
{
|
|
return platform.ISteamClient_BReleaseSteamPipe( hSteamPipe.Value );
|
|
}
|
|
|
|
// bool
|
|
public bool BShutdownIfAllPipesClosed()
|
|
{
|
|
return platform.ISteamClient_BShutdownIfAllPipesClosed();
|
|
}
|
|
|
|
// HSteamUser
|
|
public HSteamUser ConnectToGlobalUser( HSteamPipe hSteamPipe /*HSteamPipe*/ )
|
|
{
|
|
return platform.ISteamClient_ConnectToGlobalUser( hSteamPipe.Value );
|
|
}
|
|
|
|
// HSteamUser
|
|
public HSteamUser CreateLocalUser( out HSteamPipe phSteamPipe /*HSteamPipe **/, AccountType eAccountType /*EAccountType*/ )
|
|
{
|
|
return platform.ISteamClient_CreateLocalUser( out phSteamPipe.Value, eAccountType );
|
|
}
|
|
|
|
// HSteamPipe
|
|
public HSteamPipe CreateSteamPipe()
|
|
{
|
|
return platform.ISteamClient_CreateSteamPipe();
|
|
}
|
|
|
|
// uint
|
|
public uint GetIPCCallCount()
|
|
{
|
|
return platform.ISteamClient_GetIPCCallCount();
|
|
}
|
|
|
|
// ISteamAppList *
|
|
public SteamAppList GetISteamAppList( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamAppList( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamAppList( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamApps *
|
|
public SteamApps GetISteamApps( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamApps( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamApps( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamController *
|
|
public SteamController GetISteamController( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamController( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamController( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamFriends *
|
|
public SteamFriends GetISteamFriends( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamFriends( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamFriends( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamGameServer *
|
|
public SteamGameServer GetISteamGameServer( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamGameServer( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamGameServer( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamGameServerStats *
|
|
public SteamGameServerStats GetISteamGameServerStats( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamGameServerStats( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamGameServerStats( steamworks, interface_pointer );
|
|
}
|
|
|
|
// IntPtr
|
|
public IntPtr GetISteamGenericInterface( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
return platform.ISteamClient_GetISteamGenericInterface( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
}
|
|
|
|
// ISteamHTMLSurface *
|
|
public SteamHTMLSurface GetISteamHTMLSurface( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamHTMLSurface( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamHTMLSurface( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamHTTP *
|
|
public SteamHTTP GetISteamHTTP( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamHTTP( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamHTTP( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamInventory *
|
|
public SteamInventory GetISteamInventory( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamInventory( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamInventory( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamMatchmaking *
|
|
public SteamMatchmaking GetISteamMatchmaking( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamMatchmaking( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamMatchmaking( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamMatchmakingServers *
|
|
public SteamMatchmakingServers GetISteamMatchmakingServers( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamMatchmakingServers( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamMatchmakingServers( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamMusic *
|
|
public SteamMusic GetISteamMusic( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamMusic( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamMusic( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamMusicRemote *
|
|
public SteamMusicRemote GetISteamMusicRemote( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamMusicRemote( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamMusicRemote( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamNetworking *
|
|
public SteamNetworking GetISteamNetworking( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamNetworking( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamNetworking( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamParentalSettings *
|
|
public SteamParentalSettings GetISteamParentalSettings( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamParentalSettings( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamParentalSettings( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamRemoteStorage *
|
|
public SteamRemoteStorage GetISteamRemoteStorage( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamRemoteStorage( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamRemoteStorage( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamScreenshots *
|
|
public SteamScreenshots GetISteamScreenshots( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamScreenshots( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamScreenshots( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamUGC *
|
|
public SteamUGC GetISteamUGC( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamUGC( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamUGC( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamUser *
|
|
public SteamUser GetISteamUser( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamUser( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamUser( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamUserStats *
|
|
public SteamUserStats GetISteamUserStats( HSteamUser hSteamUser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamUserStats( hSteamUser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamUserStats( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamUtils *
|
|
public SteamUtils GetISteamUtils( HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamUtils( hSteamPipe.Value, pchVersion );
|
|
return new SteamUtils( steamworks, interface_pointer );
|
|
}
|
|
|
|
// ISteamVideo *
|
|
public SteamVideo GetISteamVideo( HSteamUser hSteamuser /*HSteamUser*/, HSteamPipe hSteamPipe /*HSteamPipe*/, string pchVersion /*const char **/ )
|
|
{
|
|
IntPtr interface_pointer;
|
|
interface_pointer = platform.ISteamClient_GetISteamVideo( hSteamuser.Value, hSteamPipe.Value, pchVersion );
|
|
return new SteamVideo( steamworks, interface_pointer );
|
|
}
|
|
|
|
// void
|
|
public void ReleaseUser( HSteamPipe hSteamPipe /*HSteamPipe*/, HSteamUser hUser /*HSteamUser*/ )
|
|
{
|
|
platform.ISteamClient_ReleaseUser( hSteamPipe.Value, hUser.Value );
|
|
}
|
|
|
|
// void
|
|
public void SetLocalIPBinding( uint unIP /*uint32*/, ushort usPort /*uint16*/ )
|
|
{
|
|
platform.ISteamClient_SetLocalIPBinding( unIP, usPort );
|
|
}
|
|
|
|
// void
|
|
public void SetWarningMessageHook( IntPtr pFunction /*SteamAPIWarningMessageHook_t*/ )
|
|
{
|
|
platform.ISteamClient_SetWarningMessageHook( (IntPtr) pFunction );
|
|
}
|
|
|
|
}
|
|
}
|