SteamNetworkUtil global config basics

This commit is contained in:
Garry Newman 2019-05-02 15:57:57 +01:00
parent 16ce5f4d63
commit 3eae3314b6
5 changed files with 153 additions and 14 deletions

View File

@ -11,7 +11,7 @@ enum SteamNetworkingGetConfigValueResult
Force32Bit = 0x7fffffff Force32Bit = 0x7fffffff
}; };
enum SteamNetworkingConfigDataType enum NetConfigType
{ {
Int32 = 1, Int32 = 1,
Int64 = 2, Int64 = 2,
@ -37,7 +37,7 @@ enum SteamNetworkingSocketsDebugOutputType : int
Force32Bit = 0x7fffffff Force32Bit = 0x7fffffff
}; };
internal enum SteamNetworkingConfigScope : int internal enum NetScope : int
{ {
Global = 1, Global = 1,
SocketsInterface = 2, SocketsInterface = 2,
@ -47,7 +47,7 @@ internal enum SteamNetworkingConfigScope : int
Force32Bit = 0x7fffffff Force32Bit = 0x7fffffff
} }
internal enum SteamNetworkingConfigValue : int internal enum NetConfig : int
{ {
Invalid = 0, Invalid = 0,
FakePacketLoss_Send = 2, FakePacketLoss_Send = 2,

View File

@ -181,45 +181,45 @@ internal void SetDebugOutputFunction( SteamNetworkingSocketsDebugOutputType eDet
#region FunctionMeta #region FunctionMeta
[UnmanagedFunctionPointer( CallingConvention.ThisCall )] [UnmanagedFunctionPointer( CallingConvention.ThisCall )]
[return: MarshalAs( UnmanagedType.I1 )] [return: MarshalAs( UnmanagedType.I1 )]
private delegate bool FSetConfigValue( IntPtr self, SteamNetworkingConfigValue eValue, SteamNetworkingConfigScope eScopeType, IntPtr scopeObj, SteamNetworkingConfigDataType eDataType, IntPtr pArg ); private delegate bool FSetConfigValue( IntPtr self, NetConfig eValue, NetScope eScopeType, long scopeObj, NetConfigType eDataType, IntPtr pArg );
private FSetConfigValue _SetConfigValue; private FSetConfigValue _SetConfigValue;
#endregion #endregion
internal bool SetConfigValue( SteamNetworkingConfigValue eValue, SteamNetworkingConfigScope eScopeType, IntPtr scopeObj, SteamNetworkingConfigDataType eDataType, IntPtr pArg ) internal bool SetConfigValue( NetConfig eValue, NetScope eScopeType, long scopeObj, NetConfigType eDataType, IntPtr pArg )
{ {
return _SetConfigValue( Self, eValue, eScopeType, scopeObj, eDataType, pArg ); return _SetConfigValue( Self, eValue, eScopeType, scopeObj, eDataType, pArg );
} }
#region FunctionMeta #region FunctionMeta
[UnmanagedFunctionPointer( CallingConvention.ThisCall )] [UnmanagedFunctionPointer( CallingConvention.ThisCall )]
private delegate SteamNetworkingGetConfigValueResult FGetConfigValue( IntPtr self, SteamNetworkingConfigValue eValue, SteamNetworkingConfigScope eScopeType, IntPtr scopeObj, [In,Out] SteamNetworkingConfigDataType[] pOutDataType, IntPtr pResult, ref ulong cbResult ); private delegate SteamNetworkingGetConfigValueResult FGetConfigValue( IntPtr self, NetConfig eValue, NetScope eScopeType, long scopeObj, ref NetConfigType pOutDataType, IntPtr pResult, ref ulong cbResult );
private FGetConfigValue _GetConfigValue; private FGetConfigValue _GetConfigValue;
#endregion #endregion
internal SteamNetworkingGetConfigValueResult GetConfigValue( SteamNetworkingConfigValue eValue, SteamNetworkingConfigScope eScopeType, IntPtr scopeObj, [In,Out] SteamNetworkingConfigDataType[] pOutDataType, IntPtr pResult, ref ulong cbResult ) internal SteamNetworkingGetConfigValueResult GetConfigValue( NetConfig eValue, NetScope eScopeType, long scopeObj, ref NetConfigType pOutDataType, IntPtr pResult, ref ulong cbResult )
{ {
return _GetConfigValue( Self, eValue, eScopeType, scopeObj, pOutDataType, pResult, ref cbResult ); return _GetConfigValue( Self, eValue, eScopeType, scopeObj, ref pOutDataType, pResult, ref cbResult );
} }
#region FunctionMeta #region FunctionMeta
[UnmanagedFunctionPointer( CallingConvention.ThisCall )] [UnmanagedFunctionPointer( CallingConvention.ThisCall )]
[return: MarshalAs( UnmanagedType.I1 )] [return: MarshalAs( UnmanagedType.I1 )]
private delegate bool FGetConfigValueInfo( IntPtr self, SteamNetworkingConfigValue eValue, [In,Out] string[] pOutName, [In,Out] SteamNetworkingConfigDataType[] pOutDataType, [In,Out] SteamNetworkingConfigScope[] pOutScope, [In,Out] SteamNetworkingConfigValue[] pOutNextValue ); private delegate bool FGetConfigValueInfo( IntPtr self, NetConfig eValue, [In,Out] string[] pOutName, ref NetConfigType pOutDataType, [In,Out] NetScope[] pOutScope, [In,Out] NetConfig[] pOutNextValue );
private FGetConfigValueInfo _GetConfigValueInfo; private FGetConfigValueInfo _GetConfigValueInfo;
#endregion #endregion
internal bool GetConfigValueInfo( SteamNetworkingConfigValue eValue, [In,Out] string[] pOutName, [In,Out] SteamNetworkingConfigDataType[] pOutDataType, [In,Out] SteamNetworkingConfigScope[] pOutScope, [In,Out] SteamNetworkingConfigValue[] pOutNextValue ) internal bool GetConfigValueInfo( NetConfig eValue, [In,Out] string[] pOutName, ref NetConfigType pOutDataType, [In,Out] NetScope[] pOutScope, [In,Out] NetConfig[] pOutNextValue )
{ {
return _GetConfigValueInfo( Self, eValue, pOutName, pOutDataType, pOutScope, pOutNextValue ); return _GetConfigValueInfo( Self, eValue, pOutName, ref pOutDataType, pOutScope, pOutNextValue );
} }
#region FunctionMeta #region FunctionMeta
[UnmanagedFunctionPointer( CallingConvention.ThisCall )] [UnmanagedFunctionPointer( CallingConvention.ThisCall )]
private delegate SteamNetworkingConfigValue FGetFirstConfigValue( IntPtr self ); private delegate NetConfig FGetFirstConfigValue( IntPtr self );
private FGetFirstConfigValue _GetFirstConfigValue; private FGetFirstConfigValue _GetFirstConfigValue;
#endregion #endregion
internal SteamNetworkingConfigValue GetFirstConfigValue() internal NetConfig GetFirstConfigValue()
{ {
return _GetFirstConfigValue( Self ); return _GetFirstConfigValue( Self );
} }

View File

@ -78,5 +78,139 @@ public static async Task WaitForPingDataAsync( float maxAgeInSeconds = 60 * 5 )
await Task.Delay( 10 ); await Task.Delay( 10 );
} }
} }
public static SteamNetworkingMicroseconds LocalTimetamp => Internal.GetLocalTimestamp();
/// <summary>
/// [0 - 100] - Randomly discard N pct of packets
/// </summary>
public static float FakeSendPacketLoss
{
get => GetConfigFloat( NetConfig.FakePacketLoss_Send );
set => SetConfigFloat( NetConfig.FakePacketLoss_Send, value );
}
/// <summary>
/// [0 - 100] - Randomly discard N pct of packets
/// </summary>
public static float FakeRecvPacketLoss
{
get => GetConfigFloat( NetConfig.FakePacketLoss_Recv );
set => SetConfigFloat( NetConfig.FakePacketLoss_Recv, value );
}
/// <summary>
/// Delay all packets by N ms
/// </summary>
public static float FakeSendPacketLag
{
get => GetConfigFloat( NetConfig.FakePacketLag_Send );
set => SetConfigFloat( NetConfig.FakePacketLag_Send, value );
}
/// <summary>
/// Delay all packets by N ms
/// </summary>
public static float FakeRecvPacketLag
{
get => GetConfigFloat( NetConfig.FakePacketLag_Recv );
set => SetConfigFloat( NetConfig.FakePacketLag_Recv, value );
}
#region Config Internals
internal unsafe static bool GetConfigInt( NetConfig type, int value )
{
int* ptr = &value;
return Internal.SetConfigValue( type, NetScope.Global, 0, NetConfigType.Int32, (IntPtr)ptr );
}
internal unsafe static int GetConfigInt( NetConfig type )
{
int value = 0;
NetConfigType dtype = NetConfigType.Int32;
int* ptr = &value;
ulong size = sizeof( int );
var result = Internal.GetConfigValue( type, NetScope.Global, 0, ref dtype, (IntPtr) ptr, ref size );
if ( result != SteamNetworkingGetConfigValueResult.OK )
return 0;
return value;
}
internal unsafe static bool SetConfigFloat( NetConfig type, float value )
{
float* ptr = &value;
return Internal.SetConfigValue( type, NetScope.Global, 0, NetConfigType.Float, (IntPtr)ptr );
}
internal unsafe static float GetConfigFloat( NetConfig type )
{
float value = 0;
NetConfigType dtype = NetConfigType.Float;
float* ptr = &value;
ulong size = sizeof( float );
var result = Internal.GetConfigValue( type, NetScope.Global, 0, ref dtype, (IntPtr)ptr, ref size );
if ( result != SteamNetworkingGetConfigValueResult.OK )
return 0;
return value;
}
internal unsafe static bool SetConfigString( NetConfig type, string value )
{
var bytes = Encoding.UTF8.GetBytes( value );
fixed ( byte* ptr = bytes )
{
return Internal.SetConfigValue( type, NetScope.Global, 0, NetConfigType.String, (IntPtr)ptr );
}
}
/*
internal unsafe static float GetConfigString( NetConfig type )
{
float value = 0;
NetConfigType dtype = NetConfigType.Float;
float* ptr = &value;
ulong size = sizeof( float );
var result = Internal.GetConfigValue( type, NetScope.Global, 0, ref dtype, (IntPtr)ptr, ref size );
if ( result != SteamNetworkingGetConfigValueResult.OK )
return 0;
return value;
}
*/
/*
TODO - Connection object
internal unsafe static bool SetConnectionConfig( uint con, NetConfig type, int value )
{
int* ptr = &value;
return Internal.SetConfigValue( type, NetScope.Connection, con, NetConfigType.Int32, (IntPtr)ptr );
}
internal unsafe static bool SetConnectionConfig( uint con, NetConfig type, float value )
{
float* ptr = &value;
return Internal.SetConfigValue( type, NetScope.Connection, con, NetConfigType.Float, (IntPtr)ptr );
}
internal unsafe static bool SetConnectionConfig( uint con, NetConfig type, string value )
{
var bytes = Encoding.UTF8.GetBytes( value );
fixed ( byte* ptr = bytes )
{
return Internal.SetConfigValue( type, NetScope.Connection, con, NetConfigType.String, (IntPtr)ptr );
}
}*/
#endregion
} }
} }

