using System; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using Steamworks.Data; namespace Steamworks { internal class ISteamMatchmakingServers : SteamInterface { public override string InterfaceName => "SteamMatchMakingServers002"; public override void InitInternals() { _RequestInternetServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 0 ) ) ); _RequestLANServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 8 ) ) ); _RequestFriendsServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 16 ) ) ); _RequestFavoritesServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 24 ) ) ); _RequestHistoryServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 32 ) ) ); _RequestSpectatorServerList = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 40 ) ) ); _ReleaseRequest = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 48 ) ) ); _GetServerDetails = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 56 ) ) ); _CancelQuery = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 64 ) ) ); _RefreshQuery = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 72 ) ) ); _IsRefreshing = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 80 ) ) ); _GetServerCount = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 88 ) ) ); _RefreshServer = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 96 ) ) ); _PingServer = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 104 ) ) ); _PlayerDetails = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 112 ) ) ); _ServerRules = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 120 ) ) ); _CancelServerQuery = Marshal.GetDelegateForFunctionPointer( Marshal.ReadIntPtr( VTable, Platform.MemoryOffset( 128 ) ) ); } internal override void Shutdown() { base.Shutdown(); _RequestInternetServerList = null; _RequestLANServerList = null; _RequestFriendsServerList = null; _RequestFavoritesServerList = null; _RequestHistoryServerList = null; _RequestSpectatorServerList = null; _ReleaseRequest = null; _GetServerDetails = null; _CancelQuery = null; _RefreshQuery = null; _IsRefreshing = null; _GetServerCount = null; _RefreshServer = null; _PingServer = null; _PlayerDetails = null; _ServerRules = null; _CancelServerQuery = null; } #region FunctionMeta [UnmanagedFunctionPointer( Platform.MemberConvention )] private delegate HServerListRequest FRequestInternetServerList( IntPtr self, AppId iApp, IntPtr ppchFilters, uint nFilters, IntPtr pRequestServersResponse ); private FRequestInternetServerList _RequestInternetServerList; #endregion internal HServerListRequest RequestInternetServerList( AppId iApp, MatchMakingKeyValuePair[] ppchFilters, uint nFilters, IntPtr pRequestServersResponse ) { int numPtrs = ppchFilters.Length; if (numPtrs <= 0) { numPtrs = 1; } IntPtr[] filterPtrs = new IntPtr[numPtrs]; GCHandle?[] filterHandles = new GCHandle?[numPtrs]; for (int i=0;i