mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2024-12-24 13:45:37 +03:00
Refactored init
This commit is contained in:
parent
ee502cce8b
commit
53dfddabf0
@ -42,7 +42,7 @@ public unsafe Ticket GetAuthSessionTicket()
|
||||
fixed ( byte* b = data )
|
||||
{
|
||||
uint ticketLength = 0;
|
||||
uint ticket = client._user.GetAuthSessionTicket( (IntPtr) b, data.Length, ref ticketLength );
|
||||
uint ticket = client.native.user.GetAuthSessionTicket( (IntPtr) b, data.Length, ref ticketLength );
|
||||
|
||||
if ( ticket == 0 )
|
||||
return null;
|
||||
@ -61,7 +61,7 @@ public unsafe Ticket GetAuthSessionTicket()
|
||||
/// </summary>
|
||||
public void CancelAuthTicket( Ticket ticket )
|
||||
{
|
||||
client._user.CancelAuthTicket( ticket.Handle );
|
||||
client.native.user.CancelAuthTicket( ticket.Handle );
|
||||
ticket.Handle = 0;
|
||||
ticket.Data = null;
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ public unsafe bool SendP2PPacket( ulong steamid, byte[] data, int length, EP2PSe
|
||||
{
|
||||
fixed ( byte* p = data )
|
||||
{
|
||||
return client._networking.SendP2PPacket( steamid, (IntPtr) p, (uint)length, (uint)eP2PSendType, nChannel );
|
||||
return client.native.networking.SendP2PPacket( steamid, (IntPtr) p, (uint)length, (uint)eP2PSendType, nChannel );
|
||||
}
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ private unsafe bool ReadP2PPacket( MemoryStream ms, int channel = 0 )
|
||||
{
|
||||
uint DataAvailable = 0;
|
||||
|
||||
if ( !client._networking.IsP2PPacketAvailable( ref DataAvailable, channel ) || DataAvailable == 0 )
|
||||
if ( !client.native.networking.IsP2PPacketAvailable( ref DataAvailable, channel ) || DataAvailable == 0 )
|
||||
return false;
|
||||
|
||||
if ( ms.Capacity < DataAvailable )
|
||||
@ -133,7 +133,7 @@ private unsafe bool ReadP2PPacket( MemoryStream ms, int channel = 0 )
|
||||
fixed ( byte* p = ms.GetBuffer() )
|
||||
{
|
||||
ulong steamid = 1;
|
||||
if ( !client._networking.ReadP2PPacket( (IntPtr)p, (uint)DataAvailable, ref DataAvailable, ref steamid, channel ) || DataAvailable == 0 )
|
||||
if ( !client.native.networking.ReadP2PPacket( (IntPtr)p, (uint)DataAvailable, ref DataAvailable, ref steamid, channel ) || DataAvailable == 0 )
|
||||
return false;
|
||||
|
||||
ms.SetLength( DataAvailable );
|
||||
|
@ -25,17 +25,17 @@ public class Overlay
|
||||
{
|
||||
internal Client client;
|
||||
|
||||
public void OpenProfile( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "steamid", steamid ); }
|
||||
public void OpenChat( ulong steamid ){ client._friends.ActivateGameOverlayToUser( "chat", steamid ); }
|
||||
public void OpenTrade( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "jointrade", steamid ); }
|
||||
public void OpenStats( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "stats", steamid ); }
|
||||
public void OpenAchievements( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "achievements", steamid ); }
|
||||
public void OpenProfile( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "steamid", steamid ); }
|
||||
public void OpenChat( ulong steamid ){ client.native.friends.ActivateGameOverlayToUser( "chat", steamid ); }
|
||||
public void OpenTrade( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "jointrade", steamid ); }
|
||||
public void OpenStats( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "stats", steamid ); }
|
||||
public void OpenAchievements( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "achievements", steamid ); }
|
||||
|
||||
public void AddFriend( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "friendadd", steamid ); }
|
||||
public void RemoveFriend( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "friendremove", steamid ); }
|
||||
public void AcceptFriendRequest( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "friendrequestaccept", steamid ); }
|
||||
public void IgnoreFriendRequest( ulong steamid ) { client._friends.ActivateGameOverlayToUser( "friendrequestignore", steamid ); }
|
||||
public void AddFriend( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "friendadd", steamid ); }
|
||||
public void RemoveFriend( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "friendremove", steamid ); }
|
||||
public void AcceptFriendRequest( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "friendrequestaccept", steamid ); }
|
||||
public void IgnoreFriendRequest( ulong steamid ) { client.native.friends.ActivateGameOverlayToUser( "friendrequestignore", steamid ); }
|
||||
|
||||
public void OpenUrl( string url ) { client._friends.ActivateGameOverlayToWebPage( url ); }
|
||||
public void OpenUrl( string url ) { client.native.friends.ActivateGameOverlayToWebPage( url ); }
|
||||
}
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ public void Dispose()
|
||||
if ( !Finished && Id != IntPtr.Zero )
|
||||
{
|
||||
if ( client.Valid )
|
||||
client._servers.CancelQuery( Id );
|
||||
client.native.servers.CancelQuery( Id );
|
||||
|
||||
Id = IntPtr.Zero;
|
||||
}
|
||||
@ -170,7 +170,7 @@ private void NonResponsive( IntPtr thisptr, IntPtr RequestId, int iServer )
|
||||
if ( RequestId != Id )
|
||||
throw new Exception( "Request ID is invalid!" );
|
||||
|
||||
var info = client._servers.GetServerDetails( Id, iServer );
|
||||
var info = client.native.servers.GetServerDetails( Id, iServer );
|
||||
Unresponsive.Add( Server.FromSteam( info ) );
|
||||
}
|
||||
|
||||
@ -179,7 +179,7 @@ private void OnServerResponded( IntPtr thisptr, IntPtr RequestId, int iServer )
|
||||
if ( RequestId != Id )
|
||||
throw new Exception( "Request ID is invalid!" );
|
||||
|
||||
var info = client._servers.GetServerDetails( Id, iServer );
|
||||
var info = client.native.servers.GetServerDetails( Id, iServer );
|
||||
Responded.Add( Server.FromSteam( info ) );
|
||||
|
||||
System.Diagnostics.Debug.WriteLine( info.m_szServerName );
|
||||
|
@ -53,7 +53,7 @@ public unsafe Request Test()
|
||||
client = client
|
||||
};
|
||||
|
||||
request.Id = client._servers.RequestInternetServerList( client.AppId, new IntPtr[] { }, request.GetVTablePointer() );
|
||||
request.Id = client.native.servers.RequestInternetServerList( client.AppId, new IntPtr[] { }, request.GetVTablePointer() );
|
||||
|
||||
return request;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public class Voice
|
||||
/// </summary>
|
||||
public uint OptimalSampleRate
|
||||
{
|
||||
get { return client._user.GetVoiceOptimalSampleRate(); }
|
||||
get { return client.native.user.GetVoiceOptimalSampleRate(); }
|
||||
}
|
||||
|
||||
private bool _wantsrecording = false;
|
||||
@ -58,11 +58,11 @@ public bool WantsRecording
|
||||
|
||||
if ( value )
|
||||
{
|
||||
client._user.StartVoiceRecording();
|
||||
client.native.user.StartVoiceRecording();
|
||||
}
|
||||
else
|
||||
{
|
||||
client._user.StopVoiceRecording();
|
||||
client.native.user.StopVoiceRecording();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -86,7 +86,7 @@ internal unsafe void Update()
|
||||
bufferRegularLastWrite = 0;
|
||||
bufferCompressedLastWrite = 0;
|
||||
|
||||
Valve.Steamworks.EVoiceResult result = (Valve.Steamworks.EVoiceResult) client._user.GetVoice( OnUncompressedData != null, (IntPtr) pbufferCompressed, (uint) bufferCompressed.Length, ref bufferCompressedLastWrite,
|
||||
Valve.Steamworks.EVoiceResult result = (Valve.Steamworks.EVoiceResult) client.native.user.GetVoice( OnUncompressedData != null, (IntPtr) pbufferCompressed, (uint) bufferCompressed.Length, ref bufferCompressedLastWrite,
|
||||
OnCompressedData != null, (IntPtr) pbufferRegular, (uint) bufferRegular.Length, ref bufferRegularLastWrite,
|
||||
DesiredSampleRate == 0 ? OptimalSampleRate : DesiredSampleRate );
|
||||
|
||||
|
@ -7,16 +7,66 @@ namespace Facepunch.Steamworks
|
||||
{
|
||||
public partial class Client : IDisposable
|
||||
{
|
||||
private uint _hpipe;
|
||||
private uint _huser;
|
||||
|
||||
internal Valve.Steamworks.ISteamClient _client;
|
||||
internal Valve.Steamworks.ISteamUser _user;
|
||||
internal Valve.Steamworks.ISteamApps _apps;
|
||||
internal Valve.Steamworks.ISteamFriends _friends;
|
||||
internal Valve.Steamworks.ISteamMatchmakingServers _servers;
|
||||
internal Valve.Steamworks.ISteamInventory _inventory;
|
||||
internal Valve.Steamworks.ISteamNetworking _networking;
|
||||
|
||||
internal class Internal : IDisposable
|
||||
{
|
||||
private uint _hpipe;
|
||||
private uint _huser;
|
||||
|
||||
internal Valve.Steamworks.ISteamClient client;
|
||||
internal Valve.Steamworks.ISteamUser user;
|
||||
internal Valve.Steamworks.ISteamApps apps;
|
||||
internal Valve.Steamworks.ISteamFriends friends;
|
||||
internal Valve.Steamworks.ISteamMatchmakingServers servers;
|
||||
internal Valve.Steamworks.ISteamInventory inventory;
|
||||
internal Valve.Steamworks.ISteamNetworking networking;
|
||||
|
||||
internal bool Init()
|
||||
{
|
||||
client = Valve.Steamworks.SteamAPI.SteamClient();
|
||||
|
||||
if ( client.GetIntPtr() == IntPtr.Zero )
|
||||
{
|
||||
client = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
_hpipe = client.CreateSteamPipe();
|
||||
_huser = client.ConnectToGlobalUser( _hpipe );
|
||||
|
||||
friends = client.GetISteamFriends( _huser, _hpipe, "SteamFriends015" );
|
||||
user = client.GetISteamUser( _huser, _hpipe, "SteamUser019" );
|
||||
servers = client.GetISteamMatchmakingServers( _huser, _hpipe, "SteamMatchMakingServers002" );
|
||||
inventory = client.GetISteamInventory( _huser, _hpipe, "STEAMINVENTORY_INTERFACE_V001" );
|
||||
networking = client.GetISteamNetworking( _huser, _hpipe, "SteamNetworking005" );
|
||||
apps = client.GetISteamApps( _huser, _hpipe, "STEAMAPPS_INTERFACE_VERSION008" );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if ( _hpipe > 0 && client != null )
|
||||
{
|
||||
if ( _huser > 0 )
|
||||
client.ReleaseUser( _hpipe, _huser );
|
||||
|
||||
client.BReleaseSteamPipe( _hpipe );
|
||||
|
||||
_huser = 0;
|
||||
_hpipe = 0;
|
||||
}
|
||||
|
||||
if ( client != null )
|
||||
{
|
||||
client.BShutdownIfAllPipesClosed();
|
||||
client = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal Internal native;
|
||||
|
||||
/// <summary>
|
||||
/// Current running program's AppId
|
||||
@ -47,11 +97,16 @@ public enum MessageType : int
|
||||
public Client( uint appId )
|
||||
{
|
||||
Valve.Steamworks.SteamAPI.Init( appId );
|
||||
_client = Valve.Steamworks.SteamAPI.SteamClient();
|
||||
|
||||
if ( _client.GetIntPtr() == IntPtr.Zero )
|
||||
native = new Internal();
|
||||
|
||||
//
|
||||
// Get other interfaces
|
||||
//
|
||||
if ( !native.Init() )
|
||||
{
|
||||
_client = null;
|
||||
native.Dispose();
|
||||
native = null;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -59,49 +114,22 @@ public Client( uint appId )
|
||||
// Set up warning hook callback
|
||||
//
|
||||
SteamAPIWarningMessageHook ptr = InternalOnWarning;
|
||||
_client.SetWarningMessageHook( Marshal.GetFunctionPointerForDelegate( ptr ) );
|
||||
native.client.SetWarningMessageHook( Marshal.GetFunctionPointerForDelegate( ptr ) );
|
||||
|
||||
//
|
||||
// Get pipes
|
||||
// Cache common, unchanging info
|
||||
//
|
||||
_hpipe = _client.CreateSteamPipe();
|
||||
_huser = _client.ConnectToGlobalUser( _hpipe );
|
||||
|
||||
|
||||
//
|
||||
// Get other interfaces
|
||||
//
|
||||
_friends = _client.GetISteamFriends( _huser, _hpipe, "SteamFriends015" );
|
||||
_user = _client.GetISteamUser( _huser, _hpipe, "SteamUser019" );
|
||||
_servers = _client.GetISteamMatchmakingServers( _huser, _hpipe, "SteamMatchMakingServers002" );
|
||||
_inventory = _client.GetISteamInventory( _huser, _hpipe, "STEAMINVENTORY_INTERFACE_V001" );
|
||||
_networking = _client.GetISteamNetworking( _huser, _hpipe, "SteamNetworking005" );
|
||||
_apps = _client.GetISteamApps( _huser, _hpipe, "STEAMAPPS_INTERFACE_VERSION008" );
|
||||
|
||||
AppId = appId;
|
||||
Username = _friends.GetPersonaName();
|
||||
SteamId = _user.GetSteamID();
|
||||
Username = native.friends.GetPersonaName();
|
||||
SteamId = native.user.GetSteamID();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if ( _client != null )
|
||||
if ( native != null)
|
||||
{
|
||||
if ( _hpipe > 0 )
|
||||
{
|
||||
if ( _huser > 0 )
|
||||
_client.ReleaseUser( _hpipe, _huser );
|
||||
|
||||
_client.BReleaseSteamPipe( _hpipe );
|
||||
|
||||
_huser = 0;
|
||||
_hpipe = 0;
|
||||
}
|
||||
|
||||
_friends = null;
|
||||
|
||||
_client.BShutdownIfAllPipesClosed();
|
||||
_client = null;
|
||||
native.Dispose();
|
||||
native = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,7 +157,7 @@ public void Update()
|
||||
|
||||
public bool Valid
|
||||
{
|
||||
get { return _client != null; }
|
||||
get { return native != null; }
|
||||
}
|
||||
|
||||
internal Action InstallCallback( int type, Delegate action )
|
||||
|
@ -32,7 +32,7 @@ internal App( Client c )
|
||||
|
||||
public void MarkContentCorrupt( bool missingFilesOnly = false )
|
||||
{
|
||||
client._apps.MarkContentCorrupt( missingFilesOnly );
|
||||
client.native.apps.MarkContentCorrupt( missingFilesOnly );
|
||||
}
|
||||
|
||||
|
||||
|
@ -46,7 +46,7 @@ internal Inventory( Client c )
|
||||
/// </summary>
|
||||
public void DropHeartbeat()
|
||||
{
|
||||
client._inventory.SendItemDropHeartbeat();
|
||||
client.native.inventory.SendItemDropHeartbeat();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -58,8 +58,8 @@ public void DropHeartbeat()
|
||||
public void TriggerItemDrop( Definition definition )
|
||||
{
|
||||
int result = 0;
|
||||
client._inventory.TriggerItemDrop( ref result, definition.Id );
|
||||
client._inventory.DestroyResult( result );
|
||||
client.native.inventory.TriggerItemDrop( ref result, definition.Id );
|
||||
client.native.inventory.DestroyResult( result );
|
||||
}
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@ public void Refresh()
|
||||
if ( updateRequest != 0 )
|
||||
return;
|
||||
|
||||
client._inventory.GetAllItems( ref updateRequest );
|
||||
client.native.inventory.GetAllItems( ref updateRequest );
|
||||
}
|
||||
|
||||
internal void LoadItemDefinitions()
|
||||
@ -82,10 +82,10 @@ internal void LoadItemDefinitions()
|
||||
//
|
||||
// Make sure item definitions are loaded, because we're going to be using them.
|
||||
//
|
||||
client._inventory.LoadItemDefinitions();
|
||||
client.native.inventory.LoadItemDefinitions();
|
||||
|
||||
int[] ids;
|
||||
if ( !client._inventory.GetItemDefinitionIDs( out ids ) )
|
||||
if ( !client.native.inventory.GetItemDefinitionIDs( out ids ) )
|
||||
return;
|
||||
|
||||
Definitions = ids.Select( x =>
|
||||
@ -105,7 +105,7 @@ internal void LoadItemDefinitions()
|
||||
internal T DefinitionProperty<T>( int i, string name )
|
||||
{
|
||||
string val = string.Empty;
|
||||
client._inventory.GetItemDefinitionProperty( i, name, out val );
|
||||
client.native.inventory.GetItemDefinitionProperty( i, name, out val );
|
||||
return (T) Convert.ChangeType( val, typeof( T) );
|
||||
}
|
||||
|
||||
@ -113,7 +113,7 @@ internal void DestroyResult()
|
||||
{
|
||||
if ( updateRequest != 0 )
|
||||
{
|
||||
client._inventory.DestroyResult( updateRequest );
|
||||
client.native.inventory.DestroyResult( updateRequest );
|
||||
updateRequest = 0;
|
||||
}
|
||||
}
|
||||
@ -129,7 +129,7 @@ private void UpdateRequest()
|
||||
if ( updateRequest == 0 )
|
||||
return;
|
||||
|
||||
var status = (Valve.Steamworks.EResult) client._inventory.GetResultStatus( updateRequest );
|
||||
var status = (Valve.Steamworks.EResult) client.native.inventory.GetResultStatus( updateRequest );
|
||||
|
||||
if ( status == Valve.Steamworks.EResult.k_EResultPending )
|
||||
return;
|
||||
@ -165,7 +165,7 @@ private void UpdateRequest()
|
||||
private unsafe void RetrieveInventory()
|
||||
{
|
||||
Valve.Steamworks.SteamItemDetails_t[] items = null;
|
||||
client._inventory.GetResultItems( updateRequest, out items );
|
||||
client.native.inventory.GetResultItems( updateRequest, out items );
|
||||
|
||||
Items = items.Select( x =>
|
||||
{
|
||||
@ -184,12 +184,12 @@ private unsafe void RetrieveInventory()
|
||||
// Get a serialized version
|
||||
//
|
||||
uint size = 0;
|
||||
client._inventory.SerializeResult( updateRequest, IntPtr.Zero, ref size );
|
||||
client.native.inventory.SerializeResult( updateRequest, IntPtr.Zero, ref size );
|
||||
SerializedItems = new byte[size];
|
||||
|
||||
fixed( byte* b = SerializedItems )
|
||||
{
|
||||
client._inventory.SerializeResult( updateRequest, (IntPtr) b, ref size );
|
||||
client.native.inventory.SerializeResult( updateRequest, (IntPtr) b, ref size );
|
||||
}
|
||||
|
||||
SerializedExpireTime = DateTime.Now.Add( TimeSpan.FromMinutes( 60 ) );
|
||||
@ -243,7 +243,7 @@ public T GetProperty<T>( string name )
|
||||
{
|
||||
string val = string.Empty;
|
||||
|
||||
if ( !client._inventory.GetItemDefinitionProperty( Id, name, out val ) )
|
||||
if ( !client.native.inventory.GetItemDefinitionProperty( Id, name, out val ) )
|
||||
return default( T );
|
||||
|
||||
try
|
||||
|
Loading…
Reference in New Issue
Block a user