ISteamMatchmakingResponses.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. // This file is provided under The MIT License as part of Steamworks.NET.
  2. // Copyright (c) 2013-2019 Riley Labrecque
  3. // Please see the included LICENSE.txt for additional information.
  4. // This file is automatically generated.
  5. // Changes to this file will be reverted when you update Steamworks.NET
  6. #if UNITY_ANDROID || UNITY_IOS || UNITY_TIZEN || UNITY_TVOS || UNITY_WEBGL || UNITY_WSA || UNITY_PS4 || UNITY_WII || UNITY_XBOXONE || UNITY_SWITCH
  7. #define DISABLESTEAMWORKS
  8. #endif
  9. #if !DISABLESTEAMWORKS
  10. // Unity 32bit Mono on Windows crashes with ThisCall for some reason, StdCall without the 'this' ptr is the only thing that works..?
  11. #if (UNITY_EDITOR_WIN && !UNITY_EDITOR_64) || (!UNITY_EDITOR && UNITY_STANDALONE_WIN && !UNITY_64)
  12. #define NOTHISPTR
  13. #endif
  14. using System;
  15. using System.Runtime.InteropServices;
  16. namespace Steamworks {
  17. //-----------------------------------------------------------------------------
  18. // Purpose: Callback interface for receiving responses after a server list refresh
  19. // or an individual server update.
  20. //
  21. // Since you get these callbacks after requesting full list refreshes you will
  22. // usually implement this interface inside an object like CServerBrowser. If that
  23. // object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery()
  24. // to cancel any in-progress queries so you don't get a callback into the destructed
  25. // object and crash.
  26. //-----------------------------------------------------------------------------
  27. public class ISteamMatchmakingServerListResponse {
  28. // Server has responded ok with updated data
  29. public delegate void ServerResponded(HServerListRequest hRequest, int iServer);
  30. // Server has failed to respond
  31. public delegate void ServerFailedToRespond(HServerListRequest hRequest, int iServer);
  32. // A list refresh you had initiated is now 100% completed
  33. public delegate void RefreshComplete(HServerListRequest hRequest, EMatchMakingServerResponse response);
  34. private VTable m_VTable;
  35. private IntPtr m_pVTable;
  36. private GCHandle m_pGCHandle;
  37. private ServerResponded m_ServerResponded;
  38. private ServerFailedToRespond m_ServerFailedToRespond;
  39. private RefreshComplete m_RefreshComplete;
  40. public ISteamMatchmakingServerListResponse(ServerResponded onServerResponded, ServerFailedToRespond onServerFailedToRespond, RefreshComplete onRefreshComplete) {
  41. if (onServerResponded == null || onServerFailedToRespond == null || onRefreshComplete == null) {
  42. throw new ArgumentNullException();
  43. }
  44. m_ServerResponded = onServerResponded;
  45. m_ServerFailedToRespond = onServerFailedToRespond;
  46. m_RefreshComplete = onRefreshComplete;
  47. m_VTable = new VTable() {
  48. m_VTServerResponded = InternalOnServerResponded,
  49. m_VTServerFailedToRespond = InternalOnServerFailedToRespond,
  50. m_VTRefreshComplete = InternalOnRefreshComplete
  51. };
  52. m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable)));
  53. Marshal.StructureToPtr(m_VTable, m_pVTable, false);
  54. m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned);
  55. }
  56. ~ISteamMatchmakingServerListResponse() {
  57. if (m_pVTable != IntPtr.Zero) {
  58. Marshal.FreeHGlobal(m_pVTable);
  59. }
  60. if (m_pGCHandle.IsAllocated) {
  61. m_pGCHandle.Free();
  62. }
  63. }
  64. #if NOTHISPTR
  65. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  66. private delegate void InternalServerResponded(HServerListRequest hRequest, int iServer);
  67. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  68. private delegate void InternalServerFailedToRespond(HServerListRequest hRequest, int iServer);
  69. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  70. private delegate void InternalRefreshComplete(HServerListRequest hRequest, EMatchMakingServerResponse response);
  71. private void InternalOnServerResponded(HServerListRequest hRequest, int iServer) {
  72. m_ServerResponded(hRequest, iServer);
  73. }
  74. private void InternalOnServerFailedToRespond(HServerListRequest hRequest, int iServer) {
  75. m_ServerFailedToRespond(hRequest, iServer);
  76. }
  77. private void InternalOnRefreshComplete(HServerListRequest hRequest, EMatchMakingServerResponse response) {
  78. m_RefreshComplete(hRequest, response);
  79. }
  80. #else
  81. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  82. private delegate void InternalServerResponded(IntPtr thisptr, HServerListRequest hRequest, int iServer);
  83. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  84. private delegate void InternalServerFailedToRespond(IntPtr thisptr, HServerListRequest hRequest, int iServer);
  85. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  86. private delegate void InternalRefreshComplete(IntPtr thisptr, HServerListRequest hRequest, EMatchMakingServerResponse response);
  87. private void InternalOnServerResponded(IntPtr thisptr, HServerListRequest hRequest, int iServer) {
  88. m_ServerResponded(hRequest, iServer);
  89. }
  90. private void InternalOnServerFailedToRespond(IntPtr thisptr, HServerListRequest hRequest, int iServer) {
  91. m_ServerFailedToRespond(hRequest, iServer);
  92. }
  93. private void InternalOnRefreshComplete(IntPtr thisptr, HServerListRequest hRequest, EMatchMakingServerResponse response) {
  94. m_RefreshComplete(hRequest, response);
  95. }
  96. #endif
  97. [StructLayout(LayoutKind.Sequential)]
  98. private class VTable {
  99. [NonSerialized]
  100. [MarshalAs(UnmanagedType.FunctionPtr)]
  101. public InternalServerResponded m_VTServerResponded;
  102. [NonSerialized]
  103. [MarshalAs(UnmanagedType.FunctionPtr)]
  104. public InternalServerFailedToRespond m_VTServerFailedToRespond;
  105. [NonSerialized]
  106. [MarshalAs(UnmanagedType.FunctionPtr)]
  107. public InternalRefreshComplete m_VTRefreshComplete;
  108. }
  109. public static explicit operator System.IntPtr(ISteamMatchmakingServerListResponse that) {
  110. return that.m_pGCHandle.AddrOfPinnedObject();
  111. }
  112. };
  113. //-----------------------------------------------------------------------------
  114. // Purpose: Callback interface for receiving responses after pinging an individual server
  115. //
  116. // These callbacks all occur in response to querying an individual server
  117. // via the ISteamMatchmakingServers()->PingServer() call below. If you are
  118. // destructing an object that implements this interface then you should call
  119. // ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
  120. // which is in progress. Failure to cancel in progress queries when destructing
  121. // a callback handler may result in a crash when a callback later occurs.
  122. //-----------------------------------------------------------------------------
  123. public class ISteamMatchmakingPingResponse {
  124. // Server has responded successfully and has updated data
  125. public delegate void ServerResponded(gameserveritem_t server);
  126. // Server failed to respond to the ping request
  127. public delegate void ServerFailedToRespond();
  128. private VTable m_VTable;
  129. private IntPtr m_pVTable;
  130. private GCHandle m_pGCHandle;
  131. private ServerResponded m_ServerResponded;
  132. private ServerFailedToRespond m_ServerFailedToRespond;
  133. public ISteamMatchmakingPingResponse(ServerResponded onServerResponded, ServerFailedToRespond onServerFailedToRespond) {
  134. if (onServerResponded == null || onServerFailedToRespond == null) {
  135. throw new ArgumentNullException();
  136. }
  137. m_ServerResponded = onServerResponded;
  138. m_ServerFailedToRespond = onServerFailedToRespond;
  139. m_VTable = new VTable() {
  140. m_VTServerResponded = InternalOnServerResponded,
  141. m_VTServerFailedToRespond = InternalOnServerFailedToRespond,
  142. };
  143. m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable)));
  144. Marshal.StructureToPtr(m_VTable, m_pVTable, false);
  145. m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned);
  146. }
  147. ~ISteamMatchmakingPingResponse() {
  148. if (m_pVTable != IntPtr.Zero) {
  149. Marshal.FreeHGlobal(m_pVTable);
  150. }
  151. if (m_pGCHandle.IsAllocated) {
  152. m_pGCHandle.Free();
  153. }
  154. }
  155. #if NOTHISPTR
  156. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  157. private delegate void InternalServerResponded(gameserveritem_t server);
  158. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  159. private delegate void InternalServerFailedToRespond();
  160. private void InternalOnServerResponded(gameserveritem_t server) {
  161. m_ServerResponded(server);
  162. }
  163. private void InternalOnServerFailedToRespond() {
  164. m_ServerFailedToRespond();
  165. }
  166. #else
  167. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  168. private delegate void InternalServerResponded(IntPtr thisptr, gameserveritem_t server);
  169. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  170. private delegate void InternalServerFailedToRespond(IntPtr thisptr);
  171. private void InternalOnServerResponded(IntPtr thisptr, gameserveritem_t server) {
  172. m_ServerResponded(server);
  173. }
  174. private void InternalOnServerFailedToRespond(IntPtr thisptr) {
  175. m_ServerFailedToRespond();
  176. }
  177. #endif
  178. [StructLayout(LayoutKind.Sequential)]
  179. private class VTable {
  180. [NonSerialized]
  181. [MarshalAs(UnmanagedType.FunctionPtr)]
  182. public InternalServerResponded m_VTServerResponded;
  183. [NonSerialized]
  184. [MarshalAs(UnmanagedType.FunctionPtr)]
  185. public InternalServerFailedToRespond m_VTServerFailedToRespond;
  186. }
  187. public static explicit operator System.IntPtr(ISteamMatchmakingPingResponse that) {
  188. return that.m_pGCHandle.AddrOfPinnedObject();
  189. }
  190. };
  191. //-----------------------------------------------------------------------------
  192. // Purpose: Callback interface for receiving responses after requesting details on
  193. // who is playing on a particular server.
  194. //
  195. // These callbacks all occur in response to querying an individual server
  196. // via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are
  197. // destructing an object that implements this interface then you should call
  198. // ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
  199. // which is in progress. Failure to cancel in progress queries when destructing
  200. // a callback handler may result in a crash when a callback later occurs.
  201. //-----------------------------------------------------------------------------
  202. public class ISteamMatchmakingPlayersResponse {
  203. // Got data on a new player on the server -- you'll get this callback once per player
  204. // on the server which you have requested player data on.
  205. public delegate void AddPlayerToList(string pchName, int nScore, float flTimePlayed);
  206. // The server failed to respond to the request for player details
  207. public delegate void PlayersFailedToRespond();
  208. // The server has finished responding to the player details request
  209. // (ie, you won't get anymore AddPlayerToList callbacks)
  210. public delegate void PlayersRefreshComplete();
  211. private VTable m_VTable;
  212. private IntPtr m_pVTable;
  213. private GCHandle m_pGCHandle;
  214. private AddPlayerToList m_AddPlayerToList;
  215. private PlayersFailedToRespond m_PlayersFailedToRespond;
  216. private PlayersRefreshComplete m_PlayersRefreshComplete;
  217. public ISteamMatchmakingPlayersResponse(AddPlayerToList onAddPlayerToList, PlayersFailedToRespond onPlayersFailedToRespond, PlayersRefreshComplete onPlayersRefreshComplete) {
  218. if (onAddPlayerToList == null || onPlayersFailedToRespond == null || onPlayersRefreshComplete == null) {
  219. throw new ArgumentNullException();
  220. }
  221. m_AddPlayerToList = onAddPlayerToList;
  222. m_PlayersFailedToRespond = onPlayersFailedToRespond;
  223. m_PlayersRefreshComplete = onPlayersRefreshComplete;
  224. m_VTable = new VTable() {
  225. m_VTAddPlayerToList = InternalOnAddPlayerToList,
  226. m_VTPlayersFailedToRespond = InternalOnPlayersFailedToRespond,
  227. m_VTPlayersRefreshComplete = InternalOnPlayersRefreshComplete
  228. };
  229. m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable)));
  230. Marshal.StructureToPtr(m_VTable, m_pVTable, false);
  231. m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned);
  232. }
  233. ~ISteamMatchmakingPlayersResponse() {
  234. if (m_pVTable != IntPtr.Zero) {
  235. Marshal.FreeHGlobal(m_pVTable);
  236. }
  237. if (m_pGCHandle.IsAllocated) {
  238. m_pGCHandle.Free();
  239. }
  240. }
  241. #if NOTHISPTR
  242. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  243. public delegate void InternalAddPlayerToList(IntPtr pchName, int nScore, float flTimePlayed);
  244. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  245. public delegate void InternalPlayersFailedToRespond();
  246. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  247. public delegate void InternalPlayersRefreshComplete();
  248. private void InternalOnAddPlayerToList(IntPtr pchName, int nScore, float flTimePlayed) {
  249. m_AddPlayerToList(InteropHelp.PtrToStringUTF8(pchName), nScore, flTimePlayed);
  250. }
  251. private void InternalOnPlayersFailedToRespond() {
  252. m_PlayersFailedToRespond();
  253. }
  254. private void InternalOnPlayersRefreshComplete() {
  255. m_PlayersRefreshComplete();
  256. }
  257. #else
  258. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  259. public delegate void InternalAddPlayerToList(IntPtr thisptr, IntPtr pchName, int nScore, float flTimePlayed);
  260. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  261. public delegate void InternalPlayersFailedToRespond(IntPtr thisptr);
  262. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  263. public delegate void InternalPlayersRefreshComplete(IntPtr thisptr);
  264. private void InternalOnAddPlayerToList(IntPtr thisptr, IntPtr pchName, int nScore, float flTimePlayed) {
  265. m_AddPlayerToList(InteropHelp.PtrToStringUTF8(pchName), nScore, flTimePlayed);
  266. }
  267. private void InternalOnPlayersFailedToRespond(IntPtr thisptr) {
  268. m_PlayersFailedToRespond();
  269. }
  270. private void InternalOnPlayersRefreshComplete(IntPtr thisptr) {
  271. m_PlayersRefreshComplete();
  272. }
  273. #endif
  274. [StructLayout(LayoutKind.Sequential)]
  275. private class VTable {
  276. [NonSerialized]
  277. [MarshalAs(UnmanagedType.FunctionPtr)]
  278. public InternalAddPlayerToList m_VTAddPlayerToList;
  279. [NonSerialized]
  280. [MarshalAs(UnmanagedType.FunctionPtr)]
  281. public InternalPlayersFailedToRespond m_VTPlayersFailedToRespond;
  282. [NonSerialized]
  283. [MarshalAs(UnmanagedType.FunctionPtr)]
  284. public InternalPlayersRefreshComplete m_VTPlayersRefreshComplete;
  285. }
  286. public static explicit operator System.IntPtr(ISteamMatchmakingPlayersResponse that) {
  287. return that.m_pGCHandle.AddrOfPinnedObject();
  288. }
  289. };
  290. //-----------------------------------------------------------------------------
  291. // Purpose: Callback interface for receiving responses after requesting rules
  292. // details on a particular server.
  293. //
  294. // These callbacks all occur in response to querying an individual server
  295. // via the ISteamMatchmakingServers()->ServerRules() call below. If you are
  296. // destructing an object that implements this interface then you should call
  297. // ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query
  298. // which is in progress. Failure to cancel in progress queries when destructing
  299. // a callback handler may result in a crash when a callback later occurs.
  300. //-----------------------------------------------------------------------------
  301. public class ISteamMatchmakingRulesResponse {
  302. // Got data on a rule on the server -- you'll get one of these per rule defined on
  303. // the server you are querying
  304. public delegate void RulesResponded(string pchRule, string pchValue);
  305. // The server failed to respond to the request for rule details
  306. public delegate void RulesFailedToRespond();
  307. // The server has finished responding to the rule details request
  308. // (ie, you won't get anymore RulesResponded callbacks)
  309. public delegate void RulesRefreshComplete();
  310. private VTable m_VTable;
  311. private IntPtr m_pVTable;
  312. private GCHandle m_pGCHandle;
  313. private RulesResponded m_RulesResponded;
  314. private RulesFailedToRespond m_RulesFailedToRespond;
  315. private RulesRefreshComplete m_RulesRefreshComplete;
  316. public ISteamMatchmakingRulesResponse(RulesResponded onRulesResponded, RulesFailedToRespond onRulesFailedToRespond, RulesRefreshComplete onRulesRefreshComplete) {
  317. if (onRulesResponded == null || onRulesFailedToRespond == null || onRulesRefreshComplete == null) {
  318. throw new ArgumentNullException();
  319. }
  320. m_RulesResponded = onRulesResponded;
  321. m_RulesFailedToRespond = onRulesFailedToRespond;
  322. m_RulesRefreshComplete = onRulesRefreshComplete;
  323. m_VTable = new VTable() {
  324. m_VTRulesResponded = InternalOnRulesResponded,
  325. m_VTRulesFailedToRespond = InternalOnRulesFailedToRespond,
  326. m_VTRulesRefreshComplete = InternalOnRulesRefreshComplete
  327. };
  328. m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VTable)));
  329. Marshal.StructureToPtr(m_VTable, m_pVTable, false);
  330. m_pGCHandle = GCHandle.Alloc(m_pVTable, GCHandleType.Pinned);
  331. }
  332. ~ISteamMatchmakingRulesResponse() {
  333. if (m_pVTable != IntPtr.Zero) {
  334. Marshal.FreeHGlobal(m_pVTable);
  335. }
  336. if (m_pGCHandle.IsAllocated) {
  337. m_pGCHandle.Free();
  338. }
  339. }
  340. #if NOTHISPTR
  341. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  342. public delegate void InternalRulesResponded(IntPtr pchRule, IntPtr pchValue);
  343. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  344. public delegate void InternalRulesFailedToRespond();
  345. [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  346. public delegate void InternalRulesRefreshComplete();
  347. private void InternalOnRulesResponded(IntPtr pchRule, IntPtr pchValue) {
  348. m_RulesResponded(InteropHelp.PtrToStringUTF8(pchRule), InteropHelp.PtrToStringUTF8(pchValue));
  349. }
  350. private void InternalOnRulesFailedToRespond() {
  351. m_RulesFailedToRespond();
  352. }
  353. private void InternalOnRulesRefreshComplete() {
  354. m_RulesRefreshComplete();
  355. }
  356. #else
  357. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  358. public delegate void InternalRulesResponded(IntPtr thisptr, IntPtr pchRule, IntPtr pchValue);
  359. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  360. public delegate void InternalRulesFailedToRespond(IntPtr thisptr);
  361. [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
  362. public delegate void InternalRulesRefreshComplete(IntPtr thisptr);
  363. private void InternalOnRulesResponded(IntPtr thisptr, IntPtr pchRule, IntPtr pchValue) {
  364. m_RulesResponded(InteropHelp.PtrToStringUTF8(pchRule), InteropHelp.PtrToStringUTF8(pchValue));
  365. }
  366. private void InternalOnRulesFailedToRespond(IntPtr thisptr) {
  367. m_RulesFailedToRespond();
  368. }
  369. private void InternalOnRulesRefreshComplete(IntPtr thisptr) {
  370. m_RulesRefreshComplete();
  371. }
  372. #endif
  373. [StructLayout(LayoutKind.Sequential)]
  374. private class VTable {
  375. [NonSerialized]
  376. [MarshalAs(UnmanagedType.FunctionPtr)]
  377. public InternalRulesResponded m_VTRulesResponded;
  378. [NonSerialized]
  379. [MarshalAs(UnmanagedType.FunctionPtr)]
  380. public InternalRulesFailedToRespond m_VTRulesFailedToRespond;
  381. [NonSerialized]
  382. [MarshalAs(UnmanagedType.FunctionPtr)]
  383. public InternalRulesRefreshComplete m_VTRulesRefreshComplete;
  384. }
  385. public static explicit operator System.IntPtr(ISteamMatchmakingRulesResponse that) {
  386. return that.m_pGCHandle.AddrOfPinnedObject();
  387. }
  388. };
  389. }
  390. #endif // !DISABLESTEAMWORKS