View File

@ -27,6 +27,9 @@ public static string ConvertType( string type )
type = type.Replace( "SteamItemDef_t", "InventoryDefId" ); type = type.Replace( "SteamItemDef_t", "InventoryDefId" );
type = type.Replace( "ChatRoomEnterResponse", "RoomEnter" ); type = type.Replace( "ChatRoomEnterResponse", "RoomEnter" );
type = type.Replace( "SteamNetworkPingLocation_t", "PingLocation" ); type = type.Replace( "SteamNetworkPingLocation_t", "PingLocation" );
type = type.Replace( "SteamNetworkingConfigValue", "NetConfig" );
type = type.Replace( "SteamNetworkingConfigScope", "NetScope" );
type = type.Replace( "SteamNetworkingConfigDataType", "NetConfigType" );
return type; return type;
} }

View File

@ -18,7 +18,6 @@ public static BaseType Parse( string type, string varname = null )
type = Cleanup.ConvertType( type ); type = Cleanup.ConvertType( type );
if ( type == "SteamAPIWarningMessageHook_t" ) return new PointerType { NativeType = type, VarName = varname }; if ( type == "SteamAPIWarningMessageHook_t" ) return new PointerType { NativeType = type, VarName = varname };
if ( type == "intptr_t" ) return new PointerType { NativeType = type, VarName = varname };
if ( type == "SteamAPICall_t" ) return new SteamApiCallType { NativeType = type, VarName = varname }; if ( type == "SteamAPICall_t" ) return new SteamApiCallType { NativeType = type, VarName = varname };
@ -39,6 +38,8 @@ public static BaseType Parse( string type, string varname = null )
// DANGER DANGER Danger // DANGER DANGER Danger
if ( basicType == "size_t" ) return new ULongType { NativeType = type, VarName = varname }; if ( basicType == "size_t" ) return new ULongType { NativeType = type, VarName = varname };
if ( basicType == "intptr_t" ) return new LongType { NativeType = type, VarName = varname };
if ( basicType == "ptrdiff_t" ) return new LongType { NativeType = type, VarName = varname };
if ( basicType == "uint64" ) return new ULongType { NativeType = type, VarName = varname }; if ( basicType == "uint64" ) return new ULongType { NativeType = type, VarName = varname };
if ( basicType == "int64" ) return new LongType { NativeType = type, VarName = varname }; if ( basicType == "int64" ) return new LongType { NativeType = type, VarName = varname };
@ -73,6 +74,7 @@ public virtual bool IsVector
if ( VarName == "pOutBuffer" ) return false; if ( VarName == "pOutBuffer" ) return false;
if ( VarName == "pubRGB" ) return false; if ( VarName == "pubRGB" ) return false;
if ( VarName == "pOutResultHandle" ) return false; if ( VarName == "pOutResultHandle" ) return false;
if ( VarName == "pOutDataType" ) return false;
if ( VarName == "psteamIDClans" ) return true; if ( VarName == "psteamIDClans" ) return true;
if ( VarName == "pScoreDetails" ) return true; if ( VarName == "pScoreDetails" ) return true;