mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2025-03-31 06:39:02 +03:00
Call OnDebugCallback on CallResults too
This commit is contained in:
parent
e9978ec55b
commit
53d86e7e3f
@ -35,7 +35,7 @@ namespace Steamworks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void OnCompleted( Action continuation )
|
public void OnCompleted( Action continuation )
|
||||||
{
|
{
|
||||||
Dispatch.OnCallComplete( call, continuation, server );
|
Dispatch.OnCallComplete<T>( call, continuation, server );
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -55,10 +55,12 @@ namespace Steamworks
|
|||||||
{
|
{
|
||||||
if ( !utils.GetAPICallResult( call, ptr, size, (int)t.CallbackType, ref failed ) || failed )
|
if ( !utils.GetAPICallResult( call, ptr, size, (int)t.CallbackType, ref failed ) || failed )
|
||||||
{
|
{
|
||||||
Console.WriteLine( $"Api Call result returned false or {failed}" );
|
Dispatch.OnDebugCallback?.Invoke( t.CallbackType, "!GetAPICallResult or failed", server );
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dispatch.OnDebugCallback?.Invoke( t.CallbackType, Dispatch.CallbackToString( t.CallbackType, ptr, size ), server );
|
||||||
|
|
||||||
return ((T)Marshal.PtrToStructure( ptr, typeof( T ) ));
|
return ((T)Marshal.PtrToStructure( ptr, typeof( T ) ));
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -130,6 +130,8 @@ namespace Steamworks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private static void ProcessCallback( CallbackMsg_t msg, bool isServer )
|
private static void ProcessCallback( CallbackMsg_t msg, bool isServer )
|
||||||
{
|
{
|
||||||
|
OnDebugCallback?.Invoke( msg.Type, CallbackToString( msg.Type, msg.Data, msg.DataSize ), isServer );
|
||||||
|
|
||||||
// Is this a special callback telling us that the call result is ready?
|
// Is this a special callback telling us that the call result is ready?
|
||||||
if ( msg.Type == CallbackType.SteamAPICallCompleted )
|
if ( msg.Type == CallbackType.SteamAPICallCompleted )
|
||||||
{
|
{
|
||||||
@ -137,11 +139,6 @@ namespace Steamworks
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( OnDebugCallback != null )
|
|
||||||
{
|
|
||||||
OnDebugCallback( msg.Type, CallbackToString( msg ), isServer );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( Callbacks.TryGetValue( msg.Type, out var list ) )
|
if ( Callbacks.TryGetValue( msg.Type, out var list ) )
|
||||||
{
|
{
|
||||||
actionsToCall.Clear();
|
actionsToCall.Clear();
|
||||||
@ -166,20 +163,30 @@ namespace Steamworks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Given a callback, try to turn it into a string
|
/// Given a callback, try to turn it into a string
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static string CallbackToString( CallbackMsg_t msg )
|
internal static string CallbackToString( CallbackType type, IntPtr data, int expectedsize )
|
||||||
{
|
{
|
||||||
if ( !CallbackTypeFactory.All.TryGetValue( msg.Type, out var t ) )
|
if ( !CallbackTypeFactory.All.TryGetValue( type, out var t ) )
|
||||||
return "[not in sdk]";
|
return $"[{type} not in sdk]";
|
||||||
|
|
||||||
var strct = msg.Data.ToType( t );
|
var strct = data.ToType( t );
|
||||||
if ( strct == null )
|
if ( strct == null )
|
||||||
return "[null]";
|
return "[null]";
|
||||||
|
|
||||||
var str = "";
|
var str = "";
|
||||||
|
|
||||||
foreach ( var field in t.GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic ) )
|
var fields = t.GetFields( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic );
|
||||||
|
|
||||||
|
var columnSize = fields.Max( x => x.Name.Length ) + 1;
|
||||||
|
|
||||||
|
if ( columnSize < 10 )
|
||||||
|
columnSize = 10;
|
||||||
|
|
||||||
|
foreach ( var field in fields )
|
||||||
{
|
{
|
||||||
str += $"{field.Name}: \"{field.GetValue( strct )}\"\n";
|
var spaces = (columnSize - field.Name.Length);
|
||||||
|
if ( spaces < 0 ) spaces = 0;
|
||||||
|
|
||||||
|
str += $"{new String( ' ', spaces )}{field.Name}: {field.GetValue( strct )}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return str.Trim( '\n' );
|
return str.Trim( '\n' );
|
||||||
@ -197,7 +204,16 @@ namespace Steamworks
|
|||||||
//
|
//
|
||||||
if ( !ResultCallbacks.TryGetValue( result.AsyncCall, out var callbackInfo ) )
|
if ( !ResultCallbacks.TryGetValue( result.AsyncCall, out var callbackInfo ) )
|
||||||
{
|
{
|
||||||
// Do we care? Should we throw errors?
|
//
|
||||||
|
// This can happen if the callback result was immediately available
|
||||||
|
// so we just returned that without actually going through the callback
|
||||||
|
// dance. It's okay for this to fail.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// But still let everyone know that this happened..
|
||||||
|
//
|
||||||
|
OnDebugCallback?.Invoke( (CallbackType)result.Callback, $"[no callback waiting/required]", false );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +264,7 @@ namespace Steamworks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Watch for a steam api call
|
/// Watch for a steam api call
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static void OnCallComplete( SteamAPICall_t call, Action continuation, bool server )
|
internal static void OnCallComplete<T>( SteamAPICall_t call, Action continuation, bool server ) where T : struct, ICallbackData
|
||||||
{
|
{
|
||||||
ResultCallbacks[call.Value] = new ResultCallback
|
ResultCallbacks[call.Value] = new ResultCallback
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user