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