diff --git a/FLB_API.slnx b/FLB_API.slnx
index 3fefe3d..468873e 100644
--- a/FLB_API.slnx
+++ b/FLB_API.slnx
@@ -1,4 +1,13 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FLB_API/Controllers/LobbyListController.cs b/FLB_API/Controllers/LobbyListController.cs
index f35c512..a9d78a3 100644
--- a/FLB_API/Controllers/LobbyListController.cs
+++ b/FLB_API/Controllers/LobbyListController.cs
@@ -7,7 +7,7 @@ namespace FLB_API.Controllers
public class LobbyListController : ControllerBase
{
[HttpGet(Name = "GetServers")]
- public IActionResult Get()
+ public IActionResult Get([FromQuery(Name = "service")] string service = "Steam")
{
if (Program.FusionClient?.Handler.IsInitialized != true)
return StatusCode(500, "Server is not connected to Steam.");
@@ -15,7 +15,12 @@ public IActionResult Get()
Response.Headers.AccessControlExposeHeaders = new Microsoft.Extensions.Primitives.StringValues("Server-Uptime");
Response.Headers.Append("Server-Uptime", ((DateTimeOffset)Program.Uptime).ToUnixTimeSeconds().ToString() ?? "-1");
- return Ok(new LobbyListResponse(Program.Lobbies ?? [], Program.Date, Program.PlayerCount ?? new(0, 0)));
+ if (service.Equals("Steam", StringComparison.OrdinalIgnoreCase))
+ return Ok(new LobbyListResponse(Program.SteamLobbies ?? [], Program.Date));
+ else if (service.Equals("Epic", StringComparison.OrdinalIgnoreCase))
+ return Ok(new LobbyListResponse(Program.EOSLobbies ?? [], Program.Date));
+ else
+ return NotFound("The provided service does not exist. Choose from the following: Steam, Epic");
}
}
-}
+}
\ No newline at end of file
diff --git a/FLB_API/FLB_API.csproj b/FLB_API/FLB_API.csproj
index daf7adc..6edfb13 100644
--- a/FLB_API/FLB_API.csproj
+++ b/FLB_API/FLB_API.csproj
@@ -4,6 +4,7 @@
net10.0
enable
enable
+ Debug;Release
diff --git a/FLB_API/LobbyListResponse.cs b/FLB_API/LobbyListResponse.cs
index a7e3536..bc33f06 100644
--- a/FLB_API/LobbyListResponse.cs
+++ b/FLB_API/LobbyListResponse.cs
@@ -5,21 +5,12 @@
namespace FLB_API
{
[JsonSourceGenerationOptions(WriteIndented = true)]
- public class LobbyListResponse(LobbyInfo[] lobbies, DateTime date, PlayerCount count)
+ public class LobbyListResponse(LobbyInfo[] lobbies, DateTime date)
{
public LobbyInfo[] Lobbies { get; set; } = lobbies;
public long Date { get; set; } = ((DateTimeOffset)date).ToUnixTimeSeconds();
- public PlayerCount PlayerCount { get; set; } = count;
-
public int Interval { get; set; } = Program.Settings?.Interval ?? 30;
}
-
- public class PlayerCount(int players, int lobbies)
- {
- public int Players { get; set; } = players;
-
- public int Lobbies { get; set; } = lobbies;
- }
}
\ No newline at end of file
diff --git a/FLB_API/Program.cs b/FLB_API/Program.cs
index f3d2fd5..50a102b 100644
--- a/FLB_API/Program.cs
+++ b/FLB_API/Program.cs
@@ -16,13 +16,15 @@ public static class Program
{
public static Fusion? FusionClient { get; private set; }
+ public static Fusion? EOSClient { get; private set; }
+
internal static Serilog.Core.Logger? Logger { get; private set; }
- internal static LobbyInfo[]? Lobbies { get; private set; }
+ internal static LobbyInfo[]? SteamLobbies { get; private set; }
- internal static DateTime Date { get; private set; } = DateTime.UtcNow;
+ internal static LobbyInfo[]? EOSLobbies { get; private set; }
- internal static PlayerCount? PlayerCount { get; private set; }
+ internal static DateTime Date { get; private set; } = DateTime.UtcNow;
internal static DateTime Uptime { get; private set; }
@@ -107,7 +109,10 @@ public static async Task Main(string[] args)
var logger = new Logger(level);
await FusionClient.Initialize(logger, metadata);
- Logger?.Information("Successfully initialized Fusion API");
+ Logger?.Information("Successfully initialized Steam Fusion API! Initializing EOS (Epic Online Services)...");
+ EOSClient = new Fusion(new EOSHandler());
+ await EOSClient.Initialize(logger, []);
+ Logger?.Information("Successfully initialized EOS API");
Uptime = DateTime.UtcNow;
}
catch (Exception e)
@@ -250,15 +255,24 @@ private static async Task GetLobbies(CancellationToken token)
{
try
{
- Logger?.Information("Fetching lobbies...");
+ Logger?.Information("Fetching Steam lobbies...");
var lobbies = await FusionClient.GetLobbies(includeFull: true, includePrivate: false, includeSelf: true);
int players = 0;
foreach (var lobby in lobbies)
players += lobby.PlayerCount;
- PlayerCount = new(players, lobbies.Length);
Date = DateTime.UtcNow;
- Lobbies = lobbies;
- Logger?.Information($"Successfully fetched lobbies ({lobbies.Length})...");
+ SteamLobbies = lobbies;
+
+ Logger?.Information($"Successfully fetched Steam lobbies ({lobbies.Length})...");
+
+ Logger?.Information("Fetching EOS lobbies...");
+ var eLobbies = await EOSClient.GetLobbies(includeFull: true, includePrivate: false, includeSelf: true);
+ int ePlayers = 0;
+ foreach (var lobby in eLobbies)
+ ePlayers += lobby.PlayerCount;
+ EOSLobbies = eLobbies;
+
+ Logger?.Information($"Successfully fetched EOS lobbies ({eLobbies.Length})...");
LoadSettings();
}
catch (Exception e)
diff --git a/FusionAPI/CoRoutine.cs b/FusionAPI/CoRoutine.cs
new file mode 100644
index 0000000..d7dfeb1
--- /dev/null
+++ b/FusionAPI/CoRoutine.cs
@@ -0,0 +1,198 @@
+using System.Collections;
+using System.Reflection;
+using System.Text;
+
+namespace FusionAPI;
+
+// Wrapper class for IEnumerator objects
+// This class is nice because it allows IEnumerator's to return other IEnumerator's just like Unity
+// We call it CoRoutine instead of Coroutine to differentiate it from UnityEngine.CoRoutine
+public class CoRoutine
+{
+ readonly Stack _processStack;
+ readonly List _finished = new List();
+
+ object _returnValue;
+
+ public CoRoutine(IEnumerator enumerator)
+ {
+ _processStack = new Stack();
+ _processStack.Push(enumerator);
+ }
+
+ public object ReturnValue
+ {
+ get
+ {
+ Assert(!_processStack.Any());
+ return _returnValue;
+ }
+ }
+
+ public bool IsDone
+ {
+ get
+ {
+ return !_processStack.Any();
+ }
+ }
+
+ // Returns true if it needs to be called again
+ public bool Pump()
+ {
+ Assert(_processStack.Any());
+ Assert(_returnValue == null);
+
+ var topWorker = _processStack.Peek();
+
+ bool isFinished;
+
+ try
+ {
+ isFinished = !topWorker.MoveNext();
+ }
+ catch (CoRoutineException e)
+ {
+ var objectTrace = GenerateObjectTrace(_finished.Concat(_processStack));
+
+ if (!objectTrace.Any())
+ {
+ throw e;
+ }
+
+ throw new CoRoutineException(objectTrace.Concat(e.ObjectTrace).ToList(), e.InnerException);
+ }
+ catch (Exception e)
+ {
+ var objectTrace = GenerateObjectTrace(_finished.Concat(_processStack));
+
+ if (!objectTrace.Any())
+ {
+ throw e;
+ }
+
+ throw new CoRoutineException(objectTrace, e);
+ }
+
+ if (isFinished)
+ {
+ _finished.Add(_processStack.Pop());
+ }
+
+ if (topWorker.Current != null && typeof(IEnumerator).IsAssignableFrom(topWorker.Current.GetType()))
+ {
+ _processStack.Push((IEnumerator)topWorker.Current);
+ }
+
+ if (!_processStack.Any())
+ {
+ _returnValue = topWorker.Current;
+ }
+
+ return _processStack.Any();
+ }
+
+ static List GenerateObjectTrace(IEnumerable enumerators)
+ {
+ var objTrace = new List();
+
+ foreach (var enumerator in enumerators)
+ {
+ var field = enumerator.GetType().GetField("<>4__this", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
+
+ if (field == null)
+ {
+ // Mono seems to use a different name
+ field = enumerator.GetType().GetField("<>f__this", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
+
+ if (field == null)
+ {
+ continue;
+ }
+ }
+
+ var obj = field.GetValue(enumerator);
+
+ if (obj == null)
+ {
+ continue;
+ }
+
+ var objType = obj.GetType();
+
+ if (!objTrace.Any() || objType != objTrace.Last())
+ {
+ objTrace.Add(objType);
+ }
+ }
+
+ objTrace.Reverse();
+ return objTrace;
+ }
+
+ static void Assert(bool condition)
+ {
+ if (!condition)
+ {
+ throw new AssertException("Assert hit in CoRoutine!");
+ }
+ }
+
+ static void Assert(bool condition, string message)
+ {
+ if (!condition)
+ {
+ throw new AssertException(
+ "Assert hit in CoRoutine! " + message);
+ }
+ }
+
+ public class TimeoutException : Exception
+ {
+ }
+
+ public class AssertException : Exception
+ {
+ public AssertException(string message)
+ : base(message)
+ {
+ }
+ }
+
+ public class CoRoutineException : Exception
+ {
+ readonly List _objTrace;
+
+ public CoRoutineException(List objTrace, Exception innerException)
+ : base(CreateMessage(objTrace), innerException)
+ {
+ _objTrace = objTrace;
+ }
+
+ static string CreateMessage(List objTrace)
+ {
+ var result = new StringBuilder();
+
+ foreach (var objType in objTrace)
+ {
+ if (result.Length != 0)
+ {
+ result.Append(" -> ");
+ }
+
+ result.Append(objType.Name);
+ }
+
+ result.AppendLine();
+ return "Coroutine Object Trace: " + result.ToString();
+ }
+
+ public List ObjectTrace
+ {
+ get
+ {
+ return _objTrace;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Data/Containers/LobbyInfo.cs b/FusionAPI/Data/Containers/LobbyInfo.cs
index ba664e3..b7d7ef0 100644
--- a/FusionAPI/Data/Containers/LobbyInfo.cs
+++ b/FusionAPI/Data/Containers/LobbyInfo.cs
@@ -11,7 +11,7 @@ public class LobbyInfo
// Info
[JsonPropertyName("lobbyID")]
- public ulong LobbyID { get; set; } = 0;
+ public string LobbyID { get; set; } = "0";
[JsonPropertyName("lobbyCode")]
public string? LobbyCode { get; set; } = null;
diff --git a/FusionAPI/Data/Containers/PlayerInfo.cs b/FusionAPI/Data/Containers/PlayerInfo.cs
index 811be7c..7ef818d 100644
--- a/FusionAPI/Data/Containers/PlayerInfo.cs
+++ b/FusionAPI/Data/Containers/PlayerInfo.cs
@@ -8,7 +8,7 @@ namespace FusionAPI.Data.Containers;
public class PlayerInfo()
{
[JsonPropertyName("platformID")]
- public ulong PlatformID { get; set; }
+ public string PlatformID { get; set; }
[JsonPropertyName("username")]
public string? Username { get; set; }
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/CallbackHelper.cs b/FusionAPI/Dependencies/EOSSDK/Core/CallbackHelper.cs
new file mode 100644
index 0000000..32c650d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/CallbackHelper.cs
@@ -0,0 +1,301 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Linq;
+
+namespace Epic.OnlineServices
+{
+ public sealed partial class Helper
+ {
+ ///
+ /// Adds a callback to the wrapper.
+ ///
+ /// The generated client data pointer.
+ /// The client data of the callback.
+ /// The delegates to add.
+ internal static void AddCallback(out IntPtr clientDataPointer, object clientData, params Delegate[] delegates)
+ {
+ clientDataPointer = AddClientData(clientData);
+
+ lock (s_Callbacks)
+ {
+ s_Callbacks.Add(clientDataPointer, new DelegateHolder(delegates));
+ }
+ }
+
+ ///
+ /// Adds a callback to the wrapper with an existing client data pointer.
+ ///
+ /// The client data pointer.
+ /// The delegates to add.
+ internal static void AddCallback(IntPtr clientDataPointer, params Delegate[] delegates)
+ {
+ lock (s_Callbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_Callbacks.TryGetValue(clientDataPointer, out delegateHolder))
+ {
+ delegateHolder.Delegates.AddRange(delegates.Where(d => d != null));
+ }
+ }
+ }
+
+ ///
+ /// Removes a callback from the wrapper.
+ ///
+ /// The client data pointer of the callback.
+ internal static void RemoveCallback(IntPtr clientDataPointer)
+ {
+ lock (s_Callbacks)
+ {
+ s_Callbacks.Remove(clientDataPointer);
+ }
+
+ RemoveClientData(clientDataPointer);
+ }
+
+ ///
+ /// Tries to get the callback associated with the given internal callback info.
+ ///
+ /// The internal callback info type.
+ /// The callback type.
+ /// The callback info type.
+ /// The internal callback info.
+ /// The callback associated with the internal callback info.
+ /// The callback info.
+ /// Whether the callback was successfully retrieved.
+ internal static bool TryGetCallback(ref TCallbackInfoInternal callbackInfoInternal, out TCallback callback, out TCallbackInfo callbackInfo)
+ where TCallbackInfoInternal : struct, ICallbackInfoInternal, IGettable
+ where TCallback : class
+ where TCallbackInfo : struct, ICallbackInfo
+ {
+ IntPtr clientDataPointer;
+ Get(ref callbackInfoInternal, out callbackInfo, out clientDataPointer);
+
+ callback = null;
+
+ lock (s_Callbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_Callbacks.TryGetValue(clientDataPointer, out delegateHolder))
+ {
+ callback = delegateHolder.Delegates.FirstOrDefault(d => d.GetType() == typeof(TCallback)) as TCallback;
+ return callback != null;
+ }
+ }
+
+ return false;
+ }
+
+ ///
+ /// Tries to get the callback associated with the given internal callback info, and then removes it from the wrapper if applicable.
+ /// Single-use callbacks will be cleaned up by this function.
+ ///
+ /// The internal callback info type.
+ /// The callback type.
+ /// The callback info type.
+ /// The internal callback info.
+ /// The callback associated with the internal callback info.
+ /// The callback info.
+ /// Whether the callback was successfully retrieved.
+ internal static bool TryGetAndRemoveCallback(ref TCallbackInfoInternal callbackInfoInternal, out TCallback callback, out TCallbackInfo callbackInfo)
+ where TCallbackInfoInternal : struct, ICallbackInfoInternal, IGettable
+ where TCallback : class
+ where TCallbackInfo : struct, ICallbackInfo
+ {
+ IntPtr clientDataPointer;
+ Get(ref callbackInfoInternal, out callbackInfo, out clientDataPointer);
+
+ callback = null;
+ ulong? notificationId = null;
+
+ lock (s_Callbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_Callbacks.TryGetValue(clientDataPointer, out delegateHolder))
+ {
+ callback = delegateHolder.Delegates.FirstOrDefault(d => d.GetType() == typeof(TCallback)) as TCallback;
+ notificationId = delegateHolder.NotificationId;
+ }
+ }
+
+ if (callback != null)
+ {
+ // If this delegate was added with an AddNotify, we should only ever remove it on RemoveNotify.
+ if (notificationId.HasValue)
+ {
+ }
+
+ // If the operation is complete, it's safe to remove.
+ else if (callbackInfo.GetResultCode().HasValue && Common.IsOperationComplete(callbackInfo.GetResultCode().Value))
+ {
+ RemoveCallback(clientDataPointer);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ ///
+ /// Tries to get the struct callback associated with the given internal callback info.
+ ///
+ /// The internal callback info type.
+ /// The callback type.
+ /// The callback info type.
+ /// The internal callback info.
+ /// The callback associated with the internal callback info.
+ /// The callback info.
+ /// Whether the callback was successfully retrieved.
+ internal static bool TryGetStructCallback(ref TCallbackInfoInternal callbackInfoInternal, out TCallback callback, out TCallbackInfo callbackInfo)
+ where TCallbackInfoInternal : struct, ICallbackInfoInternal, IGettable
+ where TCallback : class
+ where TCallbackInfo : struct
+ {
+ IntPtr clientDataPointer;
+ Get(ref callbackInfoInternal, out callbackInfo, out clientDataPointer);
+
+ callback = null;
+ lock (s_Callbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_Callbacks.TryGetValue(clientDataPointer, out delegateHolder))
+ {
+ callback = delegateHolder.Delegates.FirstOrDefault(d => d.GetType() == typeof(TCallback)) as TCallback;
+ if (callback != null)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ ///
+ /// Removes a callback from the wrapper by an associated notification id.
+ ///
+ /// The notification id associated with the callback.
+ internal static void RemoveCallbackByNotificationId(ulong notificationId)
+ {
+ IntPtr clientDataPointer = IntPtr.Zero;
+
+ lock (s_Callbacks)
+ {
+ clientDataPointer = s_Callbacks.SingleOrDefault(pair => pair.Value.NotificationId.HasValue && pair.Value.NotificationId == notificationId).Key;
+ }
+
+ RemoveCallback(clientDataPointer);
+ }
+
+ ///
+ /// Adds a static callback to the wrapper.
+ ///
+ /// The key of the callback.
+ /// The public delegate of the callback.
+ /// The private delegate of the callback
+ internal static void AddStaticCallback(string key, params Delegate[] delegates)
+ {
+ lock (s_StaticCallbacks)
+ {
+ s_StaticCallbacks.Remove(key);
+ s_StaticCallbacks.Add(key, new DelegateHolder(delegates));
+ }
+ }
+
+ ///
+ /// Tries to get the static callback associated with the given key.
+ ///
+ /// The callback type.
+ /// The key of the callback.
+ /// The callback associated with the key.
+ /// Whether the callback was successfully retrieved.
+ internal static bool TryGetStaticCallback(string key, out TCallback callback)
+ where TCallback : class
+ {
+ callback = null;
+
+ lock (s_StaticCallbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_StaticCallbacks.TryGetValue(key, out delegateHolder))
+ {
+ callback = delegateHolder.Delegates.FirstOrDefault(d => d.GetType() == typeof(TCallback)) as TCallback;
+ if (callback != null)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ ///
+ /// Assigns a notification id to a callback by client data pointer associated with the callback.
+ ///
+ /// The client data address associated with the callback.
+ /// The notification id to assign.
+ internal static void AssignNotificationIdToCallback(IntPtr clientDataPointer, ulong notificationId)
+ {
+ if (notificationId == 0)
+ {
+ RemoveCallback(clientDataPointer);
+ return;
+ }
+
+ lock (s_Callbacks)
+ {
+ DelegateHolder delegateHolder;
+ if (s_Callbacks.TryGetValue(clientDataPointer, out delegateHolder))
+ {
+ delegateHolder.NotificationId = notificationId;
+ }
+ }
+ }
+
+ ///
+ /// Adds client data to the wrapper.
+ ///
+ /// The client data to add.
+ /// The pointer of the added client data.
+ private static IntPtr AddClientData(object clientData)
+ {
+ lock (s_ClientDatas)
+ {
+ long clientDataId = ++s_LastClientDataId;
+ IntPtr clientDataPointer = new IntPtr(clientDataId);
+ s_ClientDatas.Add(clientDataPointer, clientData);
+ return clientDataPointer;
+ }
+ }
+
+ ///
+ /// Removes a client data from the wrapper.
+ ///
+ /// The pointer of the client data to remove.
+ private static void RemoveClientData(IntPtr clientDataPointer)
+ {
+ lock (s_ClientDatas)
+ {
+ s_ClientDatas.Remove(clientDataPointer);
+ }
+ }
+
+ ///
+ /// Gets client data by its pointer.
+ ///
+ /// The pointer of the client data.
+ /// Th client data associated with the pointer.
+ private static object GetClientData(IntPtr clientDataPointer)
+ {
+ lock (s_ClientDatas)
+ {
+ object clientData;
+ s_ClientDatas.TryGetValue(clientDataPointer, out clientData);
+ return clientData;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/Common.cs b/FusionAPI/Dependencies/EOSSDK/Core/Common.cs
new file mode 100644
index 0000000..5501dc6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/Common.cs
@@ -0,0 +1,88 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#if DEBUG
+ #define EOS_DEBUG
+#endif
+
+#if UNITY_EDITOR
+ #define EOS_EDITOR
+#endif
+
+#if UNITY_EDITOR || UNITY_STANDALONE || UNITY_IOS || UNITY_ANDROID
+ #define EOS_UNITY
+#endif
+
+#if UNITY_EDITOR_WIN
+ #define EOS_PLATFORM_WINDOWS_64
+#elif UNITY_STANDALONE_WIN
+ #if UNITY_64
+ #define EOS_PLATFORM_WINDOWS_64
+ #else
+ #define EOS_PLATFORM_WINDOWS_32
+ #endif
+
+#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
+ #define EOS_PLATFORM_OSX
+
+#elif UNITY_EDITOR_LINUX || UNITY_STANDALONE_LINUX
+ #define EOS_PLATFORM_LINUX
+
+#elif UNITY_IOS || __IOS__
+ #define EOS_PLATFORM_IOS
+
+#elif UNITY_ANDROID || __ANDROID__
+ #define EOS_PLATFORM_ANDROID
+
+#endif
+
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ public sealed partial class Common
+ {
+ public const string LIBRARY_NAME =
+ #if EOS_PLATFORM_WINDOWS_32 && EOS_UNITY
+ "EOSSDK-Win32-Shipping"
+ #elif EOS_PLATFORM_WINDOWS_32
+ "EOSSDK-Win32-Shipping.dll"
+
+ #elif EOS_PLATFORM_WINDOWS_64 && EOS_UNITY
+ "EOSSDK-Win64-Shipping"
+ #elif EOS_PLATFORM_WINDOWS_64
+ "EOSSDK-Win64-Shipping.dll"
+
+ #elif EOS_PLATFORM_OSX && EOS_UNITY
+ "libEOSSDK-Mac-Shipping"
+ #elif EOS_PLATFORM_OSX
+ "libEOSSDK-Mac-Shipping.dylib"
+
+ #elif EOS_PLATFORM_LINUX && EOS_UNITY
+ "libEOSSDK-Linux-Shipping"
+ #elif EOS_PLATFORM_LINUX
+ "libEOSSDK-Linux-Shipping.so"
+
+ #elif EOS_PLATFORM_IOS && EOS_UNITY && EOS_EDITOR
+ "EOSSDK"
+ #elif EOS_PLATFORM_IOS
+ "EOSSDK.framework/EOSSDK"
+
+ #elif EOS_PLATFORM_ANDROID
+ "EOSSDK"
+
+ #else
+ #error Unable to determine name of the EOSSDK library. Ensure your project defines the correct EOS symbol for your platform, such as EOS_PLATFORM_WINDOWS_64, or define it here if it hasn't been already.
+ "EOSSDK-UnknownPlatform-Shipping"
+
+ #endif
+ ;
+
+ public const CallingConvention LIBRARY_CALLING_CONVENTION =
+ #if EOS_PLATFORM_WINDOWS_32
+ CallingConvention.StdCall
+ #else
+ CallingConvention.Cdecl
+ #endif
+ ;
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/ConvertHelper.cs b/FusionAPI/Dependencies/EOSSDK/Core/ConvertHelper.cs
new file mode 100644
index 0000000..e431f11
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/ConvertHelper.cs
@@ -0,0 +1,194 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Linq;
+using System.Text;
+
+namespace Epic.OnlineServices
+{
+ public sealed partial class Helper
+ {
+ ///
+ /// Converts an to a of the specified .
+ ///
+ /// The type of to convert to.
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(IntPtr from, out THandle to)
+ where THandle : Handle, new()
+ {
+ to = null;
+
+ if (from != IntPtr.Zero)
+ {
+ to = new THandle();
+ to.InnerHandle = from;
+ }
+ }
+
+ ///
+ /// Converts a to an .
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(Handle from, out IntPtr to)
+ {
+ to = IntPtr.Zero;
+
+ if (from != null)
+ {
+ to = from.InnerHandle;
+ }
+ }
+
+ ///
+ /// Converts from a [] to a .
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(byte[] from, out Utf8String to)
+ {
+ to = null;
+
+ if (from == null)
+ {
+ return;
+ }
+
+ to = Encoding.ASCII.GetString(from, 0, GetAnsiStringLength(from));
+ }
+
+ ///
+ /// Converts from a of the specified length to a [].
+ ///
+ /// The value to convert from.
+ /// The length to convert from.
+ /// The converted value.
+ private static void Convert(string from, out byte[] to, int fromLength)
+ {
+ if (from == null)
+ {
+ from = "";
+ }
+
+ to = new byte[fromLength];
+ ASCIIEncoding.ASCII.GetBytes(from, 0, from.Length, to, 0);
+ to[from.Length] = 0; // Null terminator at the end'\0'
+ }
+
+ ///
+ /// Converts from a [] to an .
+ /// Outputs the length of the [].
+ ///
+ /// The type of to convert from.
+ /// The value to convert from.
+ /// The converted value; the length of the [].
+ private static void Convert(TArray[] from, out int to)
+ {
+ to = 0;
+
+ if (from != null)
+ {
+ to = from.Length;
+ }
+ }
+
+ ///
+ /// Converts from a [] to an .
+ /// Outputs the length of the [].
+ ///
+ /// The type of to convert from.
+ /// The value to convert from.
+ /// The converted value; the length of the [].
+ private static void Convert(TArray[] from, out uint to)
+ {
+ to = 0;
+
+ if (from != null)
+ {
+ to = (uint)from.Length;
+ }
+ }
+
+ ///
+ /// Converts from an to an .
+ /// Outputs the length of the .
+ ///
+ /// The type of the .
+ /// The value to convert from.
+ /// The converted value; the length of the .
+ private static void Convert(ArraySegment from, out int to)
+ {
+ to = from.Count;
+ }
+
+ ///
+ /// Converts from an to an .
+ /// Outputs the length of the .
+ ///
+ /// The type of the .
+ /// The value to convert from.
+ /// The converted value; the length of the .
+ private static void Convert(ArraySegment from, out uint to)
+ {
+ to = (uint)from.Count;
+ }
+
+ ///
+ /// Converts from an to a .
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(int from, out bool to)
+ {
+ to = from != 0;
+ }
+
+ ///
+ /// Converts from an to an .
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(bool from, out int to)
+ {
+ to = from ? 1 : 0;
+ }
+
+ ///
+ /// Converts from a ? to a .
+ /// Outputs the number of seconds represented by the ? as a unix timestamp.
+ /// A ? equates to a value of -1, which means unset in the SDK.
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(DateTimeOffset? from, out long to)
+ {
+ to = -1;
+
+ if (from.HasValue)
+ {
+ DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ long unixTimestampTicks = (from.Value.UtcDateTime - unixStart).Ticks;
+ long unixTimestampSeconds = unixTimestampTicks / TimeSpan.TicksPerSecond;
+ to = unixTimestampSeconds;
+ }
+ }
+
+ ///
+ /// Converts from a to a ?.
+ ///
+ /// The value to convert from.
+ /// The converted value.
+ private static void Convert(long from, out DateTimeOffset? to)
+ {
+ to = null;
+
+ if (from >= 0)
+ {
+ DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+ long unixTimeStampTicks = from * TimeSpan.TicksPerSecond;
+ to = new DateTimeOffset(unixStart.Ticks + unixTimeStampTicks, TimeSpan.Zero);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/Extensions.cs b/FusionAPI/Dependencies/EOSSDK/Core/Extensions.cs
new file mode 100644
index 0000000..5418864
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/Extensions.cs
@@ -0,0 +1,40 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices
+{
+ public static class Extensions
+ {
+ ///
+ /// Checks whether the given result indicates that the operation has completed. Some operations may callback with a result indicating that they will callback again.
+ ///
+ /// The result to check.
+ /// Whether the operation has completed or not.
+ public static bool IsOperationComplete(this Result result)
+ {
+ return Common.IsOperationComplete(result);
+ }
+
+ ///
+ /// Converts a byte array into a hex string, e.g. "A56904FF".
+ ///
+ /// The byte array to convert.
+ /// A hex string, e.g. "A56904FF".
+ public static Utf8String ToHexString(this byte[] byteArray)
+ {
+ var arraySegment = new ArraySegment(byteArray);
+ return Common.ToString(arraySegment);
+ }
+
+ ///
+ /// Converts an array segment into a hex string, e.g. "A56904FF".
+ ///
+ /// The array segment to convert.
+ /// A hex string, e.g. "A56904FF".
+ public static Utf8String ToHexString(this ArraySegment arraySegment)
+ {
+ return Common.ToString(arraySegment);
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/GetHelper.cs b/FusionAPI/Dependencies/EOSSDK/Core/GetHelper.cs
new file mode 100644
index 0000000..6c6a31d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/GetHelper.cs
@@ -0,0 +1,214 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ public sealed partial class Helper
+ {
+ internal static void Get(TArray[] from, out int to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(TArray[] from, out uint to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(ArraySegment from, out uint to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(ref TInternal from, out TPublic to)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ from.Get(out to);
+ }
+
+ internal static void Get(ref TInternal from, out TPublic? to)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ TPublic toPublic = default;
+ from.Get(out toPublic);
+ to = toPublic;
+ }
+
+ internal static void Get(T from, out T? to)
+ where T : struct
+ {
+ to = from;
+ }
+
+ internal static void Get(int from, out bool to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(int from, out bool? to)
+ {
+ bool intermediate;
+ Convert(from, out intermediate);
+ to = intermediate;
+ }
+
+ internal static void Get(bool from, out int to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(long from, out DateTimeOffset? to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(IntPtr from, out ArraySegment to, uint arrayLength)
+ {
+ to = new ArraySegment();
+ if (arrayLength != 0)
+ {
+ byte[] bytes = new byte[arrayLength];
+ Marshal.Copy(from, bytes, 0, (int)arrayLength);
+ to = new ArraySegment(bytes);
+ }
+ }
+
+ internal static void Get(IntPtr from, out Utf8String[] to, int arrayLength, bool isArrayItemAllocated)
+ {
+ GetAllocation(from, out to, arrayLength, isArrayItemAllocated);
+ }
+
+ internal static void Get(IntPtr from, out Utf8String[] to, uint arrayLength, bool isArrayItemAllocated)
+ {
+ GetAllocation(from, out to, (int)arrayLength, isArrayItemAllocated);
+ }
+
+ internal static void Get(IntPtr from, out T[] to, uint arrayLength, bool isArrayItemAllocated)
+ where T : struct
+ {
+ GetAllocation(from, out to, (int)arrayLength, isArrayItemAllocated);
+ }
+
+ internal static void Get(IntPtr from, out T[] to, int arrayLength, bool isArrayItemAllocated)
+ where T : struct
+ {
+ GetAllocation(from, out to, arrayLength, isArrayItemAllocated);
+ }
+
+ internal static void Get(IntPtr from, out THandle to)
+ where THandle : Handle, new()
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(IntPtr from, out THandle[] to, uint arrayLength)
+ where THandle : Handle, new()
+ {
+ GetAllocation(from, out to, (int)arrayLength);
+ }
+
+ internal static void Get(IntPtr from, out IntPtr[] to, uint arrayLength)
+ {
+ GetAllocation(from, out to, (int)arrayLength, false);
+ }
+
+ internal static void Get(TInternal[] from, out TPublic[] to)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ to = default;
+
+ if (from != null)
+ {
+ to = new TPublic[from.Length];
+
+ for (int index = 0; index < from.Length; ++index)
+ {
+ from[index].Get(out to[index]);
+ }
+ }
+ }
+
+ internal static void Get(IntPtr from, out TPublic[] to, int arrayLength, bool isArrayItemAllocated)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ TInternal[] fromInternal;
+ Get(from, out fromInternal, arrayLength, isArrayItemAllocated);
+ Get(fromInternal, out to);
+ }
+
+ internal static void Get(IntPtr from, out TPublic[] to, uint arrayLength, bool isArrayItemAllocated)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ Get(from, out to, (int)arrayLength, isArrayItemAllocated);
+ }
+
+ internal static void Get(IntPtr from, out T? to)
+ where T : struct
+ {
+ GetAllocation(from, out to);
+ }
+
+ internal static void Get(byte[] from, out Utf8String to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Get(IntPtr from, out object to)
+ {
+ to = GetClientData(from);
+ }
+
+ internal static void Get(IntPtr from, out Utf8String to)
+ {
+ GetAllocation(from, out to);
+ }
+
+ internal static void Get(IntPtr from, out TPublic to)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ to = default;
+
+ TInternal? fromInternal;
+ Get(from, out fromInternal);
+
+ if (fromInternal.HasValue)
+ {
+ fromInternal.Value.Get(out to);
+ }
+ }
+
+ internal static void Get(IntPtr from, out TPublic? to)
+ where TInternal : struct, IGettable
+ where TPublic : struct
+ {
+ to = default;
+
+ TInternal? fromInternal;
+ Get(from, out fromInternal);
+
+ if (fromInternal.HasValue)
+ {
+ TPublic toPublic;
+ fromInternal.Value.Get(out toPublic);
+
+ to = toPublic;
+ }
+ }
+
+ internal static void Get(ref TInternal from, out TPublic to, out IntPtr clientDataPointer)
+ where TInternal : struct, ICallbackInfoInternal, IGettable
+ where TPublic : struct
+ {
+ from.Get(out to);
+ clientDataPointer = from.ClientDataPointer;
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/Handle.cs b/FusionAPI/Dependencies/EOSSDK/Core/Handle.cs
new file mode 100644
index 0000000..5df4744
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/Handle.cs
@@ -0,0 +1,94 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices
+{
+ ///
+ /// Represents an SDK handle.
+ ///
+ public abstract class Handle : IEquatable, IFormattable
+ {
+ public IntPtr InnerHandle { get; internal set; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public Handle()
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class with the given inner handle.
+ ///
+ public Handle(IntPtr innerHandle)
+ {
+ InnerHandle = innerHandle;
+ }
+
+ public static bool operator ==(Handle left, Handle right)
+ {
+ if (ReferenceEquals(left, null))
+ {
+ if (ReferenceEquals(right, null))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Handle left, Handle right)
+ {
+ return !(left == right);
+ }
+
+ public override bool Equals(object obj)
+ {
+ return Equals(obj as Handle);
+ }
+
+ public override int GetHashCode()
+ {
+ return (int)(0x00010000 + InnerHandle.ToInt64());
+ }
+
+ public bool Equals(Handle other)
+ {
+ if (ReferenceEquals(other, null))
+ {
+ return false;
+ }
+
+ if (ReferenceEquals(this, other))
+ {
+ return true;
+ }
+
+ if (GetType() != other.GetType())
+ {
+ return false;
+ }
+
+ return InnerHandle == other.InnerHandle;
+ }
+
+ public override string ToString()
+ {
+ return InnerHandle.ToString();
+ }
+
+ public virtual string ToString(string format, IFormatProvider formatProvider)
+ {
+ if (format != null)
+ {
+ return InnerHandle.ToString(format);
+ }
+
+ return InnerHandle.ToString();
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/Helper.cs b/FusionAPI/Dependencies/EOSSDK/Core/Helper.cs
new file mode 100644
index 0000000..a40a29e
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/Helper.cs
@@ -0,0 +1,683 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ // In earlier versions of .NET and some versions of unity, IntPtr is not equatable and therefore cannot be used as a key
+ // for dictionaries without causing memory allocations when comparing two IntPtr.
+ // We therefore have to fall back on using an long int representation of pointers.
+ using PointerType = UInt64;
+
+ internal class AllocationException : Exception
+ {
+ public AllocationException(string message)
+ : base(message)
+ {
+ }
+ }
+
+ internal class ExternalAllocationException : AllocationException
+ {
+ public ExternalAllocationException(IntPtr pointer, Type type)
+ : base(string.Format("Attempting to allocate '{0}' over externally allocated memory at {1}", type, pointer.ToString("X")))
+ {
+ }
+ }
+
+ internal class CachedTypeAllocationException : AllocationException
+ {
+ public CachedTypeAllocationException(IntPtr pointer, Type foundType, Type expectedType)
+ : base(string.Format("Cached allocation is '{0}' but expected '{1}' at {2}", foundType, expectedType, pointer.ToString("X")))
+ {
+ }
+ }
+
+ internal class CachedArrayAllocationException : AllocationException
+ {
+ public CachedArrayAllocationException(IntPtr pointer, int foundLength, int expectedLength)
+ : base(string.Format("Cached array allocation has length {0} but expected {1} at {2}", foundLength, expectedLength, pointer.ToString("X")))
+ {
+ }
+ }
+
+ internal class DynamicBindingException : Exception
+ {
+ public DynamicBindingException(string bindingName)
+ : base(string.Format("Failed to hook dynamic binding for '{0}'", bindingName))
+ {
+ }
+ }
+
+ ///
+ /// A helper class that manages memory in the wrapper.
+ ///
+ public sealed partial class Helper
+ {
+ private struct Allocation
+ {
+ public int Size { get; private set; }
+
+ public object Cache { get; private set; }
+
+ public bool? IsArrayItemAllocated { get; private set; }
+
+ public Allocation(int size, object cache, bool? isArrayItemAllocated = null)
+ {
+ Size = size;
+ Cache = cache;
+ IsArrayItemAllocated = isArrayItemAllocated;
+ }
+ }
+ private struct PinnedBuffer
+ {
+ public GCHandle Handle { get; private set; }
+
+ public int RefCount { get; set; }
+
+ public PinnedBuffer(GCHandle handle)
+ {
+ Handle = handle;
+ RefCount = 1;
+ }
+ }
+
+ private class DelegateHolder
+ {
+ public List Delegates { get; private set; } = new List();
+ public ulong? NotificationId { get; set; }
+
+ public DelegateHolder(params Delegate[] delegates)
+ {
+ Delegates.AddRange(delegates.Where(d => d != null));
+ }
+ }
+
+ private static Dictionary s_Allocations = new Dictionary();
+ private static Dictionary s_PinnedBuffers = new Dictionary();
+ private static Dictionary s_Callbacks = new Dictionary();
+ private static Dictionary s_StaticCallbacks = new Dictionary();
+ private static long s_LastClientDataId = 0;
+ private static Dictionary s_ClientDatas = new Dictionary();
+
+ ///
+ /// Gets the number of unmanaged allocations and other stored values in the wrapper. Use this to find leaks related to the usage of wrapper code.
+ ///
+ /// The number of unmanaged allocations currently active within the wrapper.
+ public static int GetAllocationCount()
+ {
+ return s_Allocations.Count + s_PinnedBuffers.Aggregate(0, (acc, x) => acc + x.Value.RefCount) + s_Callbacks.Count + s_ClientDatas.Count;
+ }
+
+ internal static void Copy(byte[] from, IntPtr to)
+ {
+ if (from != null && to != IntPtr.Zero)
+ {
+ Marshal.Copy(from, 0, to, from.Length);
+ }
+ }
+
+ internal static void Copy(ArraySegment from, IntPtr to)
+ {
+ if (from.Count != 0 && to != IntPtr.Zero)
+ {
+ Marshal.Copy(from.Array, from.Offset, to, from.Count);
+ }
+ }
+
+ internal static void Dispose(ref IntPtr value)
+ {
+ RemoveAllocation(ref value);
+ RemovePinnedBuffer(ref value);
+ value = default;
+ }
+
+ internal static void Dispose(ref IDisposable disposable)
+ {
+ disposable?.Dispose();
+ }
+
+ internal static void Dispose(ref TDisposable disposable)
+ where TDisposable : struct, IDisposable
+ {
+ disposable.Dispose();
+ }
+
+ private static int GetAnsiStringLength(byte[] bytes)
+ {
+ int length = 0;
+ foreach (byte currentByte in bytes)
+ {
+ if (currentByte == 0)
+ {
+ break;
+ }
+
+ ++length;
+ }
+
+ return length;
+ }
+
+ private static int GetAnsiStringLength(IntPtr pointer)
+ {
+ int length = 0;
+ while (Marshal.ReadByte(pointer, length) != 0)
+ {
+ ++length;
+ }
+
+ return length;
+ }
+ private static void GetAllocation(IntPtr source, out T target)
+ {
+ target = default;
+
+ if (source == IntPtr.Zero)
+ {
+ return;
+ }
+
+ object allocationCache;
+ if (TryGetAllocationCache(source, out allocationCache))
+ {
+ if (allocationCache != null)
+ {
+ if (allocationCache.GetType() == typeof(T))
+ {
+ target = (T)allocationCache;
+ return;
+ }
+ else
+ {
+ throw new CachedTypeAllocationException(source, allocationCache.GetType(), typeof(T));
+ }
+ }
+ }
+
+ target = (T)Marshal.PtrToStructure(source, typeof(T));
+ }
+
+ private static void GetAllocation(IntPtr source, out T? target)
+ where T : struct
+ {
+ target = default;
+
+ if (source == IntPtr.Zero)
+ {
+ return;
+ }
+
+ // If this is an allocation containing cached data, we should be able to fetch it from the cache
+ object allocationCache;
+ if (TryGetAllocationCache(source, out allocationCache))
+ {
+ if (allocationCache != null)
+ {
+ if (allocationCache.GetType() == typeof(T))
+ {
+ target = (T?)allocationCache;
+ return;
+ }
+ else
+ {
+ throw new CachedTypeAllocationException(source, allocationCache.GetType(), typeof(T));
+ }
+ }
+ }
+
+ if (typeof(T).IsEnum)
+ {
+ target = (T)Marshal.PtrToStructure(source, Enum.GetUnderlyingType(typeof(T)));
+ }
+ else
+ {
+ target = (T?)Marshal.PtrToStructure(source, typeof(T));
+ }
+ }
+
+ private static void GetAllocation(IntPtr source, out THandle[] target, int arrayLength)
+ where THandle : Handle, new()
+ {
+ target = null;
+
+ if (source == IntPtr.Zero)
+ {
+ return;
+ }
+
+ // If this is an allocation containing cached data, we should be able to fetch it from the cache
+ object allocationCache;
+
+ if (TryGetAllocationCache(source, out allocationCache))
+ {
+ if (allocationCache != null)
+ {
+ if (allocationCache.GetType() == typeof(THandle[]))
+ {
+ var cachedArray = (Array)allocationCache;
+ if (cachedArray.Length == arrayLength)
+ {
+ target = cachedArray as THandle[];
+ return;
+ }
+ else
+ {
+ throw new CachedArrayAllocationException(source, cachedArray.Length, arrayLength);
+ }
+ }
+ else
+ {
+ throw new CachedTypeAllocationException(source, allocationCache.GetType(), typeof(THandle[]));
+ }
+ }
+ }
+
+ var itemSize = Marshal.SizeOf(typeof(IntPtr));
+
+ List items = new List();
+ for (int itemIndex = 0; itemIndex < arrayLength; ++itemIndex)
+ {
+ IntPtr itemPointer = new IntPtr(source.ToInt64() + itemIndex * itemSize);
+ itemPointer = Marshal.ReadIntPtr(itemPointer);
+ THandle item;
+ Convert(itemPointer, out item);
+ items.Add(item);
+ }
+
+ target = items.ToArray();
+ }
+
+ private static void GetAllocation(IntPtr from, out T[] to, int arrayLength, bool isArrayItemAllocated)
+ {
+ to = null;
+
+ if (from == IntPtr.Zero)
+ {
+ return;
+ }
+
+ // If this is an allocation containing cached data, we should be able to fetch it from the cache
+ object allocationCache;
+ if (TryGetAllocationCache(from, out allocationCache))
+ {
+ if (allocationCache != null)
+ {
+ if (allocationCache.GetType() == typeof(T[]))
+ {
+ var cachedArray = (Array)allocationCache;
+ if (cachedArray.Length == arrayLength)
+ {
+ to = cachedArray as T[];
+ return;
+ }
+ else
+ {
+ throw new CachedArrayAllocationException(from, cachedArray.Length, arrayLength);
+ }
+ }
+ else
+ {
+ throw new CachedTypeAllocationException(from, allocationCache.GetType(), typeof(T[]));
+ }
+ }
+ }
+
+ int itemSize;
+ if (isArrayItemAllocated)
+ {
+ itemSize = Marshal.SizeOf(typeof(IntPtr));
+ }
+ else
+ {
+ itemSize = Marshal.SizeOf(typeof(T));
+ }
+
+ List items = new List();
+ for (int itemIndex = 0; itemIndex < arrayLength; ++itemIndex)
+ {
+ IntPtr itemPointer = new IntPtr(from.ToInt64() + itemIndex * itemSize);
+
+ if (isArrayItemAllocated)
+ {
+ itemPointer = Marshal.ReadIntPtr(itemPointer);
+ }
+
+ T item;
+ if (typeof(T) == typeof(Utf8String))
+ {
+ Utf8String str;
+ GetAllocation(itemPointer, out str);
+ item = (T)(object)(str);
+ }
+ else
+ {
+ GetAllocation(itemPointer, out item);
+ }
+ items.Add(item);
+ }
+
+ to = items.ToArray();
+ }
+
+ private static void GetAllocation(IntPtr source, out Utf8String target)
+ {
+ target = null;
+
+ if (source == IntPtr.Zero)
+ {
+ return;
+ }
+
+ // C style strlen
+ int length = GetAnsiStringLength(source);
+
+ // +1 byte for the null terminator.
+ byte[] bytes = new byte[length + 1];
+ Marshal.Copy(source, bytes, 0, length + 1);
+
+ target = new Utf8String(bytes);
+ }
+
+ internal static IntPtr AddAllocation(int size)
+ {
+ if (size == 0)
+ {
+ return IntPtr.Zero;
+ }
+
+ IntPtr pointer = Marshal.AllocHGlobal(size);
+ Marshal.WriteByte(pointer, 0, 0);
+
+ lock (s_Allocations)
+ {
+ s_Allocations.Add((PointerType)pointer, new Allocation(size, null));
+ }
+
+ return pointer;
+ }
+
+ internal static IntPtr AddAllocation(uint size)
+ {
+ return AddAllocation((int)size);
+ }
+
+ private static IntPtr AddAllocation(int size, T cache)
+ {
+ if (size == 0 || cache == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ IntPtr pointer = Marshal.AllocHGlobal(size);
+ Marshal.StructureToPtr(cache, pointer, false);
+
+ lock (s_Allocations)
+ {
+ s_Allocations.Add((PointerType)pointer, new Allocation(size, cache));
+ }
+
+ return pointer;
+ }
+
+ private static IntPtr AddAllocation(int size, T[] cache, bool? isArrayItemAllocated)
+ {
+ if (size == 0 || cache == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ IntPtr pointer = Marshal.AllocHGlobal(size);
+ Marshal.WriteByte(pointer, 0, 0);
+
+ lock (s_Allocations)
+ {
+ s_Allocations.Add((PointerType)pointer, new Allocation(size, cache, isArrayItemAllocated));
+ }
+
+ return pointer;
+ }
+
+ private static IntPtr AddAllocation(T[] array, bool isArrayItemAllocated)
+ {
+ if (array == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ int itemSize;
+ if (isArrayItemAllocated || typeof(T).BaseType == typeof(Handle))
+ {
+ itemSize = Marshal.SizeOf(typeof(IntPtr));
+ }
+ else
+ {
+ itemSize = Marshal.SizeOf(typeof(T));
+ }
+
+ IntPtr newArrayPointer = AddAllocation(array.Length * itemSize, array, isArrayItemAllocated);
+
+ for (int itemIndex = 0; itemIndex < array.Length; ++itemIndex)
+ {
+ var item = (T)array.GetValue(itemIndex);
+
+ if (isArrayItemAllocated)
+ {
+ IntPtr newItemPointer;
+ if (typeof(T) == typeof(Utf8String))
+ {
+ newItemPointer = AddPinnedBuffer((Utf8String)(object)item);
+ }
+ else
+ {
+ newItemPointer = AddAllocation(Marshal.SizeOf(typeof(T)), item);
+ }
+
+ // Copy the item's pointer into the array
+ IntPtr itemPointer = new IntPtr(newArrayPointer.ToInt64() + itemIndex * itemSize);
+ Marshal.StructureToPtr(newItemPointer, itemPointer, false);
+ }
+ else
+ {
+ // Copy the data straight into memory
+ IntPtr itemPointer = new IntPtr(newArrayPointer.ToInt64() + itemIndex * itemSize);
+ if (typeof(T).BaseType == typeof(Handle))
+ {
+ IntPtr newItemPointer;
+ Convert((Handle)(object)item, out newItemPointer);
+ Marshal.StructureToPtr(newItemPointer, itemPointer, false);
+ }
+ else
+ {
+ Marshal.StructureToPtr(item, itemPointer, false);
+ }
+ }
+ }
+
+ return newArrayPointer;
+ }
+
+ private static void RemoveAllocation(ref IntPtr pointer)
+ {
+ if (pointer == IntPtr.Zero)
+ {
+ return;
+ }
+
+ Allocation allocation;
+ lock (s_Allocations)
+ {
+ if (!s_Allocations.TryGetValue((PointerType)pointer, out allocation))
+ {
+ return;
+ }
+
+ s_Allocations.Remove((PointerType)pointer);
+ }
+
+ // If the allocation is an array, dispose and release its items as needbe.
+ if (allocation.IsArrayItemAllocated.HasValue)
+ {
+ int itemSize;
+ if (allocation.IsArrayItemAllocated.Value || allocation.Cache.GetType().GetElementType().BaseType == typeof(Handle))
+ {
+ itemSize = Marshal.SizeOf(typeof(IntPtr));
+ }
+ else
+ {
+ itemSize = Marshal.SizeOf(allocation.Cache.GetType().GetElementType());
+ }
+
+ var array = allocation.Cache as Array;
+ for (int itemIndex = 0; itemIndex < array.Length; ++itemIndex)
+ {
+ if (allocation.IsArrayItemAllocated.Value)
+ {
+ var itemPointer = new IntPtr(pointer.ToInt64() + itemIndex * itemSize);
+ itemPointer = Marshal.ReadIntPtr(itemPointer);
+ Dispose(ref itemPointer);
+ }
+ else
+ {
+ var item = array.GetValue(itemIndex);
+ if (item is IDisposable)
+ {
+ var disposable = item as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+ }
+ }
+ }
+
+ if (allocation.Cache is IDisposable)
+ {
+ var disposable = allocation.Cache as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+
+ Marshal.FreeHGlobal(pointer);
+ pointer = IntPtr.Zero;
+ }
+
+ private static bool TryGetAllocationCache(IntPtr pointer, out object cache)
+ {
+ cache = null;
+
+ lock (s_Allocations)
+ {
+ Allocation allocation;
+ if (s_Allocations.TryGetValue((PointerType)pointer, out allocation))
+ {
+ cache = allocation.Cache;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private static IntPtr AddPinnedBuffer(byte[] buffer, int offset)
+ {
+ if (buffer == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
+ PointerType pointer = (PointerType) Marshal.UnsafeAddrOfPinnedArrayElement(buffer, offset);
+
+ lock (s_PinnedBuffers)
+ {
+ // If the item is already pinned, increase the reference count.
+ if (s_PinnedBuffers.ContainsKey(pointer))
+ {
+ // Since this is a structure, need to copy to modify the element.
+ PinnedBuffer pinned = s_PinnedBuffers[pointer];
+ pinned.RefCount++;
+ s_PinnedBuffers[pointer] = pinned;
+ }
+ else
+ {
+ s_PinnedBuffers.Add(pointer, new PinnedBuffer(handle));
+ }
+
+ return (IntPtr)pointer;
+ }
+ }
+
+ private static IntPtr AddPinnedBuffer(Utf8String str)
+ {
+ if (str == null || str.Bytes == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ return AddPinnedBuffer(str.Bytes, 0);
+ }
+
+ internal static IntPtr AddPinnedBuffer(ArraySegment array)
+ {
+ if (array == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ return AddPinnedBuffer(array.Array, array.Offset);
+ }
+
+ internal static IntPtr AddPinnedBuffer(byte[] array)
+ {
+ if (array == null)
+ {
+ return IntPtr.Zero;
+ }
+
+ return AddPinnedBuffer(array, 0);
+ }
+
+ private static void RemovePinnedBuffer(ref IntPtr pointer)
+ {
+ if (pointer == IntPtr.Zero)
+ {
+ return;
+ }
+
+ lock (s_PinnedBuffers)
+ {
+ PinnedBuffer pinnedBuffer;
+ PointerType pointerKey = (PointerType)pointer;
+ if (s_PinnedBuffers.TryGetValue(pointerKey, out pinnedBuffer))
+ {
+ // Deref the allocation.
+ pinnedBuffer.RefCount--;
+
+ // If the reference count is zero, remove the allocation from the list of tracked allocations.
+ if (pinnedBuffer.RefCount == 0)
+ {
+ s_PinnedBuffers.Remove(pointerKey);
+
+ // We only call free on the handle when the last reference has been dropped.
+ // Otherwise, the buffer is immediately unpinned despite the fact that there are still references to it.
+ pinnedBuffer.Handle.Free();
+ }
+ else
+ {
+ // Copy back the structure with the decreased reference count.
+ s_PinnedBuffers[pointerKey] = pinnedBuffer;
+ }
+ }
+ }
+
+ pointer = IntPtr.Zero;
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/ICallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Core/ICallbackInfo.cs
new file mode 100644
index 0000000..fa63273
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/ICallbackInfo.cs
@@ -0,0 +1,17 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices
+{
+ internal interface ICallbackInfo
+ {
+ object GetClientData();
+ Result? GetResultCode();
+ }
+
+ internal interface ICallbackInfoInternal
+ {
+ IntPtr ClientDataPointer { get; }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/IGettable.cs b/FusionAPI/Dependencies/EOSSDK/Core/IGettable.cs
new file mode 100644
index 0000000..721f30f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/IGettable.cs
@@ -0,0 +1,16 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+namespace Epic.OnlineServices
+{
+ internal interface IGettable
+ where T : struct
+ {
+ void Get(out T other);
+ }
+
+ internal interface IGettable
+ where T : struct
+ {
+ void Get(out T other, TEnum enumValue, int? arrayLength);
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/ISettable.cs b/FusionAPI/Dependencies/EOSSDK/Core/ISettable.cs
new file mode 100644
index 0000000..4e01bb1
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/ISettable.cs
@@ -0,0 +1,12 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices
+{
+ internal interface ISettable : IDisposable
+ where T : struct
+ {
+ void Set(ref T other);
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/MonoPInvokeCallbackAttribute.cs b/FusionAPI/Dependencies/EOSSDK/Core/MonoPInvokeCallbackAttribute.cs
new file mode 100644
index 0000000..c58daf7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/MonoPInvokeCallbackAttribute.cs
@@ -0,0 +1,14 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices
+{
+ [AttributeUsage(AttributeTargets.Method)]
+ internal sealed class MonoPInvokeCallbackAttribute : Attribute
+ {
+ public MonoPInvokeCallbackAttribute(Type type)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/P2P/GetNextReceivedPacketSizeOptions.cs b/FusionAPI/Dependencies/EOSSDK/Core/P2P/GetNextReceivedPacketSizeOptions.cs
new file mode 100644
index 0000000..099373d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/P2P/GetNextReceivedPacketSizeOptions.cs
@@ -0,0 +1,88 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices.P2P
+{
+ ///
+ /// Structure containing information about who would like to receive a packet.
+ ///
+ public struct GetNextReceivedPacketSizeOptions
+ {
+ internal byte[] m_RequestedChannel;
+ ///
+ /// The Product User ID of the local user who is receiving the packet
+ ///
+ public ProductUserId LocalUserId { get; set; }
+
+ ///
+ /// An optional channel to request the data for. If , we're retrieving the size of the next packet on any channel.
+ ///
+ public byte? RequestedChannel
+ {
+ get
+ {
+ if (m_RequestedChannel == null)
+ {
+ return null;
+ }
+
+ return m_RequestedChannel[0];
+ }
+ set
+ {
+ if (value != null)
+ {
+ if (m_RequestedChannel == null)
+ {
+ m_RequestedChannel = new byte[1];
+ }
+ m_RequestedChannel[0] = value.Value;
+ }
+ else
+ {
+ m_RequestedChannel = null;
+ }
+ }
+ }
+ }
+
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 8)]
+ internal struct GetNextReceivedPacketSizeOptionsInternal : ISettable, System.IDisposable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_LocalUserId;
+ private IntPtr m_RequestedChannel;
+
+ public void Set(ref GetNextReceivedPacketSizeOptions other)
+ {
+ m_ApiVersion = P2PInterface.GETNEXTRECEIVEDPACKETSIZE_API_LATEST;
+ m_LocalUserId = other.LocalUserId.InnerHandle;
+ m_RequestedChannel = IntPtr.Zero;
+ if (other.RequestedChannel.HasValue)
+ {
+ m_RequestedChannel = Helper.AddPinnedBuffer(other.m_RequestedChannel);
+ }
+ }
+
+ public void Set(ref GetNextReceivedPacketSizeOptions? other)
+ {
+ if (other.HasValue)
+ {
+ m_ApiVersion = P2PInterface.GETNEXTRECEIVEDPACKETSIZE_API_LATEST;
+ m_LocalUserId = other.Value.LocalUserId.InnerHandle;
+ m_RequestedChannel = IntPtr.Zero;
+ if (other.Value.RequestedChannel.HasValue)
+ {
+ m_RequestedChannel = Helper.AddPinnedBuffer(other.Value.m_RequestedChannel);
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_LocalUserId);
+ Helper.Dispose(ref m_RequestedChannel);
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/P2P/P2PInterface.cs b/FusionAPI/Dependencies/EOSSDK/Core/P2P/P2PInterface.cs
new file mode 100644
index 0000000..fa9b17d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/P2P/P2PInterface.cs
@@ -0,0 +1,61 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices.P2P
+{
+ public sealed partial class P2PInterface : Handle
+ {
+ ///
+ /// Receive the next packet for the local user, and information associated with this packet, if it exists.
+ ///
+ ///
+ /// Information about who is requesting the size of their next packet, and how much data can be stored safely
+ /// The Remote User who sent data. Only set if there was a packet to receive.
+ /// The Socket ID of the data that was sent. Only set if there was a packet to receive.
+ /// The channel the data was sent on. Only set if there was a packet to receive.
+ /// Buffer to store the data being received. Must be at least in length or data will be truncated
+ /// The amount of bytes written to OutData. Only set if there was a packet to receive.
+ ///
+ /// - If the packet was received successfully
+ /// - If input was invalid
+ /// - If there are no packets available for the requesting user
+ ///
+ public Result ReceivePacket(ref ReceivePacketOptions options, ref ProductUserId outPeerId, ref SocketId outSocketId, out byte outChannel, System.ArraySegment outData, out uint outBytesWritten)
+ {
+ bool wasCacheValid = outSocketId.PrepareForUpdate();
+ IntPtr outSocketIdAddr = Helper.AddPinnedBuffer(outSocketId.m_AllBytes);
+ IntPtr outDataAddress = Helper.AddPinnedBuffer(outData);
+ var optionsInternal = new ReceivePacketOptionsInternal(ref options);
+ try
+ {
+ var outPeerIdAddress = IntPtr.Zero;
+ outChannel = default;
+ outBytesWritten = 0;
+ var funcResult = Bindings.EOS_P2P_ReceivePacket(InnerHandle, ref optionsInternal, out outPeerIdAddress, outSocketIdAddr, out outChannel, outDataAddress, out outBytesWritten);
+
+ if (outPeerId == null)
+ {
+ // Note: Will allocate a new ProductUserId(), to avoid continual allocation of a peer id object, pass a non null reference.
+ Helper.Get(outPeerIdAddress, out outPeerId);
+ }
+ else if (outPeerId.InnerHandle != outPeerIdAddress)
+ {
+ // Optimization Note: clients can pass the same ProductUserId object to avoid continually allocating a new object but will need to pay attention to InnerHandler changes
+ outPeerId.InnerHandle = outPeerIdAddress;
+ }
+
+ // Optimization Note: this will check if socket ID bytes were unchanged to allow using previous cached string and avoid a new allocation.
+ outSocketId.CheckIfChanged(wasCacheValid);
+
+ return funcResult;
+ }
+ finally
+ {
+ Helper.Dispose(ref outSocketIdAddr);
+ Helper.Dispose(ref outDataAddress);
+ optionsInternal.Dispose();
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/P2P/ReceivePacketOptions.cs b/FusionAPI/Dependencies/EOSSDK/Core/P2P/ReceivePacketOptions.cs
new file mode 100644
index 0000000..26e3ab8
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/P2P/ReceivePacketOptions.cs
@@ -0,0 +1,82 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+
+namespace Epic.OnlineServices.P2P
+{
+ ///
+ /// Structure containing information about who would like to receive a packet, and how much data can be stored safely.
+ ///
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 8)]
+ public struct ReceivePacketOptions
+ {
+ internal byte[] m_RequestedChannel;
+ ///
+ /// The Product User ID of the user who is receiving the packet
+ ///
+ public ProductUserId LocalUserId { get; set; }
+
+ ///
+ /// The maximum amount of data in bytes that can be safely copied to OutData in the function call
+ ///
+ public uint MaxDataSizeBytes { get; set; }
+
+ ///
+ /// An optional channel to request the data for. If , we're retrieving the next packet on any channel
+ ///
+ public byte? RequestedChannel
+ {
+ get
+ {
+ if (m_RequestedChannel == null)
+ {
+ return null;
+ }
+
+ return m_RequestedChannel[0];
+ }
+ set
+ {
+ if (value != null)
+ {
+ if (m_RequestedChannel == null)
+ {
+ m_RequestedChannel = new byte[1];
+ }
+ m_RequestedChannel[0] = value.Value;
+ }
+ else
+ {
+ m_RequestedChannel = null;
+ }
+ }
+ }
+ }
+
+ [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 8)]
+ internal struct ReceivePacketOptionsInternal : IDisposable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_LocalUserId;
+ private uint m_MaxDataSizeBytes;
+ public IntPtr m_RequestedChannel;
+
+ public ReceivePacketOptionsInternal(ref ReceivePacketOptions other)
+ {
+ m_ApiVersion = P2PInterface.RECEIVEPACKET_API_LATEST;
+ m_RequestedChannel = IntPtr.Zero;
+ if (other.RequestedChannel.HasValue)
+ {
+ m_RequestedChannel = Helper.AddPinnedBuffer(other.m_RequestedChannel);
+ }
+ m_LocalUserId = other.LocalUserId.InnerHandle;
+ m_MaxDataSizeBytes = other.MaxDataSizeBytes;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_LocalUserId);
+ Helper.Dispose(ref m_RequestedChannel);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/P2P/SendPacketOptions.cs b/FusionAPI/Dependencies/EOSSDK/Core/P2P/SendPacketOptions.cs
new file mode 100644
index 0000000..58a24a4
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/P2P/SendPacketOptions.cs
@@ -0,0 +1,128 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.P2P
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 8)]
+ internal struct SendPacketOptionsInternal : ISettable, IDisposable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_LocalUserId;
+ private IntPtr m_RemoteUserId;
+ internal IntPtr m_SocketId;
+ private byte m_Channel;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+ private int m_AllowDelayedDelivery;
+ private PacketReliability m_Reliability;
+ private int m_DisableAutoAcceptConnection;
+
+ public ProductUserId LocalUserId
+ {
+ set
+ {
+ Helper.Set(value, ref m_LocalUserId);
+ }
+ }
+
+ public ProductUserId RemoteUserId
+ {
+ set
+ {
+ Helper.Set(value, ref m_RemoteUserId);
+ }
+ }
+
+
+ public byte Channel
+ {
+ set
+ {
+ m_Channel = value;
+ }
+ }
+
+ public ArraySegment Data
+ {
+ set
+ {
+ Helper.Set(value, ref m_Data, out m_DataLengthBytes);
+ }
+ }
+
+ public bool AllowDelayedDelivery
+ {
+ set
+ {
+ Helper.Set(value, ref m_AllowDelayedDelivery);
+ }
+ }
+
+ public PacketReliability Reliability
+ {
+ set
+ {
+ m_Reliability = value;
+ }
+ }
+
+ public bool DisableAutoAcceptConnection
+ {
+ set
+ {
+ Helper.Set(value, ref m_DisableAutoAcceptConnection);
+ }
+ }
+
+ public void Set(ref SendPacketOptions other)
+ {
+ m_ApiVersion = P2PInterface.SENDPACKET_API_LATEST;
+ LocalUserId = other.LocalUserId;
+ RemoteUserId = other.RemoteUserId;
+
+ m_SocketId = IntPtr.Zero;
+ if(other.SocketId.HasValue)
+ {
+ m_SocketId = Helper.AddPinnedBuffer(other.SocketId.Value.m_AllBytes);
+ }
+
+ Channel = other.Channel;
+ Data = other.Data;
+ AllowDelayedDelivery = other.AllowDelayedDelivery;
+ Reliability = other.Reliability;
+ DisableAutoAcceptConnection = other.DisableAutoAcceptConnection;
+ }
+
+ public void Set(ref SendPacketOptions? other)
+ {
+ if (other.HasValue)
+ {
+ m_ApiVersion = P2PInterface.SENDPACKET_API_LATEST;
+ LocalUserId = other.Value.LocalUserId;
+ RemoteUserId = other.Value.RemoteUserId;
+
+ m_SocketId = IntPtr.Zero;
+ if (other.Value.SocketId.HasValue)
+ {
+ m_SocketId = Helper.AddPinnedBuffer(other.Value.SocketId.Value.m_AllBytes);
+ }
+
+ Channel = other.Value.Channel;
+ Data = other.Value.Data;
+ AllowDelayedDelivery = other.Value.AllowDelayedDelivery;
+ Reliability = other.Value.Reliability;
+ DisableAutoAcceptConnection = other.Value.DisableAutoAcceptConnection;
+ }
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_LocalUserId);
+ Helper.Dispose(ref m_RemoteUserId);
+ Helper.Dispose(ref m_SocketId);
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/P2P/SocketId.cs b/FusionAPI/Dependencies/EOSSDK/Core/P2P/SocketId.cs
new file mode 100644
index 0000000..ab6fb2a
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/P2P/SocketId.cs
@@ -0,0 +1,130 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Text;
+
+namespace Epic.OnlineServices.P2P
+{
+ ///
+ /// P2P Socket ID
+ ///
+ /// The Socket ID contains an application-defined name for the connection between a local person and another peer.
+ ///
+ /// When a remote user receives a connection request from you, they will receive this information. It can be important
+ /// to only accept connections with a known socket-name and/or from a known user, to prevent leaking of private
+ /// information, such as a user's IP address. Using the socket name as a secret key can help prevent such leaks. Shared
+ /// private data, like a private match's Session ID are good candidates for a socket name.
+ ///
+ public struct SocketId
+ {
+ public static readonly SocketId Empty = new SocketId();
+ private const int MaxSocketNameLength = 32;
+ private const int ApiVersionLength = sizeof(int);
+ private const int NullTerminatorSpace = 1;
+ private const int TotalSizeInBytes = MaxSocketNameLength + ApiVersionLength + NullTerminatorSpace;
+
+ private bool m_CacheValid;
+ private string m_CachedSocketName;
+
+ internal byte[] m_AllBytes;
+ internal byte[] m_SwapBuffer;
+
+ public string SocketName
+ {
+ get
+ {
+ if (m_CacheValid)
+ {
+ return m_CachedSocketName;
+ }
+
+ if (m_AllBytes == null)
+ {
+ return null;
+ }
+
+ RebuildStringFromBuffer();
+
+ return m_CachedSocketName;
+ }
+ set
+ {
+ m_CachedSocketName = value;
+ if(value == null)
+ {
+ m_CacheValid = true;
+ return;
+ }
+
+ EnsureStorage();
+
+ int stringEndIndex = Math.Min(MaxSocketNameLength, value.Length);
+ ASCIIEncoding.ASCII.GetBytes(value, 0, stringEndIndex, m_AllBytes, ApiVersionLength);
+ // Add ascii null to end of string
+ m_AllBytes[stringEndIndex + ApiVersionLength] = 0;
+ m_CacheValid = true;
+ }
+ }
+
+ internal bool PrepareForUpdate()
+ {
+ bool wasCacheValid = m_CacheValid;
+ m_CacheValid = false;
+ EnsureStorage();
+ CopyIdToSwapBuffer();
+ return wasCacheValid;
+ }
+
+ internal void CheckIfChanged(bool wasCacheValid)
+ {
+ if (!wasCacheValid || m_SwapBuffer == null || m_AllBytes == null)
+ {
+ return;
+ }
+
+ bool identical = true;
+ for (int i = 0; i < m_SwapBuffer.Length; i++)
+ {
+ if (m_AllBytes[ApiVersionLength + i] != m_SwapBuffer[i])
+ {
+ identical = false;
+ break;
+ }
+ }
+
+ if (identical)
+ {
+ // No need to recompute the value of cached string
+ m_CacheValid = true;
+ }
+ }
+
+ private void RebuildStringFromBuffer()
+ {
+ EnsureStorage();
+
+ int stringEndIndex;
+ for (stringEndIndex = ApiVersionLength; stringEndIndex < m_AllBytes.Length && m_AllBytes[stringEndIndex] != '\0'; stringEndIndex++)
+ {
+ }
+
+ m_CachedSocketName = ASCIIEncoding.ASCII.GetString(m_AllBytes, ApiVersionLength, stringEndIndex - ApiVersionLength);
+ m_CacheValid = true;
+ }
+
+ private void EnsureStorage()
+ {
+ if (m_AllBytes == null || m_AllBytes.Length < TotalSizeInBytes)
+ {
+ m_AllBytes = new byte[TotalSizeInBytes];
+ m_SwapBuffer = new byte[TotalSizeInBytes - ApiVersionLength];
+ Array.Copy(BitConverter.GetBytes(P2PInterface.SOCKETID_API_LATEST), 0, m_AllBytes, 0, sizeof(int));
+ }
+ }
+
+ private void CopyIdToSwapBuffer()
+ {
+ Array.Copy(m_AllBytes, ApiVersionLength, m_SwapBuffer, 0, m_SwapBuffer.Length);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/SetHelper.cs b/FusionAPI/Dependencies/EOSSDK/Core/SetHelper.cs
new file mode 100644
index 0000000..afe23d6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/SetHelper.cs
@@ -0,0 +1,216 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using Epic.OnlineServices.UI;
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ public sealed partial class Helper
+ {
+ internal static void Set(T from, ref T? to)
+ where T : struct
+ {
+ to = from;
+ }
+
+ internal static void Set(T? from, ref T to)
+ where T : struct
+ {
+ to = default;
+
+ if (from.HasValue)
+ {
+ to = from.Value;
+ }
+ }
+
+ internal static void Set(T? from, ref T? to)
+ where T : struct
+ {
+ to = from;
+ }
+
+ internal static void Set(bool? from, ref int to)
+ {
+ to = default;
+
+ if (from.HasValue)
+ {
+ Convert(from.Value, out to);
+ }
+ }
+
+ internal static void Set(T from, ref IntPtr to)
+ where T : struct
+ {
+ Dispose(ref to);
+
+ to = AddAllocation(Marshal.SizeOf(typeof(T)), from);
+ Marshal.StructureToPtr(from, to, false);
+ }
+
+ internal static void Set(T? from, ref IntPtr to)
+ where T : struct
+ {
+ Dispose(ref to);
+
+ if (from.HasValue)
+ {
+ to = AddAllocation(Marshal.SizeOf(typeof(T)), from);
+ Marshal.StructureToPtr(from.Value, to, false);
+ }
+ }
+
+ internal static void Set(object from, ref IntPtr to)
+ {
+ Dispose(ref to);
+ AddCallback(out to, from);
+ }
+
+ internal static void Set(Utf8String from, ref IntPtr to)
+ {
+ Dispose(ref to);
+ to = AddPinnedBuffer(from);
+ }
+
+ internal static void Set(Handle from, ref IntPtr to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Set(T[] from, ref IntPtr to, bool isArrayItemAllocated)
+ {
+ Dispose(ref to);
+ to = AddAllocation(from, isArrayItemAllocated);
+ }
+
+ internal static void Set(ArraySegment from, ref IntPtr to, out uint arrayLength)
+ {
+ Dispose(ref to);
+ to = AddPinnedBuffer(from);
+ Get(from, out arrayLength);
+ }
+
+ internal static void Set(T[] from, ref IntPtr to, out int arrayLength, bool isArrayItemAllocated)
+ {
+ Set(from, ref to, isArrayItemAllocated);
+ Get(from, out arrayLength);
+ }
+
+ internal static void Set(T[] from, ref IntPtr to, out uint arrayLength, bool isArrayItemAllocated)
+ {
+ Set(from, ref to, isArrayItemAllocated);
+ Get(from, out arrayLength);
+ }
+
+ internal static void Set(DateTimeOffset? from, ref long to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Set(bool from, ref int to)
+ {
+ Convert(from, out to);
+ }
+
+ internal static void Set(Utf8String from, ref byte[] to, int stringLength)
+ {
+ Convert(from, out to, stringLength);
+ }
+
+ internal static void Set(ref TPublic from, ref TInternal to)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ to.Set(ref from);
+ }
+
+ internal static void Set(TPublic? from, ref IntPtr to)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ Dispose(ref to);
+ to = default;
+
+ if (from.HasValue)
+ {
+ TInternal toInternal = default;
+ var fromValue = from.Value;
+ toInternal.Set(ref fromValue);
+ to = AddAllocation(Marshal.SizeOf(typeof(TInternal)), toInternal);
+ }
+ }
+
+ internal static void Set(TPublic? from, ref TInternal to)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ Dispose(ref to);
+ to = default;
+
+ if (from.HasValue)
+ {
+ var fromValue = from.Value;
+ to.Set(ref fromValue);
+ }
+ }
+
+ internal static void Set(Utf8String[] from, ref IntPtr to, out int arrayLength, bool isArrayItemAllocated)
+ {
+ Dispose(ref to);
+
+ to = AddAllocation(from, isArrayItemAllocated);
+ Get(from, out arrayLength);
+ }
+
+ internal static void Set(Utf8String[] from, ref IntPtr to, out uint arrayLength, bool isArrayItemAllocated)
+ {
+ int arrayLengthIntermediate;
+ Set(from, ref to, out arrayLengthIntermediate, isArrayItemAllocated);
+ arrayLength = (uint)arrayLengthIntermediate;
+ }
+
+ internal static void Set(TPublic from, ref IntPtr to)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ Dispose(ref to);
+
+ TInternal toInternal = default;
+ toInternal.Set(ref from);
+
+ to = AddAllocation(Marshal.SizeOf(typeof(TInternal)), toInternal);
+ }
+
+ internal static void Set(TPublic[] from, ref IntPtr to, out int arrayLength, bool isArrayItemAllocated)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ Dispose(ref to);
+ arrayLength = 0;
+
+ if (from != null)
+ {
+ TInternal[] toInternal = new TInternal[from.Length];
+ for (int index = 0; index < from.Length; ++index)
+ {
+ toInternal[index].Set(ref from[index]);
+ }
+
+ Set(toInternal, ref to, isArrayItemAllocated);
+ Get(from, out arrayLength);
+ }
+ }
+
+ internal static void Set(TPublic[] from, ref IntPtr to, out uint arrayLength, bool isArrayItemAllocated)
+ where TPublic : struct
+ where TInternal : struct, ISettable
+ {
+ int arrayLengthIntermediate;
+ Set(from, ref to, out arrayLengthIntermediate, isArrayItemAllocated);
+ arrayLength = (uint)arrayLengthIntermediate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Core/Utf8String.cs b/FusionAPI/Dependencies/EOSSDK/Core/Utf8String.cs
new file mode 100644
index 0000000..4308a0c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Core/Utf8String.cs
@@ -0,0 +1,214 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using System;
+using System.Text;
+
+namespace Epic.OnlineServices
+{
+ ///
+ /// Represents text as a series of UTF-8 code units.
+ ///
+ [System.Diagnostics.DebuggerDisplay("{ToString()}")]
+ public sealed class Utf8String
+ {
+ static public Utf8String EmptyString = new Utf8String();
+
+ ///
+ /// The length of the .
+ ///
+ public int Length { get; private set; }
+
+ ///
+ /// The UTF-8 bytes of the .
+ ///
+ public byte[] Bytes { get; private set; }
+
+ ///
+ /// The as a .
+ ///
+ private string Utf16
+ {
+ get
+ {
+ if (Length > 0)
+ {
+ return Encoding.UTF8.GetString(Bytes, 0, Length);
+ }
+
+ if (Bytes == null)
+ {
+ throw new Exception("Bytes array is null.");
+ }
+ else if (Bytes.Length == 0 || Bytes[Bytes.Length - 1] != 0)
+ {
+ throw new Exception("Bytes array is not null terminated.");
+ }
+
+ return "";
+ }
+ set
+ {
+ if (value != null)
+ {
+ // Null terminate the bytes
+ Bytes = new byte[Encoding.UTF8.GetMaxByteCount(value.Length) + 1];
+ Length = Encoding.UTF8.GetBytes(value, 0, value.Length, Bytes, 0);
+ }
+ else
+ {
+ Length = 0;
+ }
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public Utf8String()
+ {
+ Length = 0;
+ }
+
+ ///
+ /// Initializes a new instance of the class with the given UTF-8 bytes.
+ ///
+ /// The UTF-8 bytes.
+ public Utf8String(byte[] bytes)
+ {
+ if (bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ else if (bytes.Length == 0 || bytes[bytes.Length - 1] != 0)
+ {
+ throw new ArgumentException("Argument is not null terminated.", "bytes");
+ }
+
+ Bytes = bytes;
+ Length = Bytes.Length - 1;
+ }
+
+ ///
+ /// Initializes a new instance of the class by converting from the given .
+ ///
+ /// The string to convert to UTF-8.
+ public Utf8String(string value)
+ {
+ Utf16 = value;
+ }
+
+ public byte this[int index]
+ {
+ get { return Bytes[index]; }
+ set { Bytes[index] = value; }
+ }
+
+ public static explicit operator Utf8String(byte[] other)
+ {
+ if (other == null)
+ {
+ return null;
+ }
+
+ return new Utf8String(other);
+ }
+
+ public static explicit operator byte[](Utf8String other)
+ {
+ if (other == null)
+ {
+ return null;
+ }
+
+ return other.Bytes;
+ }
+
+ public static implicit operator Utf8String(string other)
+ {
+ if (other == null)
+ {
+ return null;
+ }
+
+ return new Utf8String(other);
+ }
+
+ public static implicit operator string(Utf8String other)
+ {
+ if (other == null)
+ {
+ return null;
+ }
+
+ return other.ToString();
+ }
+
+ public static Utf8String operator +(Utf8String left, Utf8String right)
+ {
+ byte[] Result = new byte[left.Length + right.Length + 1];
+ Buffer.BlockCopy(left.Bytes, 0, Result, 0, left.Length);
+ Buffer.BlockCopy(right.Bytes, 0, Result, left.Length, right.Length + 1);
+ return new Utf8String(Result);
+ }
+
+ public static bool operator ==(Utf8String left, Utf8String right)
+ {
+ if (ReferenceEquals(left, null))
+ {
+ if (ReferenceEquals(right, null))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ return left.Equals(right);
+ }
+
+ public static bool operator !=(Utf8String left, Utf8String right)
+ {
+ return !(left == right);
+ }
+
+ public override bool Equals(object obj)
+ {
+ Utf8String other = obj as Utf8String;
+
+ if (ReferenceEquals(other, null))
+ {
+ return false;
+ }
+
+ if (ReferenceEquals(this, other))
+ {
+ return true;
+ }
+
+ if (Length != other.Length)
+ {
+ return false;
+ }
+
+ for (int index = 0; index < Length; index++)
+ {
+ if (this[index] != other[index])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public override string ToString()
+ {
+ return Utf16;
+ }
+
+ public override int GetHashCode()
+ {
+ return ToString().GetHashCode();
+ }
+ }
+}
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AchievementsInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AchievementsInterface.cs
new file mode 100644
index 0000000..429bf28
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AchievementsInterface.cs
@@ -0,0 +1,722 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+
+namespace Epic.OnlineServices.Achievements
+{
+ public sealed partial class AchievementsInterface : Handle
+ {
+ public AchievementsInterface()
+ {
+ }
+
+ public AchievementsInterface(IntPtr innerHandle) : base(innerHandle)
+ {
+ }
+
+ ///
+ /// Timestamp value representing an undefined UnlockTime for and
+ ///
+ public const int ACHIEVEMENT_UNLOCKTIME_UNDEFINED = -1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYACHIEVEMENTSUNLOCKEDV2_API_LATEST = 2;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYACHIEVEMENTSUNLOCKED_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYACHIEVEMENTDEFINITIONV2BYACHIEVEMENTID_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYACHIEVEMENTDEFINITIONV2BYINDEX_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYDEFINITIONBYACHIEVEMENTID_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYDEFINITIONBYINDEX_API_LATEST = 1;
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ public const int COPYDEFINITIONV2BYACHIEVEMENTID_API_LATEST = COPYACHIEVEMENTDEFINITIONV2BYACHIEVEMENTID_API_LATEST;
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ public const int COPYDEFINITIONV2BYINDEX_API_LATEST = COPYACHIEVEMENTDEFINITIONV2BYINDEX_API_LATEST;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYPLAYERACHIEVEMENTBYACHIEVEMENTID_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYPLAYERACHIEVEMENTBYINDEX_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYUNLOCKEDACHIEVEMENTBYACHIEVEMENTID_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int COPYUNLOCKEDACHIEVEMENTBYINDEX_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int DEFINITIONV2_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int DEFINITION_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETACHIEVEMENTDEFINITIONCOUNT_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETPLAYERACHIEVEMENTCOUNT_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETUNLOCKEDACHIEVEMENTCOUNT_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int PLAYERACHIEVEMENT_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int PLAYERSTATINFO_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int QUERYDEFINITIONS_API_LATEST = 3;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int QUERYPLAYERACHIEVEMENTS_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int STATTHRESHOLDS_API_LATEST = 1;
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ public const int STATTHRESHOLD_API_LATEST = STATTHRESHOLDS_API_LATEST;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int UNLOCKACHIEVEMENTS_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int UNLOCKEDACHIEVEMENT_API_LATEST = 1;
+
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ /// Register to receive achievement unlocked notifications.
+ /// If the returned NotificationId is valid, you must call when you no longer wish to have your NotificationHandler called.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the achievement unlocked notification
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// A callback that is fired when an achievement unlocked notification for a user has been received
+ ///
+ ///
+ /// handle representing the registered callback
+ ///
+ public ulong AddNotifyAchievementsUnlocked(ref AddNotifyAchievementsUnlockedOptions options, object clientData, OnAchievementsUnlockedCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyAchievementsUnlockedOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_Achievements_AddNotifyAchievementsUnlocked(InnerHandle, ref optionsInternal, clientDataPointer, OnAchievementsUnlockedCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Register to receive achievement unlocked notifications.
+ /// If the returned NotificationId is valid, you must call when you no longer wish to have your NotificationHandler called.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the achievement unlocked notification
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// A callback that is fired when an achievement unlocked notification for a user has been received
+ ///
+ ///
+ /// handle representing the registered callback
+ ///
+ public ulong AddNotifyAchievementsUnlockedV2(ref AddNotifyAchievementsUnlockedV2Options options, object clientData, OnAchievementsUnlockedCallbackV2 notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyAchievementsUnlockedV2OptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_Achievements_AddNotifyAchievementsUnlockedV2(InnerHandle, ref optionsInternal, clientDataPointer, OnAchievementsUnlockedCallbackV2InternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ /// Fetches an achievement definition from a given achievement ID.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the achievement ID being accessed
+ ///
+ ///
+ /// The achievement definition for the given achievement ID, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutDefinition
+ /// - if you pass a for the out parameter
+ /// - if the achievement definition is not found
+ ///
+ public Result CopyAchievementDefinitionByAchievementId(ref CopyAchievementDefinitionByAchievementIdOptions options, out Definition? outDefinition)
+ {
+ var optionsInternal = default(CopyAchievementDefinitionByAchievementIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outDefinitionPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyAchievementDefinitionByAchievementId(InnerHandle, ref optionsInternal, out outDefinitionPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outDefinitionPointer, out outDefinition);
+ if (outDefinitionPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_Definition_Release(outDefinitionPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ /// Fetches an achievement definition from a given index.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the index being accessed
+ ///
+ ///
+ /// The achievement definition for the given index, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutDefinition
+ /// - if you pass a for the out parameter
+ /// - if the achievement definition is not found
+ ///
+ public Result CopyAchievementDefinitionByIndex(ref CopyAchievementDefinitionByIndexOptions options, out Definition? outDefinition)
+ {
+ var optionsInternal = default(CopyAchievementDefinitionByIndexOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outDefinitionPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyAchievementDefinitionByIndex(InnerHandle, ref optionsInternal, out outDefinitionPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outDefinitionPointer, out outDefinition);
+ if (outDefinitionPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_Definition_Release(outDefinitionPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetches an achievement definition from a given achievement ID.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the achievement ID being accessed
+ ///
+ ///
+ /// The achievement definition for the given achievement ID, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutDefinition
+ /// - if you pass a for the out parameter
+ /// - if the achievement definition is not found
+ /// - if any of the userid options are incorrect
+ ///
+ public Result CopyAchievementDefinitionV2ByAchievementId(ref CopyAchievementDefinitionV2ByAchievementIdOptions options, out DefinitionV2? outDefinition)
+ {
+ var optionsInternal = default(CopyAchievementDefinitionV2ByAchievementIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outDefinitionPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyAchievementDefinitionV2ByAchievementId(InnerHandle, ref optionsInternal, out outDefinitionPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outDefinitionPointer, out outDefinition);
+ if (outDefinitionPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_DefinitionV2_Release(outDefinitionPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetches an achievement definition from a given index.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the index being accessed
+ ///
+ ///
+ /// The achievement definition for the given index, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutDefinition
+ /// - if you pass a for the out parameter
+ /// - if the achievement definition is not found
+ /// - if any of the userid options are incorrect
+ ///
+ public Result CopyAchievementDefinitionV2ByIndex(ref CopyAchievementDefinitionV2ByIndexOptions options, out DefinitionV2? outDefinition)
+ {
+ var optionsInternal = default(CopyAchievementDefinitionV2ByIndexOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outDefinitionPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyAchievementDefinitionV2ByIndex(InnerHandle, ref optionsInternal, out outDefinitionPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outDefinitionPointer, out outDefinition);
+ if (outDefinitionPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_DefinitionV2_Release(outDefinitionPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetches a player achievement from a given achievement ID.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the Product User ID and achievement ID being accessed
+ ///
+ ///
+ /// The player achievement data for the given achievement ID, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutAchievement
+ /// - if you pass a for the out parameter
+ /// - if the player achievement is not found
+ /// - if you pass an invalid user ID
+ ///
+ public Result CopyPlayerAchievementByAchievementId(ref CopyPlayerAchievementByAchievementIdOptions options, out PlayerAchievement? outAchievement)
+ {
+ var optionsInternal = default(CopyPlayerAchievementByAchievementIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outAchievementPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyPlayerAchievementByAchievementId(InnerHandle, ref optionsInternal, out outAchievementPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outAchievementPointer, out outAchievement);
+ if (outAchievementPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_PlayerAchievement_Release(outAchievementPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetches a player achievement from a given index.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the Product User ID and index being accessed
+ ///
+ ///
+ /// The player achievement data for the given index, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutAchievement
+ /// - if you pass a for the out parameter
+ /// - if the player achievement is not found
+ /// - if you pass an invalid user ID
+ ///
+ public Result CopyPlayerAchievementByIndex(ref CopyPlayerAchievementByIndexOptions options, out PlayerAchievement? outAchievement)
+ {
+ var optionsInternal = default(CopyPlayerAchievementByIndexOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outAchievementPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyPlayerAchievementByIndex(InnerHandle, ref optionsInternal, out outAchievementPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outAchievementPointer, out outAchievement);
+ if (outAchievementPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_PlayerAchievement_Release(outAchievementPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ /// Fetches an unlocked achievement from a given achievement ID.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the Product User ID and achievement ID being accessed
+ ///
+ ///
+ /// The unlocked achievement data for the given achievement ID, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutAchievement
+ /// - if you pass a for the out parameter
+ /// - if the unlocked achievement is not found
+ ///
+ public Result CopyUnlockedAchievementByAchievementId(ref CopyUnlockedAchievementByAchievementIdOptions options, out UnlockedAchievement? outAchievement)
+ {
+ var optionsInternal = default(CopyUnlockedAchievementByAchievementIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outAchievementPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyUnlockedAchievementByAchievementId(InnerHandle, ref optionsInternal, out outAchievementPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outAchievementPointer, out outAchievement);
+ if (outAchievementPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_UnlockedAchievement_Release(outAchievementPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// DEPRECATED! Use instead.
+ ///
+ /// Fetches an unlocked achievement from a given index.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the Product User ID and index being accessed
+ ///
+ ///
+ /// The unlocked achievement data for the given index, if it exists and is valid, use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutAchievement
+ /// - if you pass a for the out parameter
+ /// - if the unlocked achievement is not found
+ ///
+ public Result CopyUnlockedAchievementByIndex(ref CopyUnlockedAchievementByIndexOptions options, out UnlockedAchievement? outAchievement)
+ {
+ var optionsInternal = default(CopyUnlockedAchievementByIndexOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outAchievementPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Achievements_CopyUnlockedAchievementByIndex(InnerHandle, ref optionsInternal, out outAchievementPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outAchievementPointer, out outAchievement);
+ if (outAchievementPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Achievements_UnlockedAchievement_Release(outAchievementPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch the number of achievement definitions that are cached locally.
+ ///
+ ///
+ ///
+ ///
+ /// The Options associated with retrieving the achievement definition count
+ ///
+ ///
+ /// Number of achievement definitions or 0 if there is an error
+ ///
+ public uint GetAchievementDefinitionCount(ref GetAchievementDefinitionCountOptions options)
+ {
+ var optionsInternal = default(GetAchievementDefinitionCountOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_Achievements_GetAchievementDefinitionCount(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch the number of player achievements that are cached locally.
+ ///
+ ///
+ ///
+ ///
+ /// The Options associated with retrieving the player achievement count
+ ///
+ ///
+ /// Number of player achievements or 0 if there is an error
+ ///
+ public uint GetPlayerAchievementCount(ref GetPlayerAchievementCountOptions options)
+ {
+ var optionsInternal = default(GetPlayerAchievementCountOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_Achievements_GetPlayerAchievementCount(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// DEPRECATED! Use , and filter for unlocked instead.
+ ///
+ /// Fetch the number of unlocked achievements that are cached locally.
+ ///
+ ///
+ ///
+ ///
+ /// The Options associated with retrieving the unlocked achievement count
+ ///
+ ///
+ /// Number of unlocked achievements or 0 if there is an error
+ ///
+ public uint GetUnlockedAchievementCount(ref GetUnlockedAchievementCountOptions options)
+ {
+ var optionsInternal = default(GetUnlockedAchievementCountOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_Achievements_GetUnlockedAchievementCount(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Query for a list of definitions for all existing achievements, including localized text, icon IDs and whether an achievement is hidden.
+ /// When the Social Overlay is enabled then this will be called automatically. The Social Overlay is enabled by default (see ).
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the application whose achievement definitions we're retrieving.
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// This function is called when the query definitions operation completes.
+ ///
+ public void QueryDefinitions(ref QueryDefinitionsOptions options, object clientData, OnQueryDefinitionsCompleteCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(QueryDefinitionsOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Achievements_QueryDefinitions(InnerHandle, ref optionsInternal, clientDataPointer, OnQueryDefinitionsCompleteCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Query for a list of achievements for a specific player, including progress towards completion for each achievement.
+ /// Note: By default, this query will not return locked hidden achievements. To return all achievements, call first.
+ /// When the Social Overlay is enabled then this will be called automatically. The Social Overlay is enabled by default (see ).
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the player whose achievements we're retrieving.
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// This function is called when the query player achievements operation completes.
+ ///
+ public void QueryPlayerAchievements(ref QueryPlayerAchievementsOptions options, object clientData, OnQueryPlayerAchievementsCompleteCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(QueryPlayerAchievementsOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Achievements_QueryPlayerAchievements(InnerHandle, ref optionsInternal, clientDataPointer, OnQueryPlayerAchievementsCompleteCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Unregister from receiving achievement unlocked notifications.
+ ///
+ ///
+ ///
+ /// Handle representing the registered callback
+ ///
+ public void RemoveNotifyAchievementsUnlocked(ulong inId)
+ {
+ Bindings.EOS_Achievements_RemoveNotifyAchievementsUnlocked(InnerHandle, inId);
+
+ Helper.RemoveCallbackByNotificationId(inId);
+ }
+
+ ///
+ /// Unlocks a number of achievements for a specific player.
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the achievements and the player whose achievements we're unlocking.
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// This function is called when the unlock achievements operation completes.
+ ///
+ public void UnlockAchievements(ref UnlockAchievementsOptions options, object clientData, OnUnlockAchievementsCompleteCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(UnlockAchievementsOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Achievements_UnlockAchievements(InnerHandle, ref optionsInternal, clientDataPointer, OnUnlockAchievementsCompleteCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedOptions.cs
new file mode 100644
index 0000000..fa436e4
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyAchievementsUnlockedOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyAchievementsUnlockedOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyAchievementsUnlockedOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.ADDNOTIFYACHIEVEMENTSUNLOCKED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedV2Options.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedV2Options.cs
new file mode 100644
index 0000000..e0ab642
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/AddNotifyAchievementsUnlockedV2Options.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyAchievementsUnlockedV2Options
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyAchievementsUnlockedV2OptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyAchievementsUnlockedV2Options other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.ADDNOTIFYACHIEVEMENTSUNLOCKEDV2_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByAchievementIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByAchievementIdOptions.cs
new file mode 100644
index 0000000..83ff853
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByAchievementIdOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyAchievementDefinitionByAchievementIdOptions
+ {
+ ///
+ /// Achievement ID to look for when copying definition from the cache
+ ///
+ public Utf8String AchievementId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyAchievementDefinitionByAchievementIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+
+ public void Set(ref CopyAchievementDefinitionByAchievementIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYDEFINITIONBYACHIEVEMENTID_API_LATEST;
+ Helper.Set(other.AchievementId, ref m_AchievementId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_AchievementId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByIndexOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByIndexOptions.cs
new file mode 100644
index 0000000..46fe9da
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionByIndexOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyAchievementDefinitionByIndexOptions
+ {
+ ///
+ /// Index of the achievement definition to retrieve from the cache
+ ///
+ public uint AchievementIndex { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyAchievementDefinitionByIndexOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_AchievementIndex;
+
+ public void Set(ref CopyAchievementDefinitionByIndexOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYDEFINITIONBYINDEX_API_LATEST;
+ m_AchievementIndex = other.AchievementIndex;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByAchievementIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByAchievementIdOptions.cs
new file mode 100644
index 0000000..df451b4
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByAchievementIdOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyAchievementDefinitionV2ByAchievementIdOptions
+ {
+ ///
+ /// Achievement ID to look for when copying the definition from the cache.
+ ///
+ public Utf8String AchievementId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyAchievementDefinitionV2ByAchievementIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+
+ public void Set(ref CopyAchievementDefinitionV2ByAchievementIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYACHIEVEMENTDEFINITIONV2BYACHIEVEMENTID_API_LATEST;
+ Helper.Set(other.AchievementId, ref m_AchievementId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_AchievementId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByIndexOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByIndexOptions.cs
new file mode 100644
index 0000000..f403037
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyAchievementDefinitionV2ByIndexOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyAchievementDefinitionV2ByIndexOptions
+ {
+ ///
+ /// Index of the achievement definition to retrieve from the cache.
+ ///
+ public uint AchievementIndex { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyAchievementDefinitionV2ByIndexOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_AchievementIndex;
+
+ public void Set(ref CopyAchievementDefinitionV2ByIndexOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYACHIEVEMENTDEFINITIONV2BYINDEX_API_LATEST;
+ m_AchievementIndex = other.AchievementIndex;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByAchievementIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByAchievementIdOptions.cs
new file mode 100644
index 0000000..7a87a75
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByAchievementIdOptions.cs
@@ -0,0 +1,55 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyPlayerAchievementByAchievementIdOptions
+ {
+ ///
+ /// The Product User ID for the user whose achievement is to be retrieved.
+ ///
+ public ProductUserId TargetUserId { get; set; }
+
+ ///
+ /// Achievement ID to search for when retrieving player achievement data from the cache.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// The Product User ID for the user who is querying for a player achievement. For a Dedicated Server this should be .
+ ///
+ public ProductUserId LocalUserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyPlayerAchievementByAchievementIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_TargetUserId;
+ private IntPtr m_AchievementId;
+ private IntPtr m_LocalUserId;
+
+ public void Set(ref CopyPlayerAchievementByAchievementIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYPLAYERACHIEVEMENTBYACHIEVEMENTID_API_LATEST;
+ Helper.Set(other.TargetUserId, ref m_TargetUserId);
+ Helper.Set(other.AchievementId, ref m_AchievementId);
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_TargetUserId);
+ Helper.Dispose(ref m_AchievementId);
+ Helper.Dispose(ref m_LocalUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByIndexOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByIndexOptions.cs
new file mode 100644
index 0000000..d6f22d7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyPlayerAchievementByIndexOptions.cs
@@ -0,0 +1,54 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyPlayerAchievementByIndexOptions
+ {
+ ///
+ /// The Product User ID for the user whose achievement is to be retrieved.
+ ///
+ public ProductUserId TargetUserId { get; set; }
+
+ ///
+ /// The index of the player achievement data to retrieve from the cache.
+ ///
+ public uint AchievementIndex { get; set; }
+
+ ///
+ /// The Product User ID for the user who is querying for a player achievement. For a Dedicated Server this should be .
+ ///
+ public ProductUserId LocalUserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyPlayerAchievementByIndexOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_TargetUserId;
+ private uint m_AchievementIndex;
+ private IntPtr m_LocalUserId;
+
+ public void Set(ref CopyPlayerAchievementByIndexOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYPLAYERACHIEVEMENTBYINDEX_API_LATEST;
+ Helper.Set(other.TargetUserId, ref m_TargetUserId);
+ m_AchievementIndex = other.AchievementIndex;
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_TargetUserId);
+ Helper.Dispose(ref m_LocalUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByAchievementIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByAchievementIdOptions.cs
new file mode 100644
index 0000000..975a86b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByAchievementIdOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyUnlockedAchievementByAchievementIdOptions
+ {
+ ///
+ /// The Product User ID for the user who is copying the unlocked achievement
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// AchievementId of the unlocked achievement to retrieve from the cache
+ ///
+ public Utf8String AchievementId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyUnlockedAchievementByAchievementIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UserId;
+ private IntPtr m_AchievementId;
+
+ public void Set(ref CopyUnlockedAchievementByAchievementIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYUNLOCKEDACHIEVEMENTBYACHIEVEMENTID_API_LATEST;
+ Helper.Set(other.UserId, ref m_UserId);
+ Helper.Set(other.AchievementId, ref m_AchievementId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UserId);
+ Helper.Dispose(ref m_AchievementId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByIndexOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByIndexOptions.cs
new file mode 100644
index 0000000..210021b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/CopyUnlockedAchievementByIndexOptions.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyUnlockedAchievementByIndexOptions
+ {
+ ///
+ /// The Product User ID for the user who is copying the unlocked achievement
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// Index of the unlocked achievement to retrieve from the cache
+ ///
+ public uint AchievementIndex { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyUnlockedAchievementByIndexOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UserId;
+ private uint m_AchievementIndex;
+
+ public void Set(ref CopyUnlockedAchievementByIndexOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.COPYUNLOCKEDACHIEVEMENTBYINDEX_API_LATEST;
+ Helper.Set(other.UserId, ref m_UserId);
+ m_AchievementIndex = other.AchievementIndex;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/Definition.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/Definition.cs
new file mode 100644
index 0000000..36a6288
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/Definition.cs
@@ -0,0 +1,126 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a single achievement definition with localized text.
+ ///
+ public struct Definition
+ {
+ ///
+ /// Achievement ID that can be used to uniquely identify the achievement.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// Text representing the Name to display in-game when achievement has been unlocked.
+ ///
+ public Utf8String DisplayName { get; set; }
+
+ ///
+ /// Text representing the description to display in-game when achievement has been unlocked.
+ ///
+ public Utf8String Description { get; set; }
+
+ ///
+ /// Text representing the name to display in-game when achievement is locked.
+ ///
+ public Utf8String LockedDisplayName { get; set; }
+
+ ///
+ /// Text representing the description of what needs to be done to trigger the unlock of this achievement.
+ ///
+ public Utf8String LockedDescription { get; set; }
+
+ ///
+ /// Text representing the description to display in-game when achievement is hidden.
+ ///
+ public Utf8String HiddenDescription { get; set; }
+
+ ///
+ /// Text representing the description of what happens when the achievement is unlocked.
+ ///
+ public Utf8String CompletionDescription { get; set; }
+
+ ///
+ /// Text representing the icon to display in-game when achievement is unlocked.
+ ///
+ public Utf8String UnlockedIconId { get; set; }
+
+ ///
+ /// Text representing the icon to display in-game when achievement is locked.
+ ///
+ public Utf8String LockedIconId { get; set; }
+
+ ///
+ /// True if achievement is hidden, otherwise.
+ ///
+ public bool IsHidden { get; set; }
+
+ ///
+ /// Array of stat thresholds that need to be satisfied to unlock the achievement.
+ ///
+ public StatThresholds[] StatThresholds { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct DefinitionInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+ private IntPtr m_DisplayName;
+ private IntPtr m_Description;
+ private IntPtr m_LockedDisplayName;
+ private IntPtr m_LockedDescription;
+ private IntPtr m_HiddenDescription;
+ private IntPtr m_CompletionDescription;
+ private IntPtr m_UnlockedIconId;
+ private IntPtr m_LockedIconId;
+ private int m_IsHidden;
+ private int m_StatThresholdsCount;
+ private IntPtr m_StatThresholds;
+
+ public void Get(out Definition other)
+ {
+ other = default;
+
+ Utf8String AchievementIdPublic;
+ Helper.Get(m_AchievementId, out AchievementIdPublic);
+ other.AchievementId = AchievementIdPublic;
+ Utf8String DisplayNamePublic;
+ Helper.Get(m_DisplayName, out DisplayNamePublic);
+ other.DisplayName = DisplayNamePublic;
+ Utf8String DescriptionPublic;
+ Helper.Get(m_Description, out DescriptionPublic);
+ other.Description = DescriptionPublic;
+ Utf8String LockedDisplayNamePublic;
+ Helper.Get(m_LockedDisplayName, out LockedDisplayNamePublic);
+ other.LockedDisplayName = LockedDisplayNamePublic;
+ Utf8String LockedDescriptionPublic;
+ Helper.Get(m_LockedDescription, out LockedDescriptionPublic);
+ other.LockedDescription = LockedDescriptionPublic;
+ Utf8String HiddenDescriptionPublic;
+ Helper.Get(m_HiddenDescription, out HiddenDescriptionPublic);
+ other.HiddenDescription = HiddenDescriptionPublic;
+ Utf8String CompletionDescriptionPublic;
+ Helper.Get(m_CompletionDescription, out CompletionDescriptionPublic);
+ other.CompletionDescription = CompletionDescriptionPublic;
+ Utf8String UnlockedIconIdPublic;
+ Helper.Get(m_UnlockedIconId, out UnlockedIconIdPublic);
+ other.UnlockedIconId = UnlockedIconIdPublic;
+ Utf8String LockedIconIdPublic;
+ Helper.Get(m_LockedIconId, out LockedIconIdPublic);
+ other.LockedIconId = LockedIconIdPublic;
+ bool IsHiddenPublic;
+ Helper.Get(m_IsHidden, out IsHiddenPublic);
+ other.IsHidden = IsHiddenPublic;
+ StatThresholds[] StatThresholdsPublic;
+ Helper.Get(m_StatThresholds, out StatThresholdsPublic, m_StatThresholdsCount, false);
+ other.StatThresholds = StatThresholdsPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/DefinitionV2.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/DefinitionV2.cs
new file mode 100644
index 0000000..55e0c16
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/DefinitionV2.cs
@@ -0,0 +1,117 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a single achievement definition with localized text.
+ ///
+ public struct DefinitionV2
+ {
+ ///
+ /// Achievement ID that can be used to uniquely identify the achievement.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// Localized display name for the achievement when it has been unlocked.
+ ///
+ public Utf8String UnlockedDisplayName { get; set; }
+
+ ///
+ /// Localized description for the achievement when it has been unlocked.
+ ///
+ public Utf8String UnlockedDescription { get; set; }
+
+ ///
+ /// Localized display name for the achievement when it is locked or hidden.
+ ///
+ public Utf8String LockedDisplayName { get; set; }
+
+ ///
+ /// Localized description for the achievement when it is locked or hidden.
+ ///
+ public Utf8String LockedDescription { get; set; }
+
+ ///
+ /// Localized flavor text that can be used by the game in an arbitrary manner. This may be if there is no data configured in the dev portal.
+ ///
+ public Utf8String FlavorText { get; set; }
+
+ ///
+ /// URL of an icon to display for the achievement when it is unlocked. This may be if there is no data configured in the dev portal.
+ ///
+ public Utf8String UnlockedIconURL { get; set; }
+
+ ///
+ /// URL of an icon to display for the achievement when it is locked or hidden. This may be if there is no data configured in the dev portal.
+ ///
+ public Utf8String LockedIconURL { get; set; }
+
+ ///
+ /// if the achievement is hidden; otherwise.
+ ///
+ public bool IsHidden { get; set; }
+
+ ///
+ /// Array of `` that need to be satisfied to unlock this achievement. Consists of Name and Threshold Value.
+ ///
+ public StatThresholds[] StatThresholds { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct DefinitionV2Internal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+ private IntPtr m_UnlockedDisplayName;
+ private IntPtr m_UnlockedDescription;
+ private IntPtr m_LockedDisplayName;
+ private IntPtr m_LockedDescription;
+ private IntPtr m_FlavorText;
+ private IntPtr m_UnlockedIconURL;
+ private IntPtr m_LockedIconURL;
+ private int m_IsHidden;
+ private uint m_StatThresholdsCount;
+ private IntPtr m_StatThresholds;
+
+ public void Get(out DefinitionV2 other)
+ {
+ other = default;
+
+ Utf8String AchievementIdPublic;
+ Helper.Get(m_AchievementId, out AchievementIdPublic);
+ other.AchievementId = AchievementIdPublic;
+ Utf8String UnlockedDisplayNamePublic;
+ Helper.Get(m_UnlockedDisplayName, out UnlockedDisplayNamePublic);
+ other.UnlockedDisplayName = UnlockedDisplayNamePublic;
+ Utf8String UnlockedDescriptionPublic;
+ Helper.Get(m_UnlockedDescription, out UnlockedDescriptionPublic);
+ other.UnlockedDescription = UnlockedDescriptionPublic;
+ Utf8String LockedDisplayNamePublic;
+ Helper.Get(m_LockedDisplayName, out LockedDisplayNamePublic);
+ other.LockedDisplayName = LockedDisplayNamePublic;
+ Utf8String LockedDescriptionPublic;
+ Helper.Get(m_LockedDescription, out LockedDescriptionPublic);
+ other.LockedDescription = LockedDescriptionPublic;
+ Utf8String FlavorTextPublic;
+ Helper.Get(m_FlavorText, out FlavorTextPublic);
+ other.FlavorText = FlavorTextPublic;
+ Utf8String UnlockedIconURLPublic;
+ Helper.Get(m_UnlockedIconURL, out UnlockedIconURLPublic);
+ other.UnlockedIconURL = UnlockedIconURLPublic;
+ Utf8String LockedIconURLPublic;
+ Helper.Get(m_LockedIconURL, out LockedIconURLPublic);
+ other.LockedIconURL = LockedIconURLPublic;
+ bool IsHiddenPublic;
+ Helper.Get(m_IsHidden, out IsHiddenPublic);
+ other.IsHidden = IsHiddenPublic;
+ StatThresholds[] StatThresholdsPublic;
+ Helper.Get(m_StatThresholds, out StatThresholdsPublic, m_StatThresholdsCount, false);
+ other.StatThresholds = StatThresholdsPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetAchievementDefinitionCountOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetAchievementDefinitionCountOptions.cs
new file mode 100644
index 0000000..b7bde8f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetAchievementDefinitionCountOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetAchievementDefinitionCountOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetAchievementDefinitionCountOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref GetAchievementDefinitionCountOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.GETACHIEVEMENTDEFINITIONCOUNT_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetPlayerAchievementCountOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetPlayerAchievementCountOptions.cs
new file mode 100644
index 0000000..b928c5e
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetPlayerAchievementCountOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetPlayerAchievementCountOptions
+ {
+ ///
+ /// The Product User ID for the user whose achievement count is being retrieved.
+ ///
+ public ProductUserId UserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetPlayerAchievementCountOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UserId;
+
+ public void Set(ref GetPlayerAchievementCountOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.GETPLAYERACHIEVEMENTCOUNT_API_LATEST;
+ Helper.Set(other.UserId, ref m_UserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetUnlockedAchievementCountOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetUnlockedAchievementCountOptions.cs
new file mode 100644
index 0000000..1c52204
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/GetUnlockedAchievementCountOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetUnlockedAchievementCountOptions
+ {
+ ///
+ /// Product User ID for which to retrieve the unlocked achievement count
+ ///
+ public ProductUserId UserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetUnlockedAchievementCountOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UserId;
+
+ public void Set(ref GetUnlockedAchievementCountOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.GETUNLOCKEDACHIEVEMENTCOUNT_API_LATEST;
+ Helper.Set(other.UserId, ref m_UserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallback.cs
new file mode 100644
index 0000000..022b806
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallback.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+
+ ///
+ /// Function prototype definition for notifications that come from
+ ///
+ ///
+ /// A containing the output information and result
+ ///
+ public delegate void OnAchievementsUnlockedCallback(ref OnAchievementsUnlockedCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnAchievementsUnlockedCallbackInternal(ref OnAchievementsUnlockedCallbackInfoInternal data);
+
+ internal static class OnAchievementsUnlockedCallbackInternalImplementation
+ {
+ private static OnAchievementsUnlockedCallbackInternal s_Delegate;
+ public static OnAchievementsUnlockedCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnAchievementsUnlockedCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnAchievementsUnlockedCallbackInternal))]
+ public static void EntryPoint(ref OnAchievementsUnlockedCallbackInfoInternal data)
+ {
+ OnAchievementsUnlockedCallback callback;
+ OnAchievementsUnlockedCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackInfo.cs
new file mode 100644
index 0000000..426f970
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackInfo.cs
@@ -0,0 +1,71 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Output parameters for the Function.
+ ///
+ public struct OnAchievementsUnlockedCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Context that was passed into
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The Product User ID for the user who received the unlocked achievements notification
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// This member is not used and will always be set to .
+ ///
+ public Utf8String[] AchievementIds { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnAchievementsUnlockedCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_UserId;
+ private uint m_AchievementsCount;
+ private IntPtr m_AchievementIds;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnAchievementsUnlockedCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ ProductUserId UserIdPublic;
+ Helper.Get(m_UserId, out UserIdPublic);
+ other.UserId = UserIdPublic;
+ Utf8String[] AchievementIdsPublic;
+ Helper.Get(m_AchievementIds, out AchievementIdsPublic, m_AchievementsCount, true);
+ other.AchievementIds = AchievementIdsPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2.cs
new file mode 100644
index 0000000..38e57f7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+
+ ///
+ /// Function prototype definition for notifications that come from
+ ///
+ ///
+ /// An containing the output information and result
+ ///
+ public delegate void OnAchievementsUnlockedCallbackV2(ref OnAchievementsUnlockedCallbackV2Info data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnAchievementsUnlockedCallbackV2Internal(ref OnAchievementsUnlockedCallbackV2InfoInternal data);
+
+ internal static class OnAchievementsUnlockedCallbackV2InternalImplementation
+ {
+ private static OnAchievementsUnlockedCallbackV2Internal s_Delegate;
+ public static OnAchievementsUnlockedCallbackV2Internal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnAchievementsUnlockedCallbackV2Internal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnAchievementsUnlockedCallbackV2Internal))]
+ public static void EntryPoint(ref OnAchievementsUnlockedCallbackV2InfoInternal data)
+ {
+ OnAchievementsUnlockedCallbackV2 callback;
+ OnAchievementsUnlockedCallbackV2Info callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2Info.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2Info.cs
new file mode 100644
index 0000000..8d618cc
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnAchievementsUnlockedCallbackV2Info.cs
@@ -0,0 +1,79 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Output parameters for the Function.
+ ///
+ public struct OnAchievementsUnlockedCallbackV2Info : ICallbackInfo
+ {
+ ///
+ /// Context that was passed into
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The Product User ID for the user who received the unlocked achievements notification
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// The Achievement ID for the achievement that was unlocked. Pass this to to get the full achievement information.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// POSIX timestamp when the achievement was unlocked.
+ ///
+ public DateTimeOffset? UnlockTime { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnAchievementsUnlockedCallbackV2InfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_UserId;
+ private IntPtr m_AchievementId;
+ private long m_UnlockTime;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnAchievementsUnlockedCallbackV2Info other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ ProductUserId UserIdPublic;
+ Helper.Get(m_UserId, out UserIdPublic);
+ other.UserId = UserIdPublic;
+ Utf8String AchievementIdPublic;
+ Helper.Get(m_AchievementId, out AchievementIdPublic);
+ other.AchievementId = AchievementIdPublic;
+ DateTimeOffset? UnlockTimePublic;
+ Helper.Get(m_UnlockTime, out UnlockTimePublic);
+ other.UnlockTime = UnlockTimePublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallback.cs
new file mode 100644
index 0000000..0658abb
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallback.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+
+ ///
+ /// Function prototype definition for callbacks passed to
+ ///
+ ///
+ /// An containing the output information and result
+ ///
+ public delegate void OnQueryDefinitionsCompleteCallback(ref OnQueryDefinitionsCompleteCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnQueryDefinitionsCompleteCallbackInternal(ref OnQueryDefinitionsCompleteCallbackInfoInternal data);
+
+ internal static class OnQueryDefinitionsCompleteCallbackInternalImplementation
+ {
+ private static OnQueryDefinitionsCompleteCallbackInternal s_Delegate;
+ public static OnQueryDefinitionsCompleteCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnQueryDefinitionsCompleteCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnQueryDefinitionsCompleteCallbackInternal))]
+ public static void EntryPoint(ref OnQueryDefinitionsCompleteCallbackInfoInternal data)
+ {
+ OnQueryDefinitionsCompleteCallback callback;
+ OnQueryDefinitionsCompleteCallbackInfo callbackInfo;
+ if (Helper.TryGetAndRemoveCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallbackInfo.cs
new file mode 100644
index 0000000..aaecdf1
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryDefinitionsCompleteCallbackInfo.cs
@@ -0,0 +1,59 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Data containing the result information for a query definitions request.
+ ///
+ public struct OnQueryDefinitionsCompleteCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// The code for the operation. indicates that the operation succeeded; other codes indicate errors.
+ ///
+ public Result ResultCode { get; set; }
+
+ ///
+ /// User-defined context that was passed into .
+ ///
+ public object ClientData { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return ResultCode;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnQueryDefinitionsCompleteCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private Result m_ResultCode;
+ private IntPtr m_ClientData;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnQueryDefinitionsCompleteCallbackInfo other)
+ {
+ other = default;
+
+ other.ResultCode = m_ResultCode;
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallback.cs
new file mode 100644
index 0000000..a36b5ab
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallback.cs
@@ -0,0 +1,49 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+
+ ///
+ /// Function prototype definition for callbacks passed to
+ ///
+ ///
+ ///
+ /// An containing the output information and result
+ ///
+ public delegate void OnQueryPlayerAchievementsCompleteCallback(ref OnQueryPlayerAchievementsCompleteCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnQueryPlayerAchievementsCompleteCallbackInternal(ref OnQueryPlayerAchievementsCompleteCallbackInfoInternal data);
+
+ internal static class OnQueryPlayerAchievementsCompleteCallbackInternalImplementation
+ {
+ private static OnQueryPlayerAchievementsCompleteCallbackInternal s_Delegate;
+ public static OnQueryPlayerAchievementsCompleteCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnQueryPlayerAchievementsCompleteCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnQueryPlayerAchievementsCompleteCallbackInternal))]
+ public static void EntryPoint(ref OnQueryPlayerAchievementsCompleteCallbackInfoInternal data)
+ {
+ OnQueryPlayerAchievementsCompleteCallback callback;
+ OnQueryPlayerAchievementsCompleteCallbackInfo callbackInfo;
+ if (Helper.TryGetAndRemoveCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallbackInfo.cs
new file mode 100644
index 0000000..8cce108
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnQueryPlayerAchievementsCompleteCallbackInfo.cs
@@ -0,0 +1,77 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Data containing the result information for querying a player's achievements request.
+ ///
+ public struct OnQueryPlayerAchievementsCompleteCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// The code for the operation. indicates that the operation succeeded; other codes indicate errors.
+ ///
+ public Result ResultCode { get; set; }
+
+ ///
+ /// Context that was passed into .
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The Product User ID whose achievements were retrieved.
+ ///
+ public ProductUserId TargetUserId { get; set; }
+
+ ///
+ /// The Product User ID of the user who initiated this request. For a Dedicated Server this should be .
+ ///
+ public ProductUserId LocalUserId { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return ResultCode;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnQueryPlayerAchievementsCompleteCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private Result m_ResultCode;
+ private IntPtr m_ClientData;
+ private IntPtr m_TargetUserId;
+ private IntPtr m_LocalUserId;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnQueryPlayerAchievementsCompleteCallbackInfo other)
+ {
+ other = default;
+
+ other.ResultCode = m_ResultCode;
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ ProductUserId TargetUserIdPublic;
+ Helper.Get(m_TargetUserId, out TargetUserIdPublic);
+ other.TargetUserId = TargetUserIdPublic;
+ ProductUserId LocalUserIdPublic;
+ Helper.Get(m_LocalUserId, out LocalUserIdPublic);
+ other.LocalUserId = LocalUserIdPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallback.cs
new file mode 100644
index 0000000..f304f39
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallback.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+
+ ///
+ /// Function prototype definition for callbacks passed to
+ ///
+ ///
+ /// An containing the output information and result
+ ///
+ public delegate void OnUnlockAchievementsCompleteCallback(ref OnUnlockAchievementsCompleteCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnUnlockAchievementsCompleteCallbackInternal(ref OnUnlockAchievementsCompleteCallbackInfoInternal data);
+
+ internal static class OnUnlockAchievementsCompleteCallbackInternalImplementation
+ {
+ private static OnUnlockAchievementsCompleteCallbackInternal s_Delegate;
+ public static OnUnlockAchievementsCompleteCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnUnlockAchievementsCompleteCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnUnlockAchievementsCompleteCallbackInternal))]
+ public static void EntryPoint(ref OnUnlockAchievementsCompleteCallbackInfoInternal data)
+ {
+ OnUnlockAchievementsCompleteCallback callback;
+ OnUnlockAchievementsCompleteCallbackInfo callbackInfo;
+ if (Helper.TryGetAndRemoveCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallbackInfo.cs
new file mode 100644
index 0000000..5acaa25
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/OnUnlockAchievementsCompleteCallbackInfo.cs
@@ -0,0 +1,75 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Data containing the result information for unlocking achievements request.
+ ///
+ public struct OnUnlockAchievementsCompleteCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// The code for the operation. indicates that the operation succeeded; other codes indicate errors.
+ ///
+ public Result ResultCode { get; set; }
+
+ ///
+ /// Context that was passed into .
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The Product User ID of the user who initiated this request.
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// The number of achievements that the operation unlocked.
+ ///
+ public uint AchievementsCount { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return ResultCode;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnUnlockAchievementsCompleteCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private Result m_ResultCode;
+ private IntPtr m_ClientData;
+ private IntPtr m_UserId;
+ private uint m_AchievementsCount;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnUnlockAchievementsCompleteCallbackInfo other)
+ {
+ other = default;
+
+ other.ResultCode = m_ResultCode;
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ ProductUserId UserIdPublic;
+ Helper.Get(m_UserId, out UserIdPublic);
+ other.UserId = UserIdPublic;
+ other.AchievementsCount = m_AchievementsCount;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerAchievement.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerAchievement.cs
new file mode 100644
index 0000000..2e27592
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerAchievement.cs
@@ -0,0 +1,100 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a single player achievement.
+ ///
+ public struct PlayerAchievement
+ {
+ ///
+ /// This achievement's unique identifier.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// Progress towards completing this achievement (as a percentage).
+ ///
+ public double Progress { get; set; }
+
+ ///
+ /// The POSIX timestamp when the achievement was unlocked. If the achievement has not been unlocked, this value will be .
+ ///
+ public DateTimeOffset? UnlockTime { get; set; }
+
+ ///
+ /// Array of structures containing information about stat thresholds used to unlock the achievement and the player's current values for those stats.
+ ///
+ public PlayerStatInfo[] StatInfo { get; set; }
+
+ ///
+ /// Localized display name for the achievement based on this specific player's current progress on the achievement.
+ /// The current progress is updated when succeeds and when an achievement is unlocked.
+ ///
+ public Utf8String DisplayName { get; set; }
+
+ ///
+ /// Localized description for the achievement based on this specific player's current progress on the achievement.
+ /// The current progress is updated when succeeds and when an achievement is unlocked.
+ ///
+ public Utf8String Description { get; set; }
+
+ ///
+ /// URL of an icon to display for the achievement based on this specific player's current progress on the achievement. This may be if there is no data configured in the dev portal.
+ /// The current progress is updated when succeeds and when an achievement is unlocked.
+ ///
+ public Utf8String IconURL { get; set; }
+
+ ///
+ /// Localized flavor text that can be used by the game in an arbitrary manner. This may be if there is no data configured in the dev portal.
+ ///
+ public Utf8String FlavorText { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PlayerAchievementInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+ private double m_Progress;
+ private long m_UnlockTime;
+ private int m_StatInfoCount;
+ private IntPtr m_StatInfo;
+ private IntPtr m_DisplayName;
+ private IntPtr m_Description;
+ private IntPtr m_IconURL;
+ private IntPtr m_FlavorText;
+
+ public void Get(out PlayerAchievement other)
+ {
+ other = default;
+
+ Utf8String AchievementIdPublic;
+ Helper.Get(m_AchievementId, out AchievementIdPublic);
+ other.AchievementId = AchievementIdPublic;
+ other.Progress = m_Progress;
+ DateTimeOffset? UnlockTimePublic;
+ Helper.Get(m_UnlockTime, out UnlockTimePublic);
+ other.UnlockTime = UnlockTimePublic;
+ PlayerStatInfo[] StatInfoPublic;
+ Helper.Get(m_StatInfo, out StatInfoPublic, m_StatInfoCount, false);
+ other.StatInfo = StatInfoPublic;
+ Utf8String DisplayNamePublic;
+ Helper.Get(m_DisplayName, out DisplayNamePublic);
+ other.DisplayName = DisplayNamePublic;
+ Utf8String DescriptionPublic;
+ Helper.Get(m_Description, out DescriptionPublic);
+ other.Description = DescriptionPublic;
+ Utf8String IconURLPublic;
+ Helper.Get(m_IconURL, out IconURLPublic);
+ other.IconURL = IconURLPublic;
+ Utf8String FlavorTextPublic;
+ Helper.Get(m_FlavorText, out FlavorTextPublic);
+ other.FlavorText = FlavorTextPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerStatInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerStatInfo.cs
new file mode 100644
index 0000000..d5399be
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/PlayerStatInfo.cs
@@ -0,0 +1,50 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a collection of stat info data.
+ ///
+ ///
+ public struct PlayerStatInfo
+ {
+ ///
+ /// The name of the stat.
+ ///
+ public Utf8String Name { get; set; }
+
+ ///
+ /// The current value of the stat.
+ ///
+ public int CurrentValue { get; set; }
+
+ ///
+ /// The threshold value of the stat, used in determining when to unlock an achievement.
+ ///
+ public int ThresholdValue { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PlayerStatInfoInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_Name;
+ private int m_CurrentValue;
+ private int m_ThresholdValue;
+
+ public void Get(out PlayerStatInfo other)
+ {
+ other = default;
+
+ Utf8String NamePublic;
+ Helper.Get(m_Name, out NamePublic);
+ other.Name = NamePublic;
+ other.CurrentValue = m_CurrentValue;
+ other.ThresholdValue = m_ThresholdValue;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryDefinitionsOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryDefinitionsOptions.cs
new file mode 100644
index 0000000..7bc77cb
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryDefinitionsOptions.cs
@@ -0,0 +1,59 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct QueryDefinitionsOptions
+ {
+ ///
+ /// Product User ID for user who is querying definitions.
+ /// The localized text returned will be based on the locale code of the given user if they have a linked Epic Account ID.
+ /// The localized text returned can also be overridden using to override the locale.
+ /// If the locale code is not overridden and LocalUserId is not valid, default text will be returned.
+ ///
+ public ProductUserId LocalUserId { get; set; }
+
+ ///
+ /// Deprecated
+ ///
+ public EpicAccountId EpicUserId_DEPRECATED { get; set; }
+
+ ///
+ /// Deprecated
+ ///
+ public Utf8String[] HiddenAchievementIds_DEPRECATED { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct QueryDefinitionsOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_LocalUserId;
+ private IntPtr m_EpicUserId_DEPRECATED;
+ private IntPtr m_HiddenAchievementIds_DEPRECATED;
+ private uint m_HiddenAchievementsCount_DEPRECATED;
+
+ public void Set(ref QueryDefinitionsOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.QUERYDEFINITIONS_API_LATEST;
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ Helper.Set(other.EpicUserId_DEPRECATED, ref m_EpicUserId_DEPRECATED);
+ Helper.Set(other.HiddenAchievementIds_DEPRECATED, ref m_HiddenAchievementIds_DEPRECATED, out m_HiddenAchievementsCount_DEPRECATED, true);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_LocalUserId);
+ Helper.Dispose(ref m_EpicUserId_DEPRECATED);
+ Helper.Dispose(ref m_HiddenAchievementIds_DEPRECATED);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryPlayerAchievementsOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryPlayerAchievementsOptions.cs
new file mode 100644
index 0000000..5576432
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/QueryPlayerAchievementsOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct QueryPlayerAchievementsOptions
+ {
+ ///
+ /// The Product User ID for the user whose achievements are to be retrieved.
+ ///
+ public ProductUserId TargetUserId { get; set; }
+
+ ///
+ /// The Product User ID for the user who is querying for player achievements. For a Dedicated Server this should be .
+ ///
+ public ProductUserId LocalUserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct QueryPlayerAchievementsOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_TargetUserId;
+ private IntPtr m_LocalUserId;
+
+ public void Set(ref QueryPlayerAchievementsOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.QUERYPLAYERACHIEVEMENTS_API_LATEST;
+ Helper.Set(other.TargetUserId, ref m_TargetUserId);
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_TargetUserId);
+ Helper.Dispose(ref m_LocalUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/StatThresholds.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/StatThresholds.cs
new file mode 100644
index 0000000..7664e1d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/StatThresholds.cs
@@ -0,0 +1,49 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a collection of stat threshold data.
+ ///
+ /// The threshold will depend on the stat aggregate type:
+ /// LATEST (Tracks the latest value)
+ /// MAX (Tracks the maximum value)
+ /// MIN (Tracks the minimum value)
+ /// SUM (Generates a rolling sum of the value)
+ ///
+ ///
+ public struct StatThresholds
+ {
+ ///
+ /// The name of the stat.
+ ///
+ public Utf8String Name { get; set; }
+
+ ///
+ /// The value that the stat must surpass to satisfy the requirement for unlocking an achievement.
+ ///
+ public int Threshold { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct StatThresholdsInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_Name;
+ private int m_Threshold;
+
+ public void Get(out StatThresholds other)
+ {
+ other = default;
+
+ Utf8String NamePublic;
+ Helper.Get(m_Name, out NamePublic);
+ other.Name = NamePublic;
+ other.Threshold = m_Threshold;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockAchievementsOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockAchievementsOptions.cs
new file mode 100644
index 0000000..6445cca
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockAchievementsOptions.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct UnlockAchievementsOptions
+ {
+ ///
+ /// The Product User ID for the user whose achievements we want to unlock.
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// An array of Achievement IDs to unlock.
+ ///
+ public Utf8String[] AchievementIds { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnlockAchievementsOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UserId;
+ private IntPtr m_AchievementIds;
+ private uint m_AchievementsCount;
+
+ public void Set(ref UnlockAchievementsOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AchievementsInterface.UNLOCKACHIEVEMENTS_API_LATEST;
+ Helper.Set(other.UserId, ref m_UserId);
+ Helper.Set(other.AchievementIds, ref m_AchievementIds, out m_AchievementsCount, true);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UserId);
+ Helper.Dispose(ref m_AchievementIds);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockedAchievement.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockedAchievement.cs
new file mode 100644
index 0000000..247753d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Achievements/UnlockedAchievement.cs
@@ -0,0 +1,44 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Achievements
+{
+ ///
+ /// Contains information about a single unlocked achievement.
+ ///
+ public struct UnlockedAchievement
+ {
+ ///
+ /// Achievement ID that can be used to uniquely identify the unlocked achievement.
+ ///
+ public Utf8String AchievementId { get; set; }
+
+ ///
+ /// If not then this is the POSIX timestamp that the achievement was unlocked.
+ ///
+ public DateTimeOffset? UnlockTime { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnlockedAchievementInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AchievementId;
+ private long m_UnlockTime;
+
+ public void Get(out UnlockedAchievement other)
+ {
+ other = default;
+
+ Utf8String AchievementIdPublic;
+ Helper.Get(m_AchievementId, out AchievementIdPublic);
+ other.AchievementId = AchievementIdPublic;
+ DateTimeOffset? UnlockTimePublic;
+ Helper.Get(m_UnlockTime, out UnlockTimePublic);
+ other.UnlockTime = UnlockTimePublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Android/AndroidBindings.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Android/AndroidBindings.cs
new file mode 100644
index 0000000..c2b53f2
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Android/AndroidBindings.cs
@@ -0,0 +1,70 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+#if UNITY_EDITOR
+ #define EOS_EDITOR
+#endif
+
+#if EOS_EDITOR
+ #define EOS_DYNAMIC_BINDINGS
+#endif
+
+#if EOS_DYNAMIC_BINDINGS
+ #if EOS_PLATFORM_WINDOWS_32
+ #define EOS_DYNAMIC_BINDINGS_MANGLING_WINDOWS_32
+ #elif EOS_PLATFORM_OSX || EOS_PLATFORM_IOS
+ #define EOS_DYNAMIC_BINDINGS_MANGLING_APPLE
+ #else
+ #define EOS_DYNAMIC_BINDINGS_MANGLING_STANDARD
+ #endif
+#endif
+
+#if UNITY_ANDROID || __ANDROID__
+ #define EOS_PLATFORM_ANDROID
+#endif
+
+#if EOS_PLATFORM_ANDROID
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ public static partial class AndroidBindings
+ {
+#if EOS_DYNAMIC_BINDINGS_MANGLING_STANDARD
+ private const string EOS_Initialize_AndroidName = "EOS_Initialize";
+#endif
+
+#if EOS_DYNAMIC_BINDINGS
+ ///
+ /// Hooks dynamic bindings.
+ ///
+ /// A handle to the library to find functions in. The type is platform dependent, but would typically be an .
+ /// A delegate that takes a library handle and function name, and returns an which is a pointer to the function within the library.
+ public static void Hook(TLibraryHandle libraryHandle, Func getFunctionPointer)
+ {
+ IntPtr functionPointer;
+
+ functionPointer = getFunctionPointer(libraryHandle, EOS_Initialize_AndroidName);
+ if (functionPointer == IntPtr.Zero) throw new DynamicBindingException(EOS_Initialize_AndroidName);
+ EOS_Initialize_Android = (EOS_Initialize_AndroidDelegate)Marshal.GetDelegateForFunctionPointer(functionPointer, typeof(EOS_Initialize_AndroidDelegate));
+ }
+
+ ///
+ /// Unhooks dynamic bindings.
+ ///
+ public static void Unhook()
+ {
+ EOS_Initialize_Android = null;
+ }
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate Result EOS_Initialize_AndroidDelegate(ref Platform.AndroidInitializeOptionsInternal options);
+ internal static EOS_Initialize_AndroidDelegate EOS_Initialize_Android;
+#else
+ [DllImport(Common.LIBRARY_NAME, EntryPoint="EOS_Initialize", CallingConvention=Common.LIBRARY_CALLING_CONVENTION)]
+ internal static extern Result EOS_Initialize_Android(ref Platform.AndroidInitializeOptionsInternal options);
+#endif
+ }
+}
+#endif
\ No newline at end of file
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptions.cs
new file mode 100644
index 0000000..0bfcb2f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptions.cs
@@ -0,0 +1,110 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+#if UNITY_ANDROID || __ANDROID__
+ #define EOS_PLATFORM_ANDROID
+#endif
+
+#if EOS_PLATFORM_ANDROID
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Platform
+{
+ ///
+ /// Options for initializing the Epic Online Services SDK.
+ ///
+ public struct AndroidInitializeOptions
+ {
+ ///
+ /// A custom memory allocator, if desired.
+ ///
+ public IntPtr AllocateMemoryFunction { get; set; }
+
+ ///
+ /// A corresponding memory reallocator. If the AllocateMemoryFunction is , then this field must also be .
+ ///
+ public IntPtr ReallocateMemoryFunction { get; set; }
+
+ ///
+ /// A corresponding memory releaser. If the AllocateMemoryFunction is , then this field must also be .
+ ///
+ public IntPtr ReleaseMemoryFunction { get; set; }
+
+ ///
+ /// The name of the product using the Epic Online Services SDK.
+ ///
+ /// The name is required to be non-empty and at maximum of bytes long.
+ /// The buffer can consist of the following characters:
+ /// A-Z, a-z, 0-9, dot, underscore, space, exclamation mark, question mark, and sign, hyphen, parenthesis, plus, minus, colon.
+ ///
+ public Utf8String ProductName { get; set; }
+
+ ///
+ /// Product version of the running application.
+ ///
+ /// The version is required to be non-empty and at maximum of bytes long.
+ /// The buffer can consist of the following characters:
+ /// A-Z, a-z, 0-9, dot, underscore, space, exclamation mark, question mark, and sign, hyphen, parenthesis, plus, minus, colon.
+ ///
+ public Utf8String ProductVersion { get; set; }
+
+ ///
+ /// A reserved field that should always be .
+ ///
+ public IntPtr Reserved { get; set; }
+
+ ///
+ /// This field is for system specific initialization if any.
+ ///
+ /// If provided then the structure will be located in /eos_.h.
+ /// The structure will be named EOS__InitializeOptions.
+ ///
+ public AndroidInitializeOptionsSystemInitializeOptions? SystemInitializeOptions { get; set; }
+
+ ///
+ /// The thread affinity override values for each category of thread.
+ ///
+ public InitializeThreadAffinity? OverrideThreadAffinity { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AndroidInitializeOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AllocateMemoryFunction;
+ private IntPtr m_ReallocateMemoryFunction;
+ private IntPtr m_ReleaseMemoryFunction;
+ private IntPtr m_ProductName;
+ private IntPtr m_ProductVersion;
+ private IntPtr m_Reserved;
+ private IntPtr m_SystemInitializeOptions;
+ private IntPtr m_OverrideThreadAffinity;
+
+ public void Set(ref AndroidInitializeOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = PlatformInterface.INITIALIZE_API_LATEST;
+ m_AllocateMemoryFunction = other.AllocateMemoryFunction;
+ m_ReallocateMemoryFunction = other.ReallocateMemoryFunction;
+ m_ReleaseMemoryFunction = other.ReleaseMemoryFunction;
+ Helper.Set(other.ProductName, ref m_ProductName);
+ Helper.Set(other.ProductVersion, ref m_ProductVersion);
+ m_Reserved = other.Reserved;
+ if (m_Reserved == IntPtr.Zero) Helper.Set(new int[] { 1, 1 }, ref m_Reserved, false);
+ Helper.Set(other.SystemInitializeOptions, ref m_SystemInitializeOptions);
+ Helper.Set(other.OverrideThreadAffinity, ref m_OverrideThreadAffinity);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_ProductName);
+ Helper.Dispose(ref m_ProductVersion);
+ Helper.Dispose(ref m_Reserved);
+ Helper.Dispose(ref m_SystemInitializeOptions);
+ Helper.Dispose(ref m_OverrideThreadAffinity);
+ }
+ }
+}
+#endif
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptionsSystemInitializeOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptionsSystemInitializeOptions.cs
new file mode 100644
index 0000000..d605816
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/AndroidInitializeOptionsSystemInitializeOptions.cs
@@ -0,0 +1,61 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+#if UNITY_ANDROID || __ANDROID__
+ #define EOS_PLATFORM_ANDROID
+#endif
+
+#if EOS_PLATFORM_ANDROID
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Platform
+{
+ ///
+ /// Options for initializing mount paths required for some platforms.
+ ///
+ public struct AndroidInitializeOptionsSystemInitializeOptions
+ {
+ ///
+ /// Reserved, set to
+ ///
+ public IntPtr Reserved { get; set; }
+
+ ///
+ /// Full internal directory path. Can be
+ ///
+ public Utf8String OptionalInternalDirectory { get; set; }
+
+ ///
+ /// Full external directory path. Can be
+ ///
+ public Utf8String OptionalExternalDirectory { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AndroidInitializeOptionsSystemInitializeOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_Reserved;
+ private IntPtr m_OptionalInternalDirectory;
+ private IntPtr m_OptionalExternalDirectory;
+
+ public void Set(ref AndroidInitializeOptionsSystemInitializeOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = PlatformInterface.ANDROID_INITIALIZEOPTIONS_API_LATEST;
+ m_Reserved = other.Reserved;
+ Helper.Set(other.OptionalInternalDirectory, ref m_OptionalInternalDirectory);
+ Helper.Set(other.OptionalExternalDirectory, ref m_OptionalExternalDirectory);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Reserved);
+ Helper.Dispose(ref m_OptionalInternalDirectory);
+ Helper.Dispose(ref m_OptionalExternalDirectory);
+ }
+ }
+}
+#endif
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/PlatformInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/PlatformInterface.cs
new file mode 100644
index 0000000..40da256
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Android/Platform/PlatformInterface.cs
@@ -0,0 +1,50 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+#if UNITY_ANDROID || __ANDROID__
+ #define EOS_PLATFORM_ANDROID
+#endif
+
+#if EOS_PLATFORM_ANDROID
+using System;
+
+namespace Epic.OnlineServices.Platform
+{
+ public sealed partial class PlatformInterface
+ {
+ ///
+ /// The most recent version of the structure.
+ ///
+ public const int ANDROID_INITIALIZEOPTIONS_API_LATEST = 2;
+
+ ///
+ /// Initialize the Epic Online Services SDK.
+ ///
+ /// Before calling any other function in the SDK, clients must call this function.
+ ///
+ /// This function must only be called one time and must have a corresponding call.
+ ///
+ ///
+ /// - The initialization options to use for the SDK.
+ ///
+ ///
+ /// An is returned to indicate success or an error.
+ /// is returned if the SDK successfully initializes.
+ /// is returned if the function has already been called.
+ /// is returned if the provided options are invalid.
+ ///
+ public static Result Initialize(ref AndroidInitializeOptions options)
+ {
+ var optionsInternal = default(AndroidInitializeOptionsInternal);
+ optionsInternal.Set(ref options);
+
+
+ var callResult = AndroidBindings.EOS_Initialize_Android(ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+ }
+}
+#endif
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddExternalIntegrityCatalogOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddExternalIntegrityCatalogOptions.cs
new file mode 100644
index 0000000..5d5e389
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddExternalIntegrityCatalogOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddExternalIntegrityCatalogOptions
+ {
+ ///
+ /// UTF-8 path to the .bin catalog file to add
+ ///
+ public Utf8String PathToBinFile { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddExternalIntegrityCatalogOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PathToBinFile;
+
+ public void Set(ref AddExternalIntegrityCatalogOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDEXTERNALINTEGRITYCATALOG_API_LATEST;
+ Helper.Set(other.PathToBinFile, ref m_PathToBinFile);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_PathToBinFile);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyClientIntegrityViolatedOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyClientIntegrityViolatedOptions.cs
new file mode 100644
index 0000000..31db734
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyClientIntegrityViolatedOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyClientIntegrityViolatedOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyClientIntegrityViolatedOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyClientIntegrityViolatedOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDNOTIFYCLIENTINTEGRITYVIOLATED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToPeerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToPeerOptions.cs
new file mode 100644
index 0000000..07d3e45
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToPeerOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyMessageToPeerOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyMessageToPeerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyMessageToPeerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDNOTIFYMESSAGETOPEER_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToServerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToServerOptions.cs
new file mode 100644
index 0000000..ce4b9f2
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyMessageToServerOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyMessageToServerOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyMessageToServerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyMessageToServerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDNOTIFYMESSAGETOSERVER_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerActionRequiredOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerActionRequiredOptions.cs
new file mode 100644
index 0000000..4a9b7ba
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerActionRequiredOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyPeerActionRequiredOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyPeerActionRequiredOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyPeerActionRequiredOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDNOTIFYPEERACTIONREQUIRED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerAuthStatusChangedOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerAuthStatusChangedOptions.cs
new file mode 100644
index 0000000..27278b1
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AddNotifyPeerAuthStatusChangedOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyPeerAuthStatusChangedOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyPeerAuthStatusChangedOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyPeerAuthStatusChangedOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ADDNOTIFYPEERAUTHSTATUSCHANGED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientInterface.cs
new file mode 100644
index 0000000..a26b208
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientInterface.cs
@@ -0,0 +1,818 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ public sealed partial class AntiCheatClientInterface : Handle
+ {
+ public AntiCheatClientInterface()
+ {
+ }
+
+ public AntiCheatClientInterface(IntPtr innerHandle) : base(innerHandle)
+ {
+ }
+
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDEXTERNALINTEGRITYCATALOG_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYCLIENTINTEGRITYVIOLATED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYMESSAGETOPEER_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYMESSAGETOSERVER_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYPEERACTIONREQUIRED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYPEERAUTHSTATUSCHANGED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int BEGINSESSION_API_LATEST = 3;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ENDSESSION_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETMODULEBUILDID_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETPROTECTMESSAGEOUTPUTLENGTH_API_LATEST = 1;
+ ///
+ /// Maximum size of an individual message provided through .
+ ///
+ public const int ONMESSAGETOPEERCALLBACK_MAX_MESSAGE_SIZE = 512;
+ ///
+ /// Maximum size of an individual message provided through .
+ ///
+ public const int ONMESSAGETOSERVERCALLBACK_MAX_MESSAGE_SIZE = 512;
+ ///
+ /// A special peer handle that represents the client itself.
+ /// It does not need to be registered or unregistered and is
+ /// used in OnPeerActionRequiredCallback to quickly signal to the user
+ /// that they will not be able to join online play.
+ ///
+ public static readonly IntPtr PEER_SELF = (IntPtr)(-1);
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int POLLSTATUS_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int PROTECTMESSAGE_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int RECEIVEMESSAGEFROMPEER_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int RECEIVEMESSAGEFROMSERVER_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int REGISTERPEER_API_LATEST = 3;
+ ///
+ /// The maximum value for the AuthenticationTimeout parameter in the struct.
+ ///
+ public const int REGISTERPEER_MAX_AUTHENTICATIONTIMEOUT = 120;
+ ///
+ /// The minimum value for the AuthenticationTimeout parameter in the struct.
+ ///
+ public const int REGISTERPEER_MIN_AUTHENTICATIONTIMEOUT = 40;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int RESERVED01_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int RESERVED02_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int UNPROTECTMESSAGE_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int UNREGISTERPEER_API_LATEST = 1;
+
+ ///
+ /// Optional. Adds an integrity catalog and certificate pair from outside the game directory,
+ /// for example to support mods that load from elsewhere.
+ /// Mode: All
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the integrity catalog was added successfully
+ /// - - If input data was invalid
+ ///
+ public Result AddExternalIntegrityCatalog(ref AddExternalIntegrityCatalogOptions options)
+ {
+ var optionsInternal = default(AddExternalIntegrityCatalogOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddExternalIntegrityCatalog(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Add a callback when a message must be displayed to the local client informing them on a local integrity violation,
+ /// which will prevent further online play.
+ /// Mode: Any.
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyClientIntegrityViolated(ref AddNotifyClientIntegrityViolatedOptions options, object clientData, OnClientIntegrityViolatedCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyClientIntegrityViolatedOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddNotifyClientIntegrityViolated(InnerHandle, ref optionsInternal, clientDataPointer, OnClientIntegrityViolatedCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add a callback issued when a new message must be dispatched to a connected peer. The bound function will only be called
+ /// between a successful call to and the matching call in mode .
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyMessageToPeer(ref AddNotifyMessageToPeerOptions options, object clientData, OnMessageToPeerCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyMessageToPeerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddNotifyMessageToPeer(InnerHandle, ref optionsInternal, clientDataPointer, OnMessageToPeerCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add a callback issued when a new message must be dispatched to the game server. The bound function will only be called
+ /// between a successful call to and the matching call in mode .
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyMessageToServer(ref AddNotifyMessageToServerOptions options, object clientData, OnMessageToServerCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyMessageToServerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddNotifyMessageToServer(InnerHandle, ref optionsInternal, clientDataPointer, OnMessageToServerCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add a callback issued when an action must be applied to a connected client. The bound function will only be called
+ /// between a successful call to and the matching call in mode .
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyPeerActionRequired(ref AddNotifyPeerActionRequiredOptions options, object clientData, OnPeerActionRequiredCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyPeerActionRequiredOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddNotifyPeerActionRequired(InnerHandle, ref optionsInternal, clientDataPointer, OnPeerActionRequiredCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add an optional callback issued when a connected peer's authentication status changes. The bound function will only be called
+ /// between a successful call to and the matching call in mode .
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyPeerAuthStatusChanged(ref AddNotifyPeerAuthStatusChangedOptions options, object clientData, OnPeerAuthStatusChangedCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyPeerAuthStatusChangedOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged(InnerHandle, ref optionsInternal, clientDataPointer, OnPeerAuthStatusChangedCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Begins a multiplayer game session. After this call returns successfully, the client is ready to exchange
+ /// anti-cheat messages with a game server or peer(s). When leaving one game session and connecting to a
+ /// different one, a new anti-cheat session must be created by calling and again.
+ /// Mode: All
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the session was started successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result BeginSession(ref BeginSessionOptions options)
+ {
+ var optionsInternal = default(BeginSessionOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_BeginSession(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Ends a multiplayer game session, either by leaving an ongoing session or shutting it down entirely.
+ /// Mode: All
+ ///
+ /// Must be called when the multiplayer session ends, or when the local user leaves a session in progress.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the session was ended normally
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result EndSession(ref EndSessionOptions options)
+ {
+ var optionsInternal = default(EndSessionOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_EndSession(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Get the build id of the loaded anti-cheat client module.
+ /// Mode: All
+ ///
+ /// NOTE: This is intended for analytics or troubleshooting purposes only. The build identifier should be treated as an arbitrary value
+ /// and never used in relative comparisons. For example, it is incorrect to assume that a change in the behavior of the anti-cheat module
+ /// introduced with build N is also present in build N+1 because we may backport bugfixes and compatibility fixes to older releases.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, the build id of the loaded anti-cheat client module.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the build id was provided successfully
+ /// - - If input data was invalid
+ /// - - If the platform does not use anti-cheat client modules or the loaded anti-cheat client module is too old to support this function.
+ /// - - If the platform supports anti-cheat client modules but none is currently loaded (failsafe NullClient mode, launched without bootstrapper, etc).
+ ///
+ public Result GetModuleBuildId(ref GetModuleBuildIdOptions options, out uint outModuleBuildId)
+ {
+ var optionsInternal = default(GetModuleBuildIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_GetModuleBuildId(InnerHandle, ref optionsInternal, out outModuleBuildId);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Calculates the required decrypted buffer size for a given input data length.
+ /// This will not change for a given SDK version, and allows one time allocation of reusable buffers.
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, the OutBuffer length in bytes that is required to call ProtectMessage on the given input size.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the output length was calculated successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result GetProtectMessageOutputLength(ref GetProtectMessageOutputLengthOptions options, out uint outBufferSizeBytes)
+ {
+ var optionsInternal = default(GetProtectMessageOutputLengthOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_GetProtectMessageOutputLength(InnerHandle, ref optionsInternal, out outBufferSizeBytes);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Polls for changes in client integrity status.
+ /// Mode: All
+ ///
+ /// The purpose of this function is to allow the game to display information
+ /// about anti-cheat integrity problems to the user. These are often the result of a
+ /// corrupt game installation rather than cheating attempts. This function does not
+ /// check for violations, it only provides information about violations which have
+ /// automatically been discovered by the anti-cheat client. Such a violation may occur
+ /// at any time and afterwards the user will be unable to join any protected multiplayer
+ /// session until after restarting the game. Note that this function returns
+ /// when everything is normal and there is no violation to display.
+ ///
+ /// NOTE: This API is deprecated. In order to get client status updates,
+ /// use AddNotifyClientIntegrityViolated to register a callback that will
+ /// be called when violations are triggered.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, receives a code describing the violation that occurred.
+ ///
+ ///
+ /// On success, receives a describing the violation which should be displayed to the user.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If violation information was returned successfully
+ /// - - If OutMessage is too small to receive the message . Call again with a larger OutMessage.
+ /// - - If no violation has occurred since the last call
+ ///
+ public Result PollStatus(ref PollStatusOptions options, out AntiCheatClientViolationType outViolationType, out Utf8String outMessage)
+ {
+ var optionsInternal = default(PollStatusOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outMessagePointer = Helper.AddAllocation(options.OutMessageLength);
+
+ var callResult = Bindings.EOS_AntiCheatClient_PollStatus(InnerHandle, ref optionsInternal, out outViolationType, outMessagePointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outMessagePointer, out outMessage);
+ Helper.Dispose(ref outMessagePointer);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Encrypts an arbitrary message that will be sent to the game server and decrypted on the other side.
+ /// Mode: .
+ ///
+ /// Options.Data and OutBuffer may refer to the same buffer to encrypt in place.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, buffer where encrypted message data will be written.
+ ///
+ ///
+ /// On success, the number of bytes that were written to OutBuffer.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was protected successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result ProtectMessage(ref ProtectMessageOptions options, ArraySegment outBuffer, out uint outBytesWritten)
+ {
+ var optionsInternal = default(ProtectMessageOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outBufferPointer = Helper.AddPinnedBuffer(outBuffer);
+
+ var callResult = Bindings.EOS_AntiCheatClient_ProtectMessage(InnerHandle, ref optionsInternal, outBufferPointer, out outBytesWritten);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Dispose(ref outBufferPointer);
+
+ return callResult;
+ }
+
+ ///
+ /// Call when an anti-cheat message is received from a peer.
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was processed successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result ReceiveMessageFromPeer(ref ReceiveMessageFromPeerOptions options)
+ {
+ var optionsInternal = default(ReceiveMessageFromPeerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_ReceiveMessageFromPeer(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Call when an anti-cheat message is received from the game server.
+ /// Mode: .
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was processed successfully
+ /// - - If input data was invalid
+ /// - - If message contents were corrupt and could not be processed
+ /// - - If the current mode does not support this function
+ ///
+ public Result ReceiveMessageFromServer(ref ReceiveMessageFromServerOptions options)
+ {
+ var optionsInternal = default(ReceiveMessageFromServerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_ReceiveMessageFromServer(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Registers a connected peer-to-peer client.
+ /// Mode: .
+ ///
+ /// Must be paired with a call to if this user leaves the session
+ /// in progress, or if the entire session is ending.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the player was registered successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result RegisterPeer(ref RegisterPeerOptions options)
+ {
+ var optionsInternal = default(RegisterPeerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_RegisterPeer(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ /// Mode: Any.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyClientIntegrityViolated(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatClient_RemoveNotifyClientIntegrityViolated(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ /// Mode: Any.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyMessageToPeer(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatClient_RemoveNotifyMessageToPeer(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ /// Mode: Any.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyMessageToServer(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatClient_RemoveNotifyMessageToServer(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ /// Mode: Any.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyPeerActionRequired(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatClient_RemoveNotifyPeerActionRequired(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ /// Mode: Any.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyPeerAuthStatusChanged(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatClient_RemoveNotifyPeerAuthStatusChanged(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// This function is reserved for future use and must not be called.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// Reserved.
+ ///
+ ///
+ /// - Always
+ ///
+ public Result Reserved01(ref Reserved01Options options, out int outValue)
+ {
+ var optionsInternal = default(Reserved01OptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_Reserved01(InnerHandle, ref optionsInternal, out outValue);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// This function is reserved for future use and must not be called.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// - Always
+ ///
+ public Result Reserved02(ref Reserved02Options options)
+ {
+ var optionsInternal = default(Reserved02OptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_Reserved02(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Decrypts an encrypted message received from the game server.
+ /// Mode: .
+ ///
+ /// Options.Data and OutBuffer may refer to the same buffer to decrypt in place.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, buffer where encrypted message data will be written.
+ ///
+ ///
+ /// On success, the number of bytes that were written to OutBuffer.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was unprotected successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result UnprotectMessage(ref UnprotectMessageOptions options, ArraySegment outBuffer, out uint outBytesWritten)
+ {
+ var optionsInternal = default(UnprotectMessageOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outBufferPointer = Helper.AddPinnedBuffer(outBuffer);
+
+ var callResult = Bindings.EOS_AntiCheatClient_UnprotectMessage(InnerHandle, ref optionsInternal, outBufferPointer, out outBytesWritten);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Dispose(ref outBufferPointer);
+
+ return callResult;
+ }
+
+ ///
+ /// Unregisters a disconnected peer-to-peer client.
+ /// Mode: .
+ ///
+ /// Must be called when a user leaves a session in progress.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the player was unregistered successfully
+ /// - - If input data was invalid
+ /// - - If the current mode does not support this function
+ ///
+ public Result UnregisterPeer(ref UnregisterPeerOptions options)
+ {
+ var optionsInternal = default(UnregisterPeerOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatClient_UnregisterPeer(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientMode.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientMode.cs
new file mode 100644
index 0000000..a044539
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientMode.cs
@@ -0,0 +1,28 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Operating modes
+ ///
+ public enum AntiCheatClientMode : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// Dedicated or listen server mode
+ ///
+ ClientServer = 1,
+ ///
+ /// Full mesh peer-to-peer mode
+ ///
+ PeerToPeer = 2
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientViolationType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientViolationType.cs
new file mode 100644
index 0000000..e253b63
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/AntiCheatClientViolationType.cs
@@ -0,0 +1,81 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Anti-cheat integrity violation types
+ ///
+ public enum AntiCheatClientViolationType : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// An anti-cheat asset integrity catalog file could not be found
+ ///
+ IntegrityCatalogNotFound = 1,
+ ///
+ /// An anti-cheat asset integrity catalog file is corrupt or invalid
+ ///
+ IntegrityCatalogError = 2,
+ ///
+ /// An anti-cheat asset integrity catalog file's certificate has been revoked.
+ ///
+ IntegrityCatalogCertificateRevoked = 3,
+ ///
+ /// The primary anti-cheat asset integrity catalog does not include an entry for the game's
+ /// main executable, which is required.
+ ///
+ IntegrityCatalogMissingMainExecutable = 4,
+ ///
+ /// A disallowed game file modification was detected
+ ///
+ GameFileMismatch = 5,
+ ///
+ /// A disallowed game file removal was detected
+ ///
+ RequiredGameFileNotFound = 6,
+ ///
+ /// A disallowed game file addition was detected
+ ///
+ UnknownGameFileForbidden = 7,
+ ///
+ /// A system file failed an integrity check
+ ///
+ SystemFileUntrusted = 8,
+ ///
+ /// A disallowed code module was loaded into the game process
+ ///
+ ForbiddenModuleLoaded = 9,
+ ///
+ /// A disallowed game process memory modification was detected
+ ///
+ CorruptedMemory = 10,
+ ///
+ /// A disallowed tool was detected running in the system
+ ///
+ ForbiddenToolDetected = 11,
+ ///
+ /// An internal anti-cheat integrity check failed
+ ///
+ InternalAntiCheatViolation = 12,
+ ///
+ /// Integrity checks on messages between the game client and game server, or between peers, failed
+ ///
+ CorruptedNetworkMessageFlow = 13,
+ ///
+ /// The game is running inside a disallowed virtual machine
+ ///
+ VirtualMachineNotAllowed = 14,
+ ///
+ /// A forbidden operating system configuration was detected
+ ///
+ ForbiddenSystemConfiguration = 15
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/BeginSessionOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/BeginSessionOptions.cs
new file mode 100644
index 0000000..f82f774
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/BeginSessionOptions.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct BeginSessionOptions
+ {
+ ///
+ /// Logged in user identifier from earlier call to family of functions
+ ///
+ public ProductUserId LocalUserId { get; set; }
+
+ ///
+ /// Operating mode
+ ///
+ public AntiCheatClientMode Mode { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct BeginSessionOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_LocalUserId;
+ private AntiCheatClientMode m_Mode;
+
+ public void Set(ref BeginSessionOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.BEGINSESSION_API_LATEST;
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ m_Mode = other.Mode;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_LocalUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/EndSessionOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/EndSessionOptions.cs
new file mode 100644
index 0000000..c580278
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/EndSessionOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct EndSessionOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct EndSessionOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref EndSessionOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.ENDSESSION_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetModuleBuildIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetModuleBuildIdOptions.cs
new file mode 100644
index 0000000..1692b82
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetModuleBuildIdOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetModuleBuildIdOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetModuleBuildIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref GetModuleBuildIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.GETMODULEBUILDID_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetProtectMessageOutputLengthOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetProtectMessageOutputLengthOptions.cs
new file mode 100644
index 0000000..c6d0c71
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/GetProtectMessageOutputLengthOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetProtectMessageOutputLengthOptions
+ {
+ ///
+ /// Length in bytes of input
+ ///
+ public uint DataLengthBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetProtectMessageOutputLengthOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_DataLengthBytes;
+
+ public void Set(ref GetProtectMessageOutputLengthOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.GETPROTECTMESSAGEOUTPUTLENGTH_API_LATEST;
+ m_DataLengthBytes = other.DataLengthBytes;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallback.cs
new file mode 100644
index 0000000..91108eb
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallback.cs
@@ -0,0 +1,49 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+
+ ///
+ /// Callback issued when the local client triggers an integrity violation.
+ ///
+ /// The message contains descriptive of up to 256 characters and must be displayed to the player.
+ ///
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnClientIntegrityViolatedCallback(ref OnClientIntegrityViolatedCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnClientIntegrityViolatedCallbackInternal(ref OnClientIntegrityViolatedCallbackInfoInternal data);
+
+ internal static class OnClientIntegrityViolatedCallbackInternalImplementation
+ {
+ private static OnClientIntegrityViolatedCallbackInternal s_Delegate;
+ public static OnClientIntegrityViolatedCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnClientIntegrityViolatedCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnClientIntegrityViolatedCallbackInternal))]
+ public static void EntryPoint(ref OnClientIntegrityViolatedCallbackInfoInternal data)
+ {
+ OnClientIntegrityViolatedCallback callback;
+ OnClientIntegrityViolatedCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallbackInfo.cs
new file mode 100644
index 0000000..18b36c9
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnClientIntegrityViolatedCallbackInfo.cs
@@ -0,0 +1,68 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Structure containing details about integrity violation related to the local client
+ ///
+ public struct OnClientIntegrityViolatedCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Caller-specified context data
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// Code describing the violation that occurred
+ ///
+ public AntiCheatClientViolationType ViolationType { get; set; }
+
+ ///
+ /// describing the violation which should be displayed to the user
+ ///
+ public Utf8String ViolationMessage { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnClientIntegrityViolatedCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private AntiCheatClientViolationType m_ViolationType;
+ private IntPtr m_ViolationMessage;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnClientIntegrityViolatedCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ other.ViolationType = m_ViolationType;
+ Utf8String ViolationMessagePublic;
+ Helper.Get(m_ViolationMessage, out ViolationMessagePublic);
+ other.ViolationMessage = ViolationMessagePublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToPeerCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToPeerCallback.cs
new file mode 100644
index 0000000..4d25d93
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToPeerCallback.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+
+ ///
+ /// Callback issued when a new message must be dispatched to a connected peer.
+ ///
+ /// Messages contain opaque binary data and must be transmitted
+ /// to the correct peer using the game's own networking layer, then delivered
+ /// to the client anti-cheat instance using the function.
+ /// The upper limit of the message size is .
+ ///
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnMessageToPeerCallback(ref AntiCheatCommon.OnMessageToClientCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnMessageToPeerCallbackInternal(ref AntiCheatCommon.OnMessageToClientCallbackInfoInternal data);
+
+ internal static class OnMessageToPeerCallbackInternalImplementation
+ {
+ private static OnMessageToPeerCallbackInternal s_Delegate;
+ public static OnMessageToPeerCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnMessageToPeerCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnMessageToPeerCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnMessageToClientCallbackInfoInternal data)
+ {
+ OnMessageToPeerCallback callback;
+ AntiCheatCommon.OnMessageToClientCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallback.cs
new file mode 100644
index 0000000..aecbabd
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallback.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+
+ ///
+ /// Callback issued when a new message must be dispatched to the game server.
+ ///
+ /// Messages contain opaque binary data and must be transmitted
+ /// to the game server using the game's own networking layer, then delivered
+ /// to the server anti-cheat instance using the function.
+ /// The upper limit of the message size is .
+ ///
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnMessageToServerCallback(ref OnMessageToServerCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnMessageToServerCallbackInternal(ref OnMessageToServerCallbackInfoInternal data);
+
+ internal static class OnMessageToServerCallbackInternalImplementation
+ {
+ private static OnMessageToServerCallbackInternal s_Delegate;
+ public static OnMessageToServerCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnMessageToServerCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnMessageToServerCallbackInternal))]
+ public static void EntryPoint(ref OnMessageToServerCallbackInfoInternal data)
+ {
+ OnMessageToServerCallback callback;
+ OnMessageToServerCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallbackInfo.cs
new file mode 100644
index 0000000..4521c15
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnMessageToServerCallbackInfo.cs
@@ -0,0 +1,62 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Structure containing details about a new message that must be dispatched to the game server.
+ ///
+ public struct OnMessageToServerCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Caller-specified context data
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The message data that must be sent to the server
+ ///
+ public ArraySegment MessageData { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnMessageToServerCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_MessageData;
+ private uint m_MessageDataSizeBytes;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnMessageToServerCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ ArraySegment MessageDataPublic;
+ Helper.Get(m_MessageData, out MessageDataPublic, m_MessageDataSizeBytes);
+ other.MessageData = MessageDataPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerActionRequiredCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerActionRequiredCallback.cs
new file mode 100644
index 0000000..3523c25
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerActionRequiredCallback.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+
+ ///
+ /// Callback issued when an action must be applied to a connected peer.
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnPeerActionRequiredCallback(ref AntiCheatCommon.OnClientActionRequiredCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnPeerActionRequiredCallbackInternal(ref AntiCheatCommon.OnClientActionRequiredCallbackInfoInternal data);
+
+ internal static class OnPeerActionRequiredCallbackInternalImplementation
+ {
+ private static OnPeerActionRequiredCallbackInternal s_Delegate;
+ public static OnPeerActionRequiredCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnPeerActionRequiredCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnPeerActionRequiredCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnClientActionRequiredCallbackInfoInternal data)
+ {
+ OnPeerActionRequiredCallback callback;
+ AntiCheatCommon.OnClientActionRequiredCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerAuthStatusChangedCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerAuthStatusChangedCallback.cs
new file mode 100644
index 0000000..2108b3b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/OnPeerAuthStatusChangedCallback.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+
+ ///
+ /// Optional callback issued when a connected peer's authentication status has changed.
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnPeerAuthStatusChangedCallback(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnPeerAuthStatusChangedCallbackInternal(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfoInternal data);
+
+ internal static class OnPeerAuthStatusChangedCallbackInternalImplementation
+ {
+ private static OnPeerAuthStatusChangedCallbackInternal s_Delegate;
+ public static OnPeerAuthStatusChangedCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnPeerAuthStatusChangedCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnPeerAuthStatusChangedCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfoInternal data)
+ {
+ OnPeerAuthStatusChangedCallback callback;
+ AntiCheatCommon.OnClientAuthStatusChangedCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/PollStatusOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/PollStatusOptions.cs
new file mode 100644
index 0000000..c080e08
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/PollStatusOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct PollStatusOptions
+ {
+ ///
+ /// The size of OutMessage in bytes. Recommended size is 256 bytes.
+ ///
+ public uint OutMessageLength { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct PollStatusOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_OutMessageLength;
+
+ public void Set(ref PollStatusOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.POLLSTATUS_API_LATEST;
+ m_OutMessageLength = other.OutMessageLength;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ProtectMessageOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ProtectMessageOptions.cs
new file mode 100644
index 0000000..ed9e381
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ProtectMessageOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct ProtectMessageOptions
+ {
+ ///
+ /// The data to encrypt
+ ///
+ public ArraySegment Data { get; set; }
+
+ ///
+ /// The size in bytes of OutBuffer
+ ///
+ public uint OutBufferSizeBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct ProtectMessageOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+ private uint m_OutBufferSizeBytes;
+
+ public void Set(ref ProtectMessageOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.PROTECTMESSAGE_API_LATEST;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ m_OutBufferSizeBytes = other.OutBufferSizeBytes;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromPeerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromPeerOptions.cs
new file mode 100644
index 0000000..4a883ac
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromPeerOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct ReceiveMessageFromPeerOptions
+ {
+ ///
+ /// The handle describing the sender of this message
+ ///
+ public IntPtr PeerHandle { get; set; }
+
+ ///
+ /// The data received
+ ///
+ public ArraySegment Data { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct ReceiveMessageFromPeerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PeerHandle;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+
+ public void Set(ref ReceiveMessageFromPeerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.RECEIVEMESSAGEFROMPEER_API_LATEST;
+ m_PeerHandle = other.PeerHandle;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromServerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromServerOptions.cs
new file mode 100644
index 0000000..15406e6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/ReceiveMessageFromServerOptions.cs
@@ -0,0 +1,40 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct ReceiveMessageFromServerOptions
+ {
+ ///
+ /// The data received
+ ///
+ public ArraySegment Data { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct ReceiveMessageFromServerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+
+ public void Set(ref ReceiveMessageFromServerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.RECEIVEMESSAGEFROMSERVER_API_LATEST;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/RegisterPeerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/RegisterPeerOptions.cs
new file mode 100644
index 0000000..fe17f51
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/RegisterPeerOptions.cs
@@ -0,0 +1,87 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct RegisterPeerOptions
+ {
+ ///
+ /// Locally unique value describing the remote user (e.g. a player object )
+ ///
+ public IntPtr PeerHandle { get; set; }
+
+ ///
+ /// Type of remote user being registered
+ ///
+ public AntiCheatCommon.AntiCheatCommonClientType ClientType { get; set; }
+
+ ///
+ /// Remote user's platform, if known
+ ///
+ public AntiCheatCommon.AntiCheatCommonClientPlatform ClientPlatform { get; set; }
+
+ ///
+ /// Time in seconds to allow newly registered peers to send the initial message containing their token.
+ /// Minimum value:
+ /// Maximum value:
+ ///
+ public uint AuthenticationTimeout { get; set; }
+
+ ///
+ /// Deprecated - use PeerProductUserId instead
+ ///
+ public Utf8String AccountId_DEPRECATED { get; set; }
+
+ ///
+ /// Optional IP address for the remote user. May be if not available.
+ /// IPv4 format: "0.0.0.0"
+ /// IPv6 format: "0:0:0:0:0:0:0:0"
+ ///
+ public Utf8String IpAddress { get; set; }
+
+ ///
+ /// Identifier for the remote user
+ ///
+ public ProductUserId PeerProductUserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct RegisterPeerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PeerHandle;
+ private AntiCheatCommon.AntiCheatCommonClientType m_ClientType;
+ private AntiCheatCommon.AntiCheatCommonClientPlatform m_ClientPlatform;
+ private uint m_AuthenticationTimeout;
+ private IntPtr m_AccountId_DEPRECATED;
+ private IntPtr m_IpAddress;
+ private IntPtr m_PeerProductUserId;
+
+ public void Set(ref RegisterPeerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.REGISTERPEER_API_LATEST;
+ m_PeerHandle = other.PeerHandle;
+ m_ClientType = other.ClientType;
+ m_ClientPlatform = other.ClientPlatform;
+ m_AuthenticationTimeout = other.AuthenticationTimeout;
+ Helper.Set(other.AccountId_DEPRECATED, ref m_AccountId_DEPRECATED);
+ Helper.Set(other.IpAddress, ref m_IpAddress);
+ Helper.Set(other.PeerProductUserId, ref m_PeerProductUserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_AccountId_DEPRECATED);
+ Helper.Dispose(ref m_IpAddress);
+ Helper.Dispose(ref m_PeerProductUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved01Options.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved01Options.cs
new file mode 100644
index 0000000..5c9b73b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved01Options.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct Reserved01Options
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct Reserved01OptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref Reserved01Options other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.RESERVED01_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved02Options.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved02Options.cs
new file mode 100644
index 0000000..2d1cbd3
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/Reserved02Options.cs
@@ -0,0 +1,60 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct Reserved02Options
+ {
+ ///
+ /// Field reserved for future use
+ ///
+ public long Reserved1 { get; set; }
+
+ ///
+ /// Field reserved for future use
+ ///
+ public uint Reserved2 { get; set; }
+
+ ///
+ /// Field reserved for future use
+ ///
+ public uint Reserved3 { get; set; }
+
+ ///
+ /// Field reserved for future use
+ ///
+ public IntPtr Reserved4 { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct Reserved02OptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private long m_Reserved1;
+ private uint m_Reserved2;
+ private uint m_Reserved3;
+ private IntPtr m_Reserved4;
+
+ public void Set(ref Reserved02Options other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.RESERVED02_API_LATEST;
+ m_Reserved1 = other.Reserved1;
+ m_Reserved2 = other.Reserved2;
+ m_Reserved3 = other.Reserved3;
+ m_Reserved4 = other.Reserved4;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Reserved4);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnprotectMessageOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnprotectMessageOptions.cs
new file mode 100644
index 0000000..bbe716f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnprotectMessageOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct UnprotectMessageOptions
+ {
+ ///
+ /// The data to decrypt
+ ///
+ public ArraySegment Data { get; set; }
+
+ ///
+ /// The size in bytes of OutBuffer
+ ///
+ public uint OutBufferSizeBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnprotectMessageOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+ private uint m_OutBufferSizeBytes;
+
+ public void Set(ref UnprotectMessageOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.UNPROTECTMESSAGE_API_LATEST;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ m_OutBufferSizeBytes = other.OutBufferSizeBytes;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnregisterPeerOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnregisterPeerOptions.cs
new file mode 100644
index 0000000..5a19d38
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatClient/UnregisterPeerOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatClient
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct UnregisterPeerOptions
+ {
+ ///
+ /// Locally unique value describing the remote user, as previously passed to
+ ///
+ public IntPtr PeerHandle { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnregisterPeerOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PeerHandle;
+
+ public void Set(ref UnregisterPeerOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatClientInterface.UNREGISTERPEER_API_LATEST;
+ m_PeerHandle = other.PeerHandle;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAction.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAction.cs
new file mode 100644
index 0000000..805fe51
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAction.cs
@@ -0,0 +1,24 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Anti-cheat action values. Applicable to both clients and remote peers.
+ ///
+ public enum AntiCheatCommonClientAction : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// The client/peer must be removed from the current game session
+ ///
+ RemovePlayer = 1
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientActionReason.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientActionReason.cs
new file mode 100644
index 0000000..8bf7575
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientActionReason.cs
@@ -0,0 +1,60 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Anti-cheat action reasons. Applicable to both clients and remote peers.
+ ///
+ public enum AntiCheatCommonClientActionReason : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// An internal error occurred
+ ///
+ InternalError = 1,
+ ///
+ /// An anti-cheat message received from the client/peer was corrupt or invalid
+ ///
+ InvalidMessage = 2,
+ ///
+ /// The client/peer's anti-cheat authentication failed
+ ///
+ AuthenticationFailed = 3,
+ ///
+ /// The client/peer failed to load the anti-cheat module at startup
+ ///
+ NullClient = 4,
+ ///
+ /// The client/peer's anti-cheat heartbeat was not received
+ ///
+ HeartbeatTimeout = 5,
+ ///
+ /// The client/peer failed an anti-cheat client runtime check
+ ///
+ ClientViolation = 6,
+ ///
+ /// The client/peer failed an anti-cheat backend runtime check
+ ///
+ BackendViolation = 7,
+ ///
+ /// The client/peer is temporarily blocked from playing on this game server
+ ///
+ TemporaryCooldown = 8,
+ ///
+ /// The client/peer is temporarily banned
+ ///
+ TemporaryBanned = 9,
+ ///
+ /// The client/peer is permanently banned
+ ///
+ PermanentBanned = 10
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAuthStatus.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAuthStatus.cs
new file mode 100644
index 0000000..d88c48b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientAuthStatus.cs
@@ -0,0 +1,28 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// The client/peer's anti-cheat authentication status
+ ///
+ public enum AntiCheatCommonClientAuthStatus : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// The client/peer's anti-cheat functionality has been validated by this game server
+ ///
+ LocalAuthComplete = 1,
+ ///
+ /// The client/peer's anti-cheat functionality has been validated by the anti-cheat backend service
+ ///
+ RemoteAuthComplete = 2
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientFlags.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientFlags.cs
new file mode 100644
index 0000000..6302dd9
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientFlags.cs
@@ -0,0 +1,25 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Flags describing a remote client. These can be updated during a play session
+ ///
+ [Flags]
+ public enum AntiCheatCommonClientFlags : int
+ {
+ ///
+ /// No particular flags relevant for this client
+ ///
+ None = 0,
+ ///
+ /// The client has admin privileges on the game server
+ ///
+ Admin = (1 << 0)
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientInput.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientInput.cs
new file mode 100644
index 0000000..d1f7f49
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientInput.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Flags describing the input device used by a remote client, if known. These can be updated during a play session.
+ ///
+ public enum AntiCheatCommonClientInput : int
+ {
+ ///
+ /// Unknown input device
+ ///
+ Unknown = 0,
+ ///
+ /// The client is using mouse and keyboard
+ ///
+ MouseKeyboard = 1,
+ ///
+ /// The client is using a gamepad or game controller
+ ///
+ Gamepad = 2,
+ ///
+ /// The client is using a touch input device (e.g. phone/tablet screen)
+ ///
+ TouchInput = 3
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientPlatform.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientPlatform.cs
new file mode 100644
index 0000000..99d8e62
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientPlatform.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Flags describing the platform of a remote client, if known
+ ///
+ public enum AntiCheatCommonClientPlatform : int
+ {
+ ///
+ /// Unknown platform
+ ///
+ Unknown = 0,
+ ///
+ /// The client is playing on Windows
+ ///
+ Windows = 1,
+ ///
+ /// The client is playing on Mac
+ ///
+ Mac = 2,
+ ///
+ /// The client is playing on Linux
+ ///
+ Linux = 3,
+ ///
+ /// The client is playing on an Xbox device
+ ///
+ Xbox = 4,
+ ///
+ /// The client is playing on a PlayStation device
+ ///
+ PlayStation = 5,
+ ///
+ /// The client is playing on a Nintendo device
+ ///
+ Nintendo = 6,
+ ///
+ /// The client is playing on iOS
+ ///
+ iOS = 7,
+ ///
+ /// The client is playing on Android
+ ///
+ Android = 8
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientType.cs
new file mode 100644
index 0000000..72b4ebd
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonClientType.cs
@@ -0,0 +1,28 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Flags describing the type of a remote client
+ ///
+ public enum AntiCheatCommonClientType : int
+ {
+ ///
+ /// An ordinary player that requires anti-cheat client protection to play
+ ///
+ ProtectedClient = 0,
+ ///
+ /// The player does not need the anti-cheat client to play because of their platform or other factors
+ ///
+ UnprotectedClient = 1,
+ ///
+ /// The client is an AI bot, not an actual human
+ ///
+ AIBot = 2
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventParamType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventParamType.cs
new file mode 100644
index 0000000..65f4a5a
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventParamType.cs
@@ -0,0 +1,56 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Types supported for custom gameplay behavior event parameters
+ ///
+ public enum AntiCheatCommonEventParamType : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ ///
+ ///
+ ClientHandle = 1,
+ ///
+ ///
+ ///
+ String = 2,
+ ///
+ ///
+ ///
+ UInt32 = 3,
+ ///
+ ///
+ ///
+ Int32 = 4,
+ ///
+ ///
+ ///
+ UInt64 = 5,
+ ///
+ ///
+ ///
+ Int64 = 6,
+ ///
+ ///
+ ///
+ Vector3f = 7,
+ ///
+ ///
+ ///
+ Quat = 8,
+ ///
+ ///
+ ///
+ Float = 9
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventType.cs
new file mode 100644
index 0000000..794bb14
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonEventType.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Types supported for custom gameplay behavior events.
+ /// These have a considerable impact on performance
+ ///
+ public enum AntiCheatCommonEventType : int
+ {
+ ///
+ /// Not used
+ ///
+ Invalid = 0,
+ ///
+ /// A general game event that is not specific to any individual player.
+ /// Low memory use which is constant with respect to the number of players.
+ ///
+ GameEvent = 1,
+ ///
+ /// An event that is logically associated with a specific player. Events logged in
+ /// this category require a specific ClientHandle to which they will be attached.
+ /// Higher memory use which scales according to the number of players.
+ ///
+ PlayerEvent = 2
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonGameRoundCompetitionType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonGameRoundCompetitionType.cs
new file mode 100644
index 0000000..4000a3d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonGameRoundCompetitionType.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Flags describing the type of competition taking place
+ ///
+ public enum AntiCheatCommonGameRoundCompetitionType : int
+ {
+ ///
+ /// No particular competition type applies
+ ///
+ None = 0,
+ ///
+ /// Casual unranked play
+ ///
+ Casual = 1,
+ ///
+ /// Ranked play, usually with skill based matchmaking
+ ///
+ Ranked = 2,
+ ///
+ /// Organized competitive play like a tournament
+ ///
+ Competitive = 3
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonInterface.cs
new file mode 100644
index 0000000..61031a5
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonInterface.cs
@@ -0,0 +1,79 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ public sealed partial class AntiCheatCommonInterface
+ {
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGEVENT_API_LATEST = 1;
+ ///
+ /// Max length for a log event param value.
+ ///
+ public const int LOGEVENT_STRING_MAX_LENGTH = 39;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGGAMEROUNDEND_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGGAMEROUNDSTART_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERDESPAWN_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERREVIVE_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERSPAWN_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERTAKEDAMAGE_API_LATEST = 4;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERTICK_API_LATEST = 3;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERUSEABILITY_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int LOGPLAYERUSEWEAPON_API_LATEST = 2;
+ ///
+ /// Max weapon name length in .
+ ///
+ public const int LOGPLAYERUSEWEAPON_WEAPONNAME_MAX_LENGTH = 32;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int REGISTEREVENT_API_LATEST = 1;
+ ///
+ /// Min value for EventId in .
+ ///
+ public const int REGISTEREVENT_CUSTOMEVENTBASE = 0x10000000;
+ ///
+ /// Max value for ParamDefsCount in .
+ ///
+ public const int REGISTEREVENT_MAX_PARAMDEFSCOUNT = 12;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int SETCLIENTDETAILS_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int SETGAMESESSIONID_API_LATEST = 1;
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerMovementState.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerMovementState.cs
new file mode 100644
index 0000000..8343dd8
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerMovementState.cs
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Details of a player's movement state
+ ///
+ public enum AntiCheatCommonPlayerMovementState : int
+ {
+ ///
+ /// No particular state applies
+ ///
+ None = 0,
+ ///
+ /// Player is crouching
+ ///
+ Crouching = 1,
+ ///
+ /// Player is prone
+ ///
+ Prone = 2,
+ ///
+ /// Player is mounted in a vehicle or similar
+ ///
+ Mounted = 3,
+ ///
+ /// Player is swimming in a fluid volume
+ ///
+ Swimming = 4,
+ ///
+ /// Player is falling under the effects of gravity, such as when jumping or walking off the edge of a surface
+ ///
+ Falling = 5,
+ ///
+ /// Player is flying, ignoring the effects of gravity
+ ///
+ Flying = 6,
+ ///
+ /// Player is on a ladder
+ ///
+ OnLadder = 7
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageResult.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageResult.cs
new file mode 100644
index 0000000..bcc1595
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageResult.cs
@@ -0,0 +1,40 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// The result of a damage event, if any
+ ///
+ public enum AntiCheatCommonPlayerTakeDamageResult : int
+ {
+ ///
+ /// No direct state change consequence for the victim
+ ///
+ None = 0,
+ ///
+ /// Deprecated - use more specific values below instead
+ ///
+ DownedDeprecated = 1,
+ ///
+ /// Deprecated - use more specific values below instead
+ ///
+ EliminatedDeprecated = 2,
+ ///
+ /// Player character transitioned from a normal state to temporarily incapacitated and requires assistance to recover.
+ ///
+ NormalToDowned = 3,
+ ///
+ /// Player character transitioned from a normal state to permanently incapacitated and cannot recover (e.g. dead).
+ ///
+ NormalToEliminated = 4,
+ ///
+ /// Player character transitioned from a temporarily incapacitated state to permanently incapacitated and cannot recover (e.g. dead).
+ ///
+ DownedToEliminated = 5
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageSource.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageSource.cs
new file mode 100644
index 0000000..9d54230
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageSource.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// The source of a damage event
+ ///
+ public enum AntiCheatCommonPlayerTakeDamageSource : int
+ {
+ ///
+ /// No particular source relevant
+ ///
+ None = 0,
+ ///
+ /// Damage caused by a player controlled character
+ ///
+ Player = 1,
+ ///
+ /// Damage caused by a non-player character such as an AI enemy
+ ///
+ NonPlayerCharacter = 2,
+ ///
+ /// Damage caused by the world (falling off level, into lava, etc)
+ ///
+ World = 3
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageType.cs
new file mode 100644
index 0000000..33e7ad4
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/AntiCheatCommonPlayerTakeDamageType.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Type of damage applied in a damage event
+ ///
+ public enum AntiCheatCommonPlayerTakeDamageType : int
+ {
+ ///
+ /// No particular type relevant
+ ///
+ None = 0,
+ ///
+ /// Damage caused by a point source such as a bullet or melee attack
+ ///
+ PointDamage = 1,
+ ///
+ /// Damage caused by a radial source such as an explosion
+ ///
+ RadialDamage = 2,
+ ///
+ /// Damage over time such as bleeding, poison, etc
+ ///
+ DamageOverTime = 3
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventOptions.cs
new file mode 100644
index 0000000..06f556c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventOptions.cs
@@ -0,0 +1,54 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogEventOptions
+ {
+ ///
+ /// Optional client who this event is primarily associated with. If not applicable, use 0.
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// Unique event identifier previously configured in RegisterEvent
+ ///
+ public uint EventId { get; set; }
+
+ ///
+ /// Set of parameter types previously configured in RegisterEvent, and their values
+ ///
+ public LogEventParamPair[] Params { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogEventOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private uint m_EventId;
+ private uint m_ParamsCount;
+ private IntPtr m_Params;
+
+ public void Set(ref LogEventOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGEVENT_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ m_EventId = other.EventId;
+ Helper.Set(other.Params, ref m_Params, out m_ParamsCount, false);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Params);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPair.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPair.cs
new file mode 100644
index 0000000..af7a2f0
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPair.cs
@@ -0,0 +1,40 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Log Event Parameter.
+ ///
+ public struct LogEventParamPair
+ {
+ ///
+ /// Parameter value
+ ///
+ public LogEventParamPairParamValue ParamValue { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogEventParamPairInternal : ISettable
+ {
+ private AntiCheatCommonEventParamType m_ParamValueType;
+ private LogEventParamPairParamValueInternal m_ParamValue;
+
+ public void Set(ref LogEventParamPair other)
+ {
+ Dispose();
+
+ Helper.Set(other.ParamValue, ref m_ParamValue);
+
+ m_ParamValueType = other.ParamValue.ParamValueType;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_ParamValue);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPairParamValue.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPairParamValue.cs
new file mode 100644
index 0000000..66368bb
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogEventParamPairParamValue.cs
@@ -0,0 +1,352 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Parameter value
+ ///
+ public struct LogEventParamPairParamValue
+ {
+ private IntPtr? m_ClientHandle;
+ private Utf8String m_String;
+ private uint? m_UInt32;
+ private int? m_Int32;
+ private ulong? m_UInt64;
+ private long? m_Int64;
+ private Vec3f? m_Vec3f;
+ private Quat? m_Quat;
+ private float? m_Float;
+ private AntiCheatCommonEventParamType m_ParamValueType;
+
+ ///
+ /// Client handle.
+ ///
+ public IntPtr? ClientHandle
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.ClientHandle)
+ {
+ return m_ClientHandle;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_ClientHandle = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.ClientHandle;
+ }
+ }
+
+ ///
+ /// The value as a .
+ /// Will be truncated if longer than bytes.
+ ///
+ public Utf8String String
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.String)
+ {
+ return m_String;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_String = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.String;
+ }
+ }
+
+ ///
+ /// The value as a .
+ ///
+ public uint? UInt32
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.UInt32)
+ {
+ return m_UInt32;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_UInt32 = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.UInt32;
+ }
+ }
+
+ ///
+ /// The value as an .
+ ///
+ public int? Int32
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.Int32)
+ {
+ return m_Int32;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_Int32 = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.Int32;
+ }
+ }
+
+ ///
+ /// The value as a .
+ ///
+ public ulong? UInt64
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.UInt64)
+ {
+ return m_UInt64;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_UInt64 = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.UInt64;
+ }
+ }
+
+ ///
+ /// The value as an .
+ ///
+ public long? Int64
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.Int64)
+ {
+ return m_Int64;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_Int64 = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.Int64;
+ }
+ }
+
+ ///
+ /// The value as an .
+ ///
+ public Vec3f? Vec3f
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.Vector3f)
+ {
+ return m_Vec3f;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_Vec3f = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.Vector3f;
+ }
+ }
+
+ ///
+ /// The value as an .
+ ///
+ public Quat? Quat
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.Quat)
+ {
+ return m_Quat;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_Quat = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.Quat;
+ }
+ }
+
+ ///
+ /// The value as a .
+ ///
+ public float? Float
+ {
+ get
+ {
+ if (m_ParamValueType == AntiCheatCommonEventParamType.Float)
+ {
+ return m_Float;
+ }
+
+ return default;
+ }
+ set
+ {
+ m_Float = value;
+ m_ParamValueType = AntiCheatCommonEventParamType.Float;
+ }
+ }
+ public AntiCheatCommonEventParamType ParamValueType
+ {
+ get
+ {
+ return m_ParamValueType;
+ }
+ }
+
+ public static implicit operator LogEventParamPairParamValue(IntPtr? value)
+ {
+ return new LogEventParamPairParamValue() { ClientHandle = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(Utf8String value)
+ {
+ return new LogEventParamPairParamValue() { String = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(string value)
+ {
+ return new LogEventParamPairParamValue() { String = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(uint? value)
+ {
+ return new LogEventParamPairParamValue() { UInt32 = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(int? value)
+ {
+ return new LogEventParamPairParamValue() { Int32 = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(ulong? value)
+ {
+ return new LogEventParamPairParamValue() { UInt64 = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(long? value)
+ {
+ return new LogEventParamPairParamValue() { Int64 = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(Vec3f? value)
+ {
+ return new LogEventParamPairParamValue() { Vec3f = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(Quat? value)
+ {
+ return new LogEventParamPairParamValue() { Quat = value };
+ }
+
+ public static implicit operator LogEventParamPairParamValue(float? value)
+ {
+ return new LogEventParamPairParamValue() { Float = value };
+ }
+ }
+
+ [StructLayout(LayoutKind.Explicit)]
+ internal struct LogEventParamPairParamValueInternal : ISettable
+ {
+ [FieldOffset(0)]
+ private IntPtr m_ClientHandle;
+ [FieldOffset(0)]
+ private IntPtr m_String;
+ [FieldOffset(0)]
+ private uint m_UInt32;
+ [FieldOffset(0)]
+ private int m_Int32;
+ [FieldOffset(0)]
+ private ulong m_UInt64;
+ [FieldOffset(0)]
+ private long m_Int64;
+ [FieldOffset(0)]
+ private Vec3fInternal m_Vec3f;
+ [FieldOffset(0)]
+ private QuatInternal m_Quat;
+ [FieldOffset(0)]
+ private float m_Float;
+
+ public void Set(ref LogEventParamPairParamValue other)
+ {
+ Dispose();
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.ClientHandle)
+ {
+ Helper.Set(other.ClientHandle, ref m_ClientHandle);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.String)
+ {
+ Helper.Set(other.String, ref m_String);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.UInt32)
+ {
+ Helper.Set(other.UInt32, ref m_UInt32);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.Int32)
+ {
+ Helper.Set(other.Int32, ref m_Int32);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.UInt64)
+ {
+ Helper.Set(other.UInt64, ref m_UInt64);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.Int64)
+ {
+ Helper.Set(other.Int64, ref m_Int64);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.Vector3f)
+ {
+ Helper.Set(other.Vec3f, ref m_Vec3f);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.Quat)
+ {
+ Helper.Set(other.Quat, ref m_Quat);
+ }
+
+ if (other.ParamValueType == AntiCheatCommonEventParamType.Float)
+ {
+ Helper.Set(other.Float, ref m_Float);
+ }
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_String);
+ Helper.Dispose(ref m_Vec3f);
+ Helper.Dispose(ref m_Quat);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundEndOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundEndOptions.cs
new file mode 100644
index 0000000..ed62c4f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundEndOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogGameRoundEndOptions
+ {
+ ///
+ /// Optional identifier for the winning team
+ ///
+ public uint WinningTeamId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogGameRoundEndOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_WinningTeamId;
+
+ public void Set(ref LogGameRoundEndOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGGAMEROUNDEND_API_LATEST;
+ m_WinningTeamId = other.WinningTeamId;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundStartOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundStartOptions.cs
new file mode 100644
index 0000000..723660d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogGameRoundStartOptions.cs
@@ -0,0 +1,69 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogGameRoundStartOptions
+ {
+ ///
+ /// Optional game session or match identifier useful for some backend API integrations
+ ///
+ public Utf8String SessionIdentifier { get; set; }
+
+ ///
+ /// Optional name of the map being played
+ ///
+ public Utf8String LevelName { get; set; }
+
+ ///
+ /// Optional name of the game mode being played
+ ///
+ public Utf8String ModeName { get; set; }
+
+ ///
+ /// Optional length of the game round to be played, in seconds. If none, use 0.
+ ///
+ public uint RoundTimeSeconds { get; set; }
+
+ ///
+ /// Type of competition for this game round
+ ///
+ public AntiCheatCommonGameRoundCompetitionType CompetitionType { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogGameRoundStartOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_SessionIdentifier;
+ private IntPtr m_LevelName;
+ private IntPtr m_ModeName;
+ private uint m_RoundTimeSeconds;
+ private AntiCheatCommonGameRoundCompetitionType m_CompetitionType;
+
+ public void Set(ref LogGameRoundStartOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGGAMEROUNDSTART_API_LATEST;
+ Helper.Set(other.SessionIdentifier, ref m_SessionIdentifier);
+ Helper.Set(other.LevelName, ref m_LevelName);
+ Helper.Set(other.ModeName, ref m_ModeName);
+ m_RoundTimeSeconds = other.RoundTimeSeconds;
+ m_CompetitionType = other.CompetitionType;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_SessionIdentifier);
+ Helper.Dispose(ref m_LevelName);
+ Helper.Dispose(ref m_ModeName);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerDespawnOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerDespawnOptions.cs
new file mode 100644
index 0000000..77ea20b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerDespawnOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerDespawnOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr DespawnedPlayerHandle { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerDespawnOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_DespawnedPlayerHandle;
+
+ public void Set(ref LogPlayerDespawnOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERDESPAWN_API_LATEST;
+ m_DespawnedPlayerHandle = other.DespawnedPlayerHandle;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerReviveOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerReviveOptions.cs
new file mode 100644
index 0000000..37de500
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerReviveOptions.cs
@@ -0,0 +1,45 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerReviveOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr RevivedPlayerHandle { get; set; }
+
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr ReviverPlayerHandle { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerReviveOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_RevivedPlayerHandle;
+ private IntPtr m_ReviverPlayerHandle;
+
+ public void Set(ref LogPlayerReviveOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERREVIVE_API_LATEST;
+ m_RevivedPlayerHandle = other.RevivedPlayerHandle;
+ m_ReviverPlayerHandle = other.ReviverPlayerHandle;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerSpawnOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerSpawnOptions.cs
new file mode 100644
index 0000000..0183060
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerSpawnOptions.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerSpawnOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr SpawnedPlayerHandle { get; set; }
+
+ ///
+ /// Optional identifier for the player's team. If none, use 0.
+ ///
+ public uint TeamId { get; set; }
+
+ ///
+ /// Optional identifier for the player's character. If none, use 0.
+ ///
+ public uint CharacterId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerSpawnOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_SpawnedPlayerHandle;
+ private uint m_TeamId;
+ private uint m_CharacterId;
+
+ public void Set(ref LogPlayerSpawnOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERSPAWN_API_LATEST;
+ m_SpawnedPlayerHandle = other.SpawnedPlayerHandle;
+ m_TeamId = other.TeamId;
+ m_CharacterId = other.CharacterId;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTakeDamageOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTakeDamageOptions.cs
new file mode 100644
index 0000000..97be5c6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTakeDamageOptions.cs
@@ -0,0 +1,179 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerTakeDamageOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr VictimPlayerHandle { get; set; }
+
+ ///
+ /// Victim player character's world position as a 3D vector. This should be the center of the character.
+ ///
+ public Vec3f? VictimPlayerPosition { get; set; }
+
+ ///
+ /// Victim player camera's world rotation as a quaternion.
+ ///
+ public Quat? VictimPlayerViewRotation { get; set; }
+
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer if applicable, otherwise 0.
+ ///
+ public IntPtr AttackerPlayerHandle { get; set; }
+
+ ///
+ /// Attacker player character's world position as a 3D vector if applicable, otherwise .
+ ///
+ public Vec3f? AttackerPlayerPosition { get; set; }
+
+ ///
+ /// Attacker player camera's world rotation as a quaternion if applicable, otherwise .
+ ///
+ public Quat? AttackerPlayerViewRotation { get; set; }
+
+ ///
+ /// True if the damage was applied instantly at the time of attack from the game
+ /// simulation's perspective, otherwise (simulated ballistics, arrow, etc).
+ ///
+ public bool IsHitscanAttack { get; set; }
+
+ ///
+ /// True if there is a visible line of sight between the attacker and the victim at the time
+ /// that damage is being applied, if there is an obstacle like a wall or terrain in
+ /// the way. For some situations like melee or hitscan weapons this is trivially
+ /// , for others like projectiles with simulated physics it may not be e.g. a player
+ /// could fire a slow moving projectile and then move behind cover before it strikes.
+ ///
+ /// This can be an estimate, or can simply be always set to if it is not feasible
+ /// to compute in your game.
+ ///
+ public bool HasLineOfSight { get; set; }
+
+ ///
+ /// True if this was a critical hit that causes extra damage (e.g. headshot)
+ ///
+ public bool IsCriticalHit { get; set; }
+
+ ///
+ /// Deprecated - use DamagePosition instead
+ ///
+ public uint HitBoneId_DEPRECATED { get; set; }
+
+ ///
+ /// Number of health points that the victim lost due to this damage event
+ ///
+ public float DamageTaken { get; set; }
+
+ ///
+ /// Number of health points that the victim has remaining after this damage event
+ ///
+ public float HealthRemaining { get; set; }
+
+ ///
+ /// Source of the damage event
+ ///
+ public AntiCheatCommonPlayerTakeDamageSource DamageSource { get; set; }
+
+ ///
+ /// Type of the damage being applied
+ ///
+ public AntiCheatCommonPlayerTakeDamageType DamageType { get; set; }
+
+ ///
+ /// Result of the damage for the victim, if any
+ ///
+ public AntiCheatCommonPlayerTakeDamageResult DamageResult { get; set; }
+
+ ///
+ /// PlayerUseWeaponData associated with this damage event if available, otherwise
+ ///
+ public LogPlayerUseWeaponData? PlayerUseWeaponData { get; set; }
+
+ ///
+ /// Time in milliseconds since the associated PlayerUseWeaponData event occurred if available, otherwise 0
+ ///
+ public uint TimeSincePlayerUseWeaponMs { get; set; }
+
+ ///
+ /// World position where damage hit the victim as a 3D vector if available, otherwise
+ ///
+ public Vec3f? DamagePosition { get; set; }
+
+ ///
+ /// Attacker player camera's world position as a 3D vector if applicable, otherwise
+ ///
+ public Vec3f? AttackerPlayerViewPosition { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerTakeDamageOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_VictimPlayerHandle;
+ private IntPtr m_VictimPlayerPosition;
+ private IntPtr m_VictimPlayerViewRotation;
+ private IntPtr m_AttackerPlayerHandle;
+ private IntPtr m_AttackerPlayerPosition;
+ private IntPtr m_AttackerPlayerViewRotation;
+ private int m_IsHitscanAttack;
+ private int m_HasLineOfSight;
+ private int m_IsCriticalHit;
+ private uint m_HitBoneId_DEPRECATED;
+ private float m_DamageTaken;
+ private float m_HealthRemaining;
+ private AntiCheatCommonPlayerTakeDamageSource m_DamageSource;
+ private AntiCheatCommonPlayerTakeDamageType m_DamageType;
+ private AntiCheatCommonPlayerTakeDamageResult m_DamageResult;
+ private IntPtr m_PlayerUseWeaponData;
+ private uint m_TimeSincePlayerUseWeaponMs;
+ private IntPtr m_DamagePosition;
+ private IntPtr m_AttackerPlayerViewPosition;
+
+ public void Set(ref LogPlayerTakeDamageOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERTAKEDAMAGE_API_LATEST;
+ m_VictimPlayerHandle = other.VictimPlayerHandle;
+ Helper.Set(other.VictimPlayerPosition, ref m_VictimPlayerPosition);
+ Helper.Set(other.VictimPlayerViewRotation, ref m_VictimPlayerViewRotation);
+ m_AttackerPlayerHandle = other.AttackerPlayerHandle;
+ Helper.Set(other.AttackerPlayerPosition, ref m_AttackerPlayerPosition);
+ Helper.Set(other.AttackerPlayerViewRotation, ref m_AttackerPlayerViewRotation);
+ Helper.Set(other.IsHitscanAttack, ref m_IsHitscanAttack);
+ Helper.Set(other.HasLineOfSight, ref m_HasLineOfSight);
+ Helper.Set(other.IsCriticalHit, ref m_IsCriticalHit);
+ m_HitBoneId_DEPRECATED = other.HitBoneId_DEPRECATED;
+ m_DamageTaken = other.DamageTaken;
+ m_HealthRemaining = other.HealthRemaining;
+ m_DamageSource = other.DamageSource;
+ m_DamageType = other.DamageType;
+ m_DamageResult = other.DamageResult;
+ Helper.Set(other.PlayerUseWeaponData, ref m_PlayerUseWeaponData);
+ m_TimeSincePlayerUseWeaponMs = other.TimeSincePlayerUseWeaponMs;
+ Helper.Set(other.DamagePosition, ref m_DamagePosition);
+ Helper.Set(other.AttackerPlayerViewPosition, ref m_AttackerPlayerViewPosition);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_VictimPlayerPosition);
+ Helper.Dispose(ref m_VictimPlayerViewRotation);
+ Helper.Dispose(ref m_AttackerPlayerPosition);
+ Helper.Dispose(ref m_AttackerPlayerViewRotation);
+ Helper.Dispose(ref m_PlayerUseWeaponData);
+ Helper.Dispose(ref m_DamagePosition);
+ Helper.Dispose(ref m_AttackerPlayerViewPosition);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTickOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTickOptions.cs
new file mode 100644
index 0000000..e185fdf
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerTickOptions.cs
@@ -0,0 +1,83 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerTickOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr PlayerHandle { get; set; }
+
+ ///
+ /// Player character's current world position as a 3D vector. This should be the center of the character.
+ ///
+ public Vec3f? PlayerPosition { get; set; }
+
+ ///
+ /// Player camera's current world rotation as a quaternion.
+ ///
+ public Quat? PlayerViewRotation { get; set; }
+
+ ///
+ /// True if the player's view is zoomed (e.g. using a sniper rifle), otherwise
+ ///
+ public bool IsPlayerViewZoomed { get; set; }
+
+ ///
+ /// Player's current health value
+ ///
+ public float PlayerHealth { get; set; }
+
+ ///
+ /// Any movement state applicable
+ ///
+ public AntiCheatCommonPlayerMovementState PlayerMovementState { get; set; }
+
+ ///
+ /// Player camera's current world position as a 3D vector.
+ ///
+ public Vec3f? PlayerViewPosition { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerTickOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PlayerHandle;
+ private IntPtr m_PlayerPosition;
+ private IntPtr m_PlayerViewRotation;
+ private int m_IsPlayerViewZoomed;
+ private float m_PlayerHealth;
+ private AntiCheatCommonPlayerMovementState m_PlayerMovementState;
+ private IntPtr m_PlayerViewPosition;
+
+ public void Set(ref LogPlayerTickOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERTICK_API_LATEST;
+ m_PlayerHandle = other.PlayerHandle;
+ Helper.Set(other.PlayerPosition, ref m_PlayerPosition);
+ Helper.Set(other.PlayerViewRotation, ref m_PlayerViewRotation);
+ Helper.Set(other.IsPlayerViewZoomed, ref m_IsPlayerViewZoomed);
+ m_PlayerHealth = other.PlayerHealth;
+ m_PlayerMovementState = other.PlayerMovementState;
+ Helper.Set(other.PlayerViewPosition, ref m_PlayerViewPosition);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_PlayerPosition);
+ Helper.Dispose(ref m_PlayerViewRotation);
+ Helper.Dispose(ref m_PlayerViewPosition);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseAbilityOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseAbilityOptions.cs
new file mode 100644
index 0000000..786bf67
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseAbilityOptions.cs
@@ -0,0 +1,59 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerUseAbilityOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr PlayerHandle { get; set; }
+
+ ///
+ /// Game defined unique identifier for the ability being used
+ ///
+ public uint AbilityId { get; set; }
+
+ ///
+ /// Duration of the ability effect in milliseconds. If not applicable, use 0.
+ ///
+ public uint AbilityDurationMs { get; set; }
+
+ ///
+ /// Cooldown until the ability can be used again in milliseconds. If not applicable, use 0.
+ ///
+ public uint AbilityCooldownMs { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerUseAbilityOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_PlayerHandle;
+ private uint m_AbilityId;
+ private uint m_AbilityDurationMs;
+ private uint m_AbilityCooldownMs;
+
+ public void Set(ref LogPlayerUseAbilityOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERUSEABILITY_API_LATEST;
+ m_PlayerHandle = other.PlayerHandle;
+ m_AbilityId = other.AbilityId;
+ m_AbilityDurationMs = other.AbilityDurationMs;
+ m_AbilityCooldownMs = other.AbilityCooldownMs;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponData.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponData.cs
new file mode 100644
index 0000000..2bc2820
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponData.cs
@@ -0,0 +1,74 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Log Player Use Weapon Data.
+ ///
+ public struct LogPlayerUseWeaponData
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr PlayerHandle { get; set; }
+
+ ///
+ /// Attack origin world position as a 3D vector
+ ///
+ public Vec3f? PlayerPosition { get; set; }
+
+ ///
+ /// Attack direction as a quaternion
+ ///
+ public Quat? PlayerViewRotation { get; set; }
+
+ ///
+ /// True if the player's view is zoomed (e.g. using a sniper rifle), otherwise
+ ///
+ public bool IsPlayerViewZoomed { get; set; }
+
+ ///
+ /// Set to if the player is using a melee attack, otherwise
+ ///
+ public bool IsMeleeAttack { get; set; }
+
+ ///
+ /// Name of the weapon used. Will be truncated to bytes if longer.
+ ///
+ public Utf8String WeaponName { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerUseWeaponDataInternal : ISettable
+ {
+ private IntPtr m_PlayerHandle;
+ private IntPtr m_PlayerPosition;
+ private IntPtr m_PlayerViewRotation;
+ private int m_IsPlayerViewZoomed;
+ private int m_IsMeleeAttack;
+ private IntPtr m_WeaponName;
+
+ public void Set(ref LogPlayerUseWeaponData other)
+ {
+ Dispose();
+
+ m_PlayerHandle = other.PlayerHandle;
+ Helper.Set(other.PlayerPosition, ref m_PlayerPosition);
+ Helper.Set(other.PlayerViewRotation, ref m_PlayerViewRotation);
+ Helper.Set(other.IsPlayerViewZoomed, ref m_IsPlayerViewZoomed);
+ Helper.Set(other.IsMeleeAttack, ref m_IsMeleeAttack);
+ Helper.Set(other.WeaponName, ref m_WeaponName);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_PlayerPosition);
+ Helper.Dispose(ref m_PlayerViewRotation);
+ Helper.Dispose(ref m_WeaponName);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponOptions.cs
new file mode 100644
index 0000000..3ffeba6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/LogPlayerUseWeaponOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct LogPlayerUseWeaponOptions
+ {
+ ///
+ /// Struct containing detailed information about a weapon use event
+ ///
+ public LogPlayerUseWeaponData? UseWeaponData { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct LogPlayerUseWeaponOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_UseWeaponData;
+
+ public void Set(ref LogPlayerUseWeaponOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.LOGPLAYERUSEWEAPON_API_LATEST;
+ Helper.Set(other.UseWeaponData, ref m_UseWeaponData);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_UseWeaponData);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientActionRequiredCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientActionRequiredCallbackInfo.cs
new file mode 100644
index 0000000..ae5b097
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientActionRequiredCallbackInfo.cs
@@ -0,0 +1,82 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Structure containing details about a required client/peer action
+ ///
+ public struct OnClientActionRequiredCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Caller-specified context data
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The identifier of the client/peer that this action applies to. See the RegisterClient and RegisterPeer functions.
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The action that must be applied to the specified client/peer
+ ///
+ public AntiCheatCommonClientAction ClientAction { get; set; }
+
+ ///
+ /// Code indicating the reason for the action. This can be displayed to the affected player.
+ ///
+ public AntiCheatCommonClientActionReason ActionReasonCode { get; set; }
+
+ ///
+ /// containing details about the action reason. This can be displayed to the affected player.
+ ///
+ public Utf8String ActionReasonDetailsString { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnClientActionRequiredCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_ClientHandle;
+ private AntiCheatCommonClientAction m_ClientAction;
+ private AntiCheatCommonClientActionReason m_ActionReasonCode;
+ private IntPtr m_ActionReasonDetailsString;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnClientActionRequiredCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ other.ClientHandle = m_ClientHandle;
+ other.ClientAction = m_ClientAction;
+ other.ActionReasonCode = m_ActionReasonCode;
+ Utf8String ActionReasonDetailsStringPublic;
+ Helper.Get(m_ActionReasonDetailsString, out ActionReasonDetailsStringPublic);
+ other.ActionReasonDetailsString = ActionReasonDetailsStringPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientAuthStatusChangedCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientAuthStatusChangedCallbackInfo.cs
new file mode 100644
index 0000000..d9f8600
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnClientAuthStatusChangedCallbackInfo.cs
@@ -0,0 +1,66 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Structure containing details about a client/peer authentication status change
+ ///
+ public struct OnClientAuthStatusChangedCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Caller-specified context data
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The identifier of the client/peer that this status change applies to. See the RegisterClient and RegisterPeer functions.
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The client/peer's new authentication status
+ ///
+ public AntiCheatCommonClientAuthStatus ClientAuthStatus { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnClientAuthStatusChangedCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_ClientHandle;
+ private AntiCheatCommonClientAuthStatus m_ClientAuthStatus;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnClientAuthStatusChangedCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ other.ClientHandle = m_ClientHandle;
+ other.ClientAuthStatus = m_ClientAuthStatus;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnMessageToClientCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnMessageToClientCallbackInfo.cs
new file mode 100644
index 0000000..1401e13
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/OnMessageToClientCallbackInfo.cs
@@ -0,0 +1,69 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Structure containing details about a new message that must be dispatched to a connected client/peer.
+ ///
+ public struct OnMessageToClientCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// Caller-specified context data
+ ///
+ public object ClientData { get; set; }
+
+ ///
+ /// The identifier of the client/peer that this message must be delivered to. See the RegisterClient and RegisterPeer functions.
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The message data that must be sent to the client
+ ///
+ public ArraySegment MessageData { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return null;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct OnMessageToClientCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private IntPtr m_ClientData;
+ private IntPtr m_ClientHandle;
+ private IntPtr m_MessageData;
+ private uint m_MessageDataSizeBytes;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out OnMessageToClientCallbackInfo other)
+ {
+ other = default;
+
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ other.ClientHandle = m_ClientHandle;
+ ArraySegment MessageDataPublic;
+ Helper.Get(m_MessageData, out MessageDataPublic, m_MessageDataSizeBytes);
+ other.MessageData = MessageDataPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Quat.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Quat.cs
new file mode 100644
index 0000000..4ba26e1
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Quat.cs
@@ -0,0 +1,57 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Quaternion using left-handed coordinate system (as in Unreal Engine)
+ ///
+ public struct Quat
+ {
+ ///
+ /// W component - scalar part
+ ///
+ public float w { get; set; }
+
+ ///
+ /// X component - forward direction
+ ///
+ public float x { get; set; }
+
+ ///
+ /// Y component - right direction
+ ///
+ public float y { get; set; }
+
+ ///
+ /// Z component - up direction
+ ///
+ public float z { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct QuatInternal : ISettable
+ {
+ private float m_w;
+ private float m_x;
+ private float m_y;
+ private float m_z;
+
+ public void Set(ref Quat other)
+ {
+ Dispose();
+
+ m_w = other.w;
+ m_x = other.x;
+ m_y = other.y;
+ m_z = other.z;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventOptions.cs
new file mode 100644
index 0000000..de4a729
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventOptions.cs
@@ -0,0 +1,62 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct RegisterEventOptions
+ {
+ ///
+ /// Unique event identifier. Must be >= .
+ ///
+ public uint EventId { get; set; }
+
+ ///
+ /// Name of the custom event. Allowed characters are 0-9, A-Z, a-z, '_', '-'
+ ///
+ public Utf8String EventName { get; set; }
+
+ ///
+ /// Type of the custom event
+ ///
+ public AntiCheatCommonEventType EventType { get; set; }
+
+ ///
+ /// to an array of with ParamDefsCount elements
+ ///
+ public RegisterEventParamDef[] ParamDefs { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct RegisterEventOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_EventId;
+ private IntPtr m_EventName;
+ private AntiCheatCommonEventType m_EventType;
+ private uint m_ParamDefsCount;
+ private IntPtr m_ParamDefs;
+
+ public void Set(ref RegisterEventOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.REGISTEREVENT_API_LATEST;
+ m_EventId = other.EventId;
+ Helper.Set(other.EventName, ref m_EventName);
+ m_EventType = other.EventType;
+ Helper.Set(other.ParamDefs, ref m_ParamDefs, out m_ParamDefsCount, false);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_EventName);
+ Helper.Dispose(ref m_ParamDefs);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventParamDef.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventParamDef.cs
new file mode 100644
index 0000000..bae056c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/RegisterEventParamDef.cs
@@ -0,0 +1,44 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Register Event Parameter Definition.
+ ///
+ public struct RegisterEventParamDef
+ {
+ ///
+ /// Parameter name. Allowed characters are 0-9, A-Z, a-z, '_', '-'
+ ///
+ public Utf8String ParamName { get; set; }
+
+ ///
+ /// Parameter type
+ ///
+ public AntiCheatCommonEventParamType ParamType { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct RegisterEventParamDefInternal : ISettable
+ {
+ private IntPtr m_ParamName;
+ private AntiCheatCommonEventParamType m_ParamType;
+
+ public void Set(ref RegisterEventParamDef other)
+ {
+ Dispose();
+
+ Helper.Set(other.ParamName, ref m_ParamName);
+ m_ParamType = other.ParamType;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_ParamName);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetClientDetailsOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetClientDetailsOptions.cs
new file mode 100644
index 0000000..104f6af
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetClientDetailsOptions.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct SetClientDetailsOptions
+ {
+ ///
+ /// Locally unique value used in RegisterClient/RegisterPeer
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// General flags associated with this client, if any
+ ///
+ public AntiCheatCommonClientFlags ClientFlags { get; set; }
+
+ ///
+ /// Input device being used by this client, if known
+ ///
+ public AntiCheatCommonClientInput ClientInputMethod { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct SetClientDetailsOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private AntiCheatCommonClientFlags m_ClientFlags;
+ private AntiCheatCommonClientInput m_ClientInputMethod;
+
+ public void Set(ref SetClientDetailsOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.SETCLIENTDETAILS_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ m_ClientFlags = other.ClientFlags;
+ m_ClientInputMethod = other.ClientInputMethod;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetGameSessionIdOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetGameSessionIdOptions.cs
new file mode 100644
index 0000000..6474b8c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/SetGameSessionIdOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct SetGameSessionIdOptions
+ {
+ ///
+ /// Game session identifier
+ ///
+ public Utf8String GameSessionId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct SetGameSessionIdOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_GameSessionId;
+
+ public void Set(ref SetGameSessionIdOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatCommonInterface.SETGAMESESSIONID_API_LATEST;
+ Helper.Set(other.GameSessionId, ref m_GameSessionId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_GameSessionId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Vec3f.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Vec3f.cs
new file mode 100644
index 0000000..2a070c6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatCommon/Vec3f.cs
@@ -0,0 +1,50 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatCommon
+{
+ ///
+ /// Vector using left-handed coordinate system (as in Unreal Engine)
+ ///
+ public struct Vec3f
+ {
+ ///
+ /// X axis coordinate - forward direction
+ ///
+ public float x { get; set; }
+
+ ///
+ /// Y axis coordinate - right direction
+ ///
+ public float y { get; set; }
+
+ ///
+ /// Z axis coordinate - up direction
+ ///
+ public float z { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct Vec3fInternal : ISettable
+ {
+ private float m_x;
+ private float m_y;
+ private float m_z;
+
+ public void Set(ref Vec3f other)
+ {
+ Dispose();
+
+ m_x = other.x;
+ m_y = other.y;
+ m_z = other.z;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientActionRequiredOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientActionRequiredOptions.cs
new file mode 100644
index 0000000..8ca5477
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientActionRequiredOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyClientActionRequiredOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyClientActionRequiredOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyClientActionRequiredOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.ADDNOTIFYCLIENTACTIONREQUIRED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientAuthStatusChangedOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientAuthStatusChangedOptions.cs
new file mode 100644
index 0000000..88ac029
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyClientAuthStatusChangedOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyClientAuthStatusChangedOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyClientAuthStatusChangedOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyClientAuthStatusChangedOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.ADDNOTIFYCLIENTAUTHSTATUSCHANGED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyMessageToClientOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyMessageToClientOptions.cs
new file mode 100644
index 0000000..3511a07
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AddNotifyMessageToClientOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct AddNotifyMessageToClientOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyMessageToClientOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyMessageToClientOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.ADDNOTIFYMESSAGETOCLIENT_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AntiCheatServerInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AntiCheatServerInterface.cs
new file mode 100644
index 0000000..ff34289
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/AntiCheatServerInterface.cs
@@ -0,0 +1,876 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ public sealed partial class AntiCheatServerInterface : Handle
+ {
+ public AntiCheatServerInterface()
+ {
+ }
+
+ public AntiCheatServerInterface(IntPtr innerHandle) : base(innerHandle)
+ {
+ }
+
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYCLIENTACTIONREQUIRED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYCLIENTAUTHSTATUSCHANGED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYMESSAGETOCLIENT_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int BEGINSESSION_API_LATEST = 3;
+ ///
+ /// The maximum value for the RegisterTimeoutSeconds parameter in the struct.
+ ///
+ public const int BEGINSESSION_MAX_REGISTERTIMEOUT = 120;
+ ///
+ /// The minimum value for the RegisterTimeoutSeconds parameter in the struct.
+ ///
+ public const int BEGINSESSION_MIN_REGISTERTIMEOUT = 10;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ENDSESSION_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int GETPROTECTMESSAGEOUTPUTLENGTH_API_LATEST = 1;
+ ///
+ /// Maximum size of an individual message provided through .
+ ///
+ public const int ONMESSAGETOCLIENTCALLBACK_MAX_MESSAGE_SIZE = 512;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int PROTECTMESSAGE_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int RECEIVEMESSAGEFROMCLIENT_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int REGISTERCLIENT_API_LATEST = 3;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int SETCLIENTNETWORKSTATE_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int UNPROTECTMESSAGE_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int UNREGISTERCLIENT_API_LATEST = 1;
+
+ ///
+ /// Add a callback issued when an action must be applied to a connected client. The bound function
+ /// will only be called between a successful call to and the matching call.
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyClientActionRequired(ref AddNotifyClientActionRequiredOptions options, object clientData, OnClientActionRequiredCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyClientActionRequiredOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatServer_AddNotifyClientActionRequired(InnerHandle, ref optionsInternal, clientDataPointer, OnClientActionRequiredCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add an optional callback issued when a connected client's authentication status changes. The bound function
+ /// will only be called between a successful call to and the matching call.
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyClientAuthStatusChanged(ref AddNotifyClientAuthStatusChangedOptions options, object clientData, OnClientAuthStatusChangedCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyClientAuthStatusChangedOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatServer_AddNotifyClientAuthStatusChanged(InnerHandle, ref optionsInternal, clientDataPointer, OnClientAuthStatusChangedCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Add a callback issued when a new message must be dispatched to a connected client. The bound function
+ /// will only be called between a successful call to and the matching call.
+ ///
+ ///
+ /// Structure containing input data
+ ///
+ ///
+ /// This value is returned to the caller when NotificationFn is invoked
+ ///
+ ///
+ /// The callback to be fired
+ ///
+ ///
+ /// A valid notification ID if successfully bound, or otherwise
+ ///
+ public ulong AddNotifyMessageToClient(ref AddNotifyMessageToClientOptions options, object clientData, OnMessageToClientCallback notificationFn)
+ {
+ if (notificationFn == null)
+ {
+ throw new ArgumentNullException("notificationFn");
+ }
+
+ var optionsInternal = default(AddNotifyMessageToClientOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notificationFn);
+
+ var callResult = Bindings.EOS_AntiCheatServer_AddNotifyMessageToClient(InnerHandle, ref optionsInternal, clientDataPointer, OnMessageToClientCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Begin the gameplay session. Event callbacks must be configured with
+ /// and before calling this function.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the initialization succeeded
+ /// - - If input data was invalid
+ ///
+ public Result BeginSession(ref BeginSessionOptions options)
+ {
+ var optionsInternal = default(BeginSessionOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_BeginSession(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// End the gameplay session. Should be called when the server is shutting down or entering an idle state.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the initialization succeeded
+ /// - - If input data was invalid
+ ///
+ public Result EndSession(ref EndSessionOptions options)
+ {
+ var optionsInternal = default(EndSessionOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_EndSession(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Calculates the required decrypted buffer size for a given input data length.
+ /// This will not change for a given SDK version, and allows one time allocation of reusable buffers.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, the OutBuffer length in bytes that is required to call ProtectMessage on the given input size.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the output length was calculated successfully
+ /// - - If input data was invalid
+ ///
+ public Result GetProtectMessageOutputLength(ref GetProtectMessageOutputLengthOptions options, out uint outBufferSizeBytes)
+ {
+ var optionsInternal = default(GetProtectMessageOutputLengthOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_GetProtectMessageOutputLength(InnerHandle, ref optionsInternal, out outBufferSizeBytes);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a custom gameplay event.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogEvent(ref AntiCheatCommon.LogEventOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogEventOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogEvent(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a game round's end and outcome.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogGameRoundEnd(ref AntiCheatCommon.LogGameRoundEndOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogGameRoundEndOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogGameRoundEnd(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a new game round start.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogGameRoundStart(ref AntiCheatCommon.LogGameRoundStartOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogGameRoundStartOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogGameRoundStart(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a player despawning in the game, for example as a result of the character's death,
+ /// switching to spectator mode, etc.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerDespawn(ref AntiCheatCommon.LogPlayerDespawnOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerDespawnOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerDespawn(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a player being revived after being downed (see options).
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerRevive(ref AntiCheatCommon.LogPlayerReviveOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerReviveOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerRevive(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a player spawning into the game.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerSpawn(ref AntiCheatCommon.LogPlayerSpawnOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerSpawnOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerSpawn(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs that a player has taken damage.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerTakeDamage(ref AntiCheatCommon.LogPlayerTakeDamageOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerTakeDamageOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerTakeDamage(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs a player's general state including position and view direction.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerTick(ref AntiCheatCommon.LogPlayerTickOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerTickOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerTick(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs that a player has used a special ability or item which affects their character's capabilities,
+ /// for example temporarily increasing their speed or allowing them to see nearby players behind walls.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerUseAbility(ref AntiCheatCommon.LogPlayerUseAbilityOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerUseAbilityOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerUseAbility(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Logs that a player has used a weapon, for example firing one bullet or making one melee attack.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was logged successfully
+ /// - - If input data was invalid
+ /// - - If called outside of BeginSession/EndSession boundaries
+ ///
+ public Result LogPlayerUseWeapon(ref AntiCheatCommon.LogPlayerUseWeaponOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.LogPlayerUseWeaponOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_LogPlayerUseWeapon(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Encrypts an arbitrary message that will be sent to a game client and decrypted on the other side.
+ ///
+ /// Options.Data and OutBuffer may refer to the same buffer to encrypt in place.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, buffer where encrypted message data will be written.
+ ///
+ ///
+ /// On success, the number of bytes that were written to OutBuffer.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was protected successfully
+ /// - - If input data was invalid
+ /// - - If the specified ClientHandle was invalid or not currently registered. See RegisterClient.
+ ///
+ public Result ProtectMessage(ref ProtectMessageOptions options, ArraySegment outBuffer, out uint outBytesWritten)
+ {
+ var optionsInternal = default(ProtectMessageOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outBufferPointer = Helper.AddPinnedBuffer(outBuffer);
+
+ var callResult = Bindings.EOS_AntiCheatServer_ProtectMessage(InnerHandle, ref optionsInternal, outBufferPointer, out outBytesWritten);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Dispose(ref outBufferPointer);
+
+ return callResult;
+ }
+
+ ///
+ /// Call when an anti-cheat message is received from a client.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was processed successfully
+ /// - - If input data was invalid
+ /// - - If message contents were corrupt and could not be processed
+ ///
+ public Result ReceiveMessageFromClient(ref ReceiveMessageFromClientOptions options)
+ {
+ var optionsInternal = default(ReceiveMessageFromClientOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_ReceiveMessageFromClient(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Register a connected client. Must be paired with a call to UnregisterClient.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the player was registered successfully
+ /// - - If input data was invalid
+ ///
+ public Result RegisterClient(ref RegisterClientOptions options)
+ {
+ var optionsInternal = default(RegisterClientOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_RegisterClient(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional Cerberus feature for gameplay data collection.
+ /// Registers a custom gameplay event.
+ ///
+ /// All custom game events must be registered before is called for the first time.
+ /// After the first call to , this function cannot be called any longer.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the event was registered successfully
+ /// - - If input data was invalid
+ ///
+ public Result RegisterEvent(ref AntiCheatCommon.RegisterEventOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.RegisterEventOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_RegisterEvent(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyClientActionRequired(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatServer_RemoveNotifyClientActionRequired(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyClientAuthStatusChanged(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatServer_RemoveNotifyClientAuthStatusChanged(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Remove a previously bound handler.
+ ///
+ ///
+ /// The previously bound notification ID
+ ///
+ public void RemoveNotifyMessageToClient(ulong notificationId)
+ {
+ Bindings.EOS_AntiCheatServer_RemoveNotifyMessageToClient(InnerHandle, notificationId);
+
+ Helper.RemoveCallbackByNotificationId(notificationId);
+ }
+
+ ///
+ /// Optional. Sets or updates client details including input device and admin status.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the flags were updated successfully
+ /// - - If input data was invalid
+ ///
+ public Result SetClientDetails(ref AntiCheatCommon.SetClientDetailsOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.SetClientDetailsOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_SetClientDetails(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional. Can be used to indicate that a client is legitimately known to be
+ /// temporarily unable to communicate, for example as a result of loading a new level.
+ ///
+ /// The bIsNetworkActive flag must be set back to when users enter normal
+ /// gameplay, otherwise anti-cheat enforcement will not work correctly.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the network state was updated successfully
+ /// - - If input data was invalid
+ ///
+ public Result SetClientNetworkState(ref SetClientNetworkStateOptions options)
+ {
+ var optionsInternal = default(SetClientNetworkStateOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_SetClientNetworkState(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional. Sets or updates a game session identifier which can be attached to other data for reference.
+ /// The identifier can be updated at any time for currently and subsequently registered clients.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the game session identifier was set successfully
+ /// - - If input data was invalid
+ ///
+ public Result SetGameSessionId(ref AntiCheatCommon.SetGameSessionIdOptions options)
+ {
+ var optionsInternal = default(AntiCheatCommon.SetGameSessionIdOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_SetGameSessionId(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+
+ ///
+ /// Optional NetProtect feature for game message encryption.
+ /// Decrypts an encrypted message received from a game client.
+ ///
+ /// Options.Data and OutBuffer may refer to the same buffer to decrypt in place.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// On success, buffer where encrypted message data will be written.
+ ///
+ ///
+ /// On success, the number of bytes that were written to OutBuffer.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the message was unprotected successfully
+ /// - - If input data was invalid
+ ///
+ public Result UnprotectMessage(ref UnprotectMessageOptions options, ArraySegment outBuffer, out uint outBytesWritten)
+ {
+ var optionsInternal = default(UnprotectMessageOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outBufferPointer = Helper.AddPinnedBuffer(outBuffer);
+
+ var callResult = Bindings.EOS_AntiCheatServer_UnprotectMessage(InnerHandle, ref optionsInternal, outBufferPointer, out outBytesWritten);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Dispose(ref outBufferPointer);
+
+ return callResult;
+ }
+
+ ///
+ /// Unregister a disconnected client.
+ ///
+ /// This function may only be called between a successful call to and
+ /// the matching call.
+ ///
+ ///
+ /// Structure containing input data.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - - If the player was unregistered successfully
+ /// - - If input data was invalid
+ ///
+ public Result UnregisterClient(ref UnregisterClientOptions options)
+ {
+ var optionsInternal = default(UnregisterClientOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var callResult = Bindings.EOS_AntiCheatServer_UnregisterClient(InnerHandle, ref optionsInternal);
+
+ Helper.Dispose(ref optionsInternal);
+
+ return callResult;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/BeginSessionOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/BeginSessionOptions.cs
new file mode 100644
index 0000000..af98d47
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/BeginSessionOptions.cs
@@ -0,0 +1,65 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct BeginSessionOptions
+ {
+ ///
+ /// Time in seconds to allow newly registered clients to complete anti-cheat authentication.
+ /// Recommended value: 60
+ /// Minimum value:
+ /// Maximum value:
+ ///
+ public uint RegisterTimeoutSeconds { get; set; }
+
+ ///
+ /// Optional name of this game server
+ ///
+ public Utf8String ServerName { get; set; }
+
+ ///
+ /// Gameplay data collection APIs such as LogPlayerTick will be enabled if set to .
+ /// If you do not use these APIs you should set this value to to reduce memory use.
+ ///
+ public bool EnableGameplayData { get; set; }
+
+ ///
+ /// The Product User ID of the local user who is associated with this session. Dedicated servers should set this to .
+ ///
+ public ProductUserId LocalUserId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct BeginSessionOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_RegisterTimeoutSeconds;
+ private IntPtr m_ServerName;
+ private int m_EnableGameplayData;
+ private IntPtr m_LocalUserId;
+
+ public void Set(ref BeginSessionOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.BEGINSESSION_API_LATEST;
+ m_RegisterTimeoutSeconds = other.RegisterTimeoutSeconds;
+ Helper.Set(other.ServerName, ref m_ServerName);
+ Helper.Set(other.EnableGameplayData, ref m_EnableGameplayData);
+ Helper.Set(other.LocalUserId, ref m_LocalUserId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_ServerName);
+ Helper.Dispose(ref m_LocalUserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/EndSessionOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/EndSessionOptions.cs
new file mode 100644
index 0000000..d8953a9
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/EndSessionOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct EndSessionOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct EndSessionOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref EndSessionOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.ENDSESSION_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/GetProtectMessageOutputLengthOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/GetProtectMessageOutputLengthOptions.cs
new file mode 100644
index 0000000..96ba0af
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/GetProtectMessageOutputLengthOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct GetProtectMessageOutputLengthOptions
+ {
+ ///
+ /// Length in bytes of input
+ ///
+ public uint DataLengthBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct GetProtectMessageOutputLengthOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private uint m_DataLengthBytes;
+
+ public void Set(ref GetProtectMessageOutputLengthOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.GETPROTECTMESSAGEOUTPUTLENGTH_API_LATEST;
+ m_DataLengthBytes = other.DataLengthBytes;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientActionRequiredCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientActionRequiredCallback.cs
new file mode 100644
index 0000000..8dbedb2
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientActionRequiredCallback.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+
+ ///
+ /// Callback issued when an action must be applied to a connected client.
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnClientActionRequiredCallback(ref AntiCheatCommon.OnClientActionRequiredCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnClientActionRequiredCallbackInternal(ref AntiCheatCommon.OnClientActionRequiredCallbackInfoInternal data);
+
+ internal static class OnClientActionRequiredCallbackInternalImplementation
+ {
+ private static OnClientActionRequiredCallbackInternal s_Delegate;
+ public static OnClientActionRequiredCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnClientActionRequiredCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnClientActionRequiredCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnClientActionRequiredCallbackInfoInternal data)
+ {
+ OnClientActionRequiredCallback callback;
+ AntiCheatCommon.OnClientActionRequiredCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientAuthStatusChangedCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientAuthStatusChangedCallback.cs
new file mode 100644
index 0000000..68e4904
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnClientAuthStatusChangedCallback.cs
@@ -0,0 +1,46 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+
+ ///
+ /// Optional callback issued when a connected client's authentication status has changed.
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnClientAuthStatusChangedCallback(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnClientAuthStatusChangedCallbackInternal(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfoInternal data);
+
+ internal static class OnClientAuthStatusChangedCallbackInternalImplementation
+ {
+ private static OnClientAuthStatusChangedCallbackInternal s_Delegate;
+ public static OnClientAuthStatusChangedCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnClientAuthStatusChangedCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnClientAuthStatusChangedCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnClientAuthStatusChangedCallbackInfoInternal data)
+ {
+ OnClientAuthStatusChangedCallback callback;
+ AntiCheatCommon.OnClientAuthStatusChangedCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnMessageToClientCallback.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnMessageToClientCallback.cs
new file mode 100644
index 0000000..4ca3638
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/OnMessageToClientCallback.cs
@@ -0,0 +1,52 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+
+ ///
+ /// Callback issued when a new message must be dispatched to a connected client.
+ ///
+ /// Messages contain opaque binary data and must be transmitted to the correct client
+ /// using the game's own networking layer, then delivered to the client anti-cheat instance
+ /// using the function.
+ /// The upper limit of the message size is .
+ ///
+ /// This callback is always issued from within on its calling thread.
+ ///
+ public delegate void OnMessageToClientCallback(ref AntiCheatCommon.OnMessageToClientCallbackInfo data);
+
+ [UnmanagedFunctionPointer(Common.LIBRARY_CALLING_CONVENTION)]
+ internal delegate void OnMessageToClientCallbackInternal(ref AntiCheatCommon.OnMessageToClientCallbackInfoInternal data);
+
+ internal static class OnMessageToClientCallbackInternalImplementation
+ {
+ private static OnMessageToClientCallbackInternal s_Delegate;
+ public static OnMessageToClientCallbackInternal Delegate
+ {
+ get
+ {
+ if (s_Delegate == null)
+ {
+ s_Delegate = new OnMessageToClientCallbackInternal(EntryPoint);
+ }
+
+ return s_Delegate;
+ }
+ }
+
+ [MonoPInvokeCallback(typeof(OnMessageToClientCallbackInternal))]
+ public static void EntryPoint(ref AntiCheatCommon.OnMessageToClientCallbackInfoInternal data)
+ {
+ OnMessageToClientCallback callback;
+ AntiCheatCommon.OnMessageToClientCallbackInfo callbackInfo;
+ if (Helper.TryGetCallback(ref data, out callback, out callbackInfo))
+ {
+ callback(ref callbackInfo);
+ }
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ProtectMessageOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ProtectMessageOptions.cs
new file mode 100644
index 0000000..45b983a
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ProtectMessageOptions.cs
@@ -0,0 +1,54 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct ProtectMessageOptions
+ {
+ ///
+ /// Locally unique value describing the remote user to whom the message will be sent
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The data to encrypt
+ ///
+ public ArraySegment Data { get; set; }
+
+ ///
+ /// The size in bytes of OutBuffer
+ ///
+ public uint OutBufferSizeBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct ProtectMessageOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+ private uint m_OutBufferSizeBytes;
+
+ public void Set(ref ProtectMessageOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.PROTECTMESSAGE_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ m_OutBufferSizeBytes = other.OutBufferSizeBytes;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ReceiveMessageFromClientOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ReceiveMessageFromClientOptions.cs
new file mode 100644
index 0000000..8cbeb62
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/ReceiveMessageFromClientOptions.cs
@@ -0,0 +1,47 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct ReceiveMessageFromClientOptions
+ {
+ ///
+ /// Locally unique value describing the corresponding remote user, as previously passed to RegisterClient
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The data received
+ ///
+ public ArraySegment Data { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct ReceiveMessageFromClientOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+
+ public void Set(ref ReceiveMessageFromClientOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.RECEIVEMESSAGEFROMCLIENT_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/RegisterClientOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/RegisterClientOptions.cs
new file mode 100644
index 0000000..7650ae7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/RegisterClientOptions.cs
@@ -0,0 +1,90 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct RegisterClientOptions
+ {
+ ///
+ /// Locally unique value describing the remote user (e.g. a player object )
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// Type of remote user being registered
+ ///
+ public AntiCheatCommon.AntiCheatCommonClientType ClientType { get; set; }
+
+ ///
+ /// Remote user's platform, if known
+ ///
+ public AntiCheatCommon.AntiCheatCommonClientPlatform ClientPlatform { get; set; }
+
+ ///
+ /// DEPRECATED - New code should set this to and specify UserId instead.
+ ///
+ /// Identifier for the remote user. This is typically a representation of an
+ /// account ID, but it can be any which is both unique (two different users will never
+ /// have the same ) and consistent (if the same user connects to this game session
+ /// twice, the same will be used) in the scope of a single protected game session.
+ ///
+ public Utf8String AccountId_DEPRECATED { get; set; }
+
+ ///
+ /// Optional IP address for the remote user. May be if not available.
+ /// IPv4 format: "0.0.0.0"
+ /// IPv6 format: "0:0:0:0:0:0:0:0"
+ ///
+ public Utf8String IpAddress { get; set; }
+
+ ///
+ /// The Product User ID for the remote user who is being registered.
+ ///
+ public ProductUserId UserId { get; set; }
+
+ ///
+ /// Reserved for future use. Must be set to 0.
+ ///
+ public int Reserved01 { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct RegisterClientOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private AntiCheatCommon.AntiCheatCommonClientType m_ClientType;
+ private AntiCheatCommon.AntiCheatCommonClientPlatform m_ClientPlatform;
+ private IntPtr m_AccountId_DEPRECATED;
+ private IntPtr m_IpAddress;
+ private IntPtr m_UserId;
+ private int m_Reserved01;
+
+ public void Set(ref RegisterClientOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.REGISTERCLIENT_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ m_ClientType = other.ClientType;
+ m_ClientPlatform = other.ClientPlatform;
+ Helper.Set(other.AccountId_DEPRECATED, ref m_AccountId_DEPRECATED);
+ Helper.Set(other.IpAddress, ref m_IpAddress);
+ Helper.Set(other.UserId, ref m_UserId);
+ m_Reserved01 = other.Reserved01;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_AccountId_DEPRECATED);
+ Helper.Dispose(ref m_IpAddress);
+ Helper.Dispose(ref m_UserId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/SetClientNetworkStateOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/SetClientNetworkStateOptions.cs
new file mode 100644
index 0000000..54c3f29
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/SetClientNetworkStateOptions.cs
@@ -0,0 +1,45 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct SetClientNetworkStateOptions
+ {
+ ///
+ /// Locally unique value describing the remote user (e.g. a player object )
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// True if the network is functioning normally, if temporarily interrupted
+ ///
+ public bool IsNetworkActive { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct SetClientNetworkStateOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private int m_IsNetworkActive;
+
+ public void Set(ref SetClientNetworkStateOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.SETCLIENTNETWORKSTATE_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ Helper.Set(other.IsNetworkActive, ref m_IsNetworkActive);
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnprotectMessageOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnprotectMessageOptions.cs
new file mode 100644
index 0000000..07189ce
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnprotectMessageOptions.cs
@@ -0,0 +1,54 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct UnprotectMessageOptions
+ {
+ ///
+ /// Locally unique value describing the remote user from whom the message was received
+ ///
+ public IntPtr ClientHandle { get; set; }
+
+ ///
+ /// The data to decrypt
+ ///
+ public ArraySegment Data { get; set; }
+
+ ///
+ /// The size in bytes of OutBuffer
+ ///
+ public uint OutBufferSizeBytes { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnprotectMessageOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+ private uint m_DataLengthBytes;
+ private IntPtr m_Data;
+ private uint m_OutBufferSizeBytes;
+
+ public void Set(ref UnprotectMessageOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.UNPROTECTMESSAGE_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ Helper.Set(other.Data, ref m_Data, out m_DataLengthBytes);
+ m_OutBufferSizeBytes = other.OutBufferSizeBytes;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Data);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnregisterClientOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnregisterClientOptions.cs
new file mode 100644
index 0000000..b79575f
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AntiCheatServer/UnregisterClientOptions.cs
@@ -0,0 +1,38 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.AntiCheatServer
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct UnregisterClientOptions
+ {
+ ///
+ /// Locally unique value describing the remote user, as previously passed to RegisterClient
+ ///
+ public IntPtr ClientHandle { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct UnregisterClientOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_ClientHandle;
+
+ public void Set(ref UnregisterClientOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AntiCheatServerInterface.UNREGISTERCLIENT_API_LATEST;
+ m_ClientHandle = other.ClientHandle;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/AttributeType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/AttributeType.cs
new file mode 100644
index 0000000..2b14d52
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/AttributeType.cs
@@ -0,0 +1,34 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices
+{
+ ///
+ /// Supported types of data that can be stored with inside an attribute (used by sessions/lobbies/etc)
+ ///
+ ///
+ ///
+ public enum AttributeType : int
+ {
+ ///
+ /// Boolean value (/)
+ ///
+ Boolean = 0,
+ ///
+ /// 64 bit integers
+ ///
+ Int64 = 1,
+ ///
+ /// /floating point precision
+ ///
+ Double = 2,
+ ///
+ /// UTF8 Strings
+ ///
+ String = 3
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AccountFeatureRestrictedInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AccountFeatureRestrictedInfo.cs
new file mode 100644
index 0000000..650ba72
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AccountFeatureRestrictedInfo.cs
@@ -0,0 +1,36 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Intermediate data needed to complete account restriction verification during login flow, returned by when the ResultCode is .
+ /// The URI inside should be exposed to the user for entry in a web browser. The URI must be copied out of this struct before completion of the callback.
+ ///
+ public struct AccountFeatureRestrictedInfo
+ {
+ ///
+ /// The end-user verification URI. Users must be asked to open the page in a browser to address the restrictions.
+ ///
+ public Utf8String VerificationURI { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AccountFeatureRestrictedInfoInternal : IGettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_VerificationURI;
+
+ public void Get(out AccountFeatureRestrictedInfo other)
+ {
+ other = default;
+
+ Utf8String VerificationURIPublic;
+ Helper.Get(m_VerificationURI, out VerificationURIPublic);
+ other.VerificationURI = VerificationURIPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AddNotifyLoginStatusChangedOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AddNotifyLoginStatusChangedOptions.cs
new file mode 100644
index 0000000..069b8b6
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AddNotifyLoginStatusChangedOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Input parameters for the Function.
+ ///
+ public struct AddNotifyLoginStatusChangedOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct AddNotifyLoginStatusChangedOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref AddNotifyLoginStatusChangedOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AuthInterface.ADDNOTIFYLOGINSTATUSCHANGED_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthInterface.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthInterface.cs
new file mode 100644
index 0000000..5e73dd7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthInterface.cs
@@ -0,0 +1,584 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+
+namespace Epic.OnlineServices.Auth
+{
+ public sealed partial class AuthInterface : Handle
+ {
+ public AuthInterface()
+ {
+ }
+
+ public AuthInterface(IntPtr innerHandle) : base(innerHandle)
+ {
+ }
+
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int ACCOUNTFEATURERESTRICTEDINFO_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int ADDNOTIFYLOGINSTATUSCHANGED_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int COPYIDTOKEN_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int COPYUSERAUTHTOKEN_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int CREDENTIALS_API_LATEST = 4;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int DELETEPERSISTENTAUTH_API_LATEST = 2;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int IDTOKEN_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int LINKACCOUNT_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int LOGIN_API_LATEST = 3;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int LOGOUT_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int PINGRANTINFO_API_LATEST = 2;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int QUERYIDTOKEN_API_LATEST = 1;
+ ///
+ /// The most recent version of the struct.
+ ///
+ public const int TOKEN_API_LATEST = 2;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int VERIFYIDTOKEN_API_LATEST = 1;
+ ///
+ /// The most recent version of the API.
+ ///
+ public const int VERIFYUSERAUTH_API_LATEST = 1;
+
+ ///
+ /// Register to receive login status updates.
+ /// If the returned NotificationId is valid, you must call when you no longer wish to have your NotificationHandler called.
+ ///
+ ///
+ ///
+ ///
+ /// structure containing the api version of AddNotifyLoginStatusChanged to use
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the callback
+ ///
+ ///
+ /// a callback that is fired when the login status for a user changes
+ ///
+ ///
+ /// handle representing the registered callback
+ ///
+ public ulong AddNotifyLoginStatusChanged(ref AddNotifyLoginStatusChangedOptions options, object clientData, OnLoginStatusChangedCallback notification)
+ {
+ if (notification == null)
+ {
+ throw new ArgumentNullException("notification");
+ }
+
+ var optionsInternal = default(AddNotifyLoginStatusChangedOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, notification);
+
+ var callResult = Bindings.EOS_Auth_AddNotifyLoginStatusChanged(InnerHandle, ref optionsInternal, clientDataPointer, OnLoginStatusChangedCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.AssignNotificationIdToCallback(clientDataPointer, callResult);
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch an ID token for an Epic Account ID.
+ ///
+ /// ID tokens are used to securely verify user identities with online services.
+ /// The most common use case is using an ID token to authenticate the local user by their selected account ID,
+ /// which is the account ID that should be used to access any game-scoped data for the current application.
+ ///
+ /// An ID token for the selected account ID of a locally authenticated user will always be readily available.
+ /// To retrieve it for the selected account ID, you can use directly after a successful user login.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the account ID for which to copy an ID token.
+ ///
+ ///
+ /// An ID token for the given user, if it exists and is valid; use when finished.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutUserIdToken
+ /// - if you pass a for the out parameter
+ /// - if the Id token is not found or expired.
+ ///
+ public Result CopyIdToken(ref CopyIdTokenOptions options, out IdToken? outIdToken)
+ {
+ var optionsInternal = default(CopyIdTokenOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outIdTokenPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Auth_CopyIdToken(InnerHandle, ref optionsInternal, out outIdTokenPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outIdTokenPointer, out outIdToken);
+ if (outIdTokenPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Auth_IdToken_Release(outIdTokenPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch a user auth token for an Epic Account ID.
+ ///
+ /// A user authentication token allows any code with possession (backend/client) to perform certain actions on behalf of the user.
+ /// Because of this, for the purposes of user identity verification, the API should be used instead.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the api version of CopyUserAuthToken to use
+ ///
+ ///
+ /// The Epic Account ID of the user being queried
+ ///
+ ///
+ /// The auth token for the given user, if it exists and is valid; use when finished
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the information is available and passed out in OutUserAuthToken
+ /// - if you pass a for the out parameter
+ /// - if the auth token is not found or expired.
+ ///
+ public Result CopyUserAuthToken(ref CopyUserAuthTokenOptions options, EpicAccountId localUserId, out Token? outUserAuthToken)
+ {
+ var optionsInternal = default(CopyUserAuthTokenOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var outUserAuthTokenPointer = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Auth_CopyUserAuthToken(InnerHandle, ref optionsInternal, localUserId.InnerHandle, out outUserAuthTokenPointer);
+
+ Helper.Dispose(ref optionsInternal);
+
+ Helper.Get(outUserAuthTokenPointer, out outUserAuthToken);
+ if (outUserAuthTokenPointer != IntPtr.Zero)
+ {
+ Bindings.EOS_Auth_Token_Release(outUserAuthTokenPointer);
+ }
+
+ return callResult;
+ }
+
+ ///
+ /// Deletes a previously received and locally stored persistent auth access token for the currently logged in user of the local device.
+ ///
+ /// On Desktop and Mobile platforms, the access token is deleted from the keychain of the local user and a backend request is made to revoke the token on the authentication server.
+ /// On Console platforms, even though the caller is responsible for storing and deleting the access token on the local device,
+ /// this function should still be called with the access token before its deletion to make the best effort in attempting to also revoke it on the authentication server.
+ /// If the function would fail on Console, the caller should still proceed as normal to delete the access token locally as intended.
+ ///
+ ///
+ ///
+ ///
+ /// structure containing operation input parameters
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// a callback that is fired when the deletion operation completes, either successfully or in error
+ ///
+ public void DeletePersistentAuth(ref DeletePersistentAuthOptions options, object clientData, OnDeletePersistentAuthCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(DeletePersistentAuthOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_DeletePersistentAuth(InnerHandle, ref optionsInternal, clientDataPointer, OnDeletePersistentAuthCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Fetch an Epic Account ID that is logged in.
+ ///
+ ///
+ /// An index into the list of logged in accounts. If the index is out of bounds, the returned Epic Account ID will be invalid.
+ ///
+ ///
+ /// The Epic Account ID associated with the index passed
+ ///
+ public EpicAccountId GetLoggedInAccountByIndex(int index)
+ {
+ var callResult = Bindings.EOS_Auth_GetLoggedInAccountByIndex(InnerHandle, index);
+
+ EpicAccountId callResultReturn;
+ Helper.Get(callResult, out callResultReturn);
+ return callResultReturn;
+ }
+
+ ///
+ /// Fetch the number of accounts that are logged in.
+ ///
+ ///
+ /// the number of accounts logged in.
+ ///
+ public int GetLoggedInAccountsCount()
+ {
+ var callResult = Bindings.EOS_Auth_GetLoggedInAccountsCount(InnerHandle);
+
+ return callResult;
+ }
+
+ ///
+ /// Fetches the login status for an Epic Account ID.
+ ///
+ ///
+ /// The Epic Account ID of the user being queried
+ ///
+ ///
+ /// The enum value of a user's login status
+ ///
+ public LoginStatus GetLoginStatus(EpicAccountId localUserId)
+ {
+ var callResult = Bindings.EOS_Auth_GetLoginStatus(InnerHandle, localUserId.InnerHandle);
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch one of the merged account IDs for a given logged in account.
+ ///
+ ///
+ /// The account ID of a currently logged in account.
+ ///
+ ///
+ /// An index into the list of merged accounts. If the index is out of bounds, the returned Epic Account ID will be invalid.
+ ///
+ ///
+ /// The Epic Account ID associated with the index passed.
+ ///
+ public EpicAccountId GetMergedAccountByIndex(EpicAccountId localUserId, uint index)
+ {
+ var callResult = Bindings.EOS_Auth_GetMergedAccountByIndex(InnerHandle, localUserId.InnerHandle, index);
+
+ EpicAccountId callResultReturn;
+ Helper.Get(callResult, out callResultReturn);
+ return callResultReturn;
+ }
+
+ ///
+ /// Fetch the number of merged accounts for a given logged in account.
+ ///
+ ///
+ /// The account ID of a currently logged in account.
+ ///
+ ///
+ /// the number of merged accounts for the logged in account.
+ ///
+ public uint GetMergedAccountsCount(EpicAccountId localUserId)
+ {
+ var callResult = Bindings.EOS_Auth_GetMergedAccountsCount(InnerHandle, localUserId.InnerHandle);
+
+ return callResult;
+ }
+
+ ///
+ /// Fetch the selected account ID to the current application for a local authenticated user.
+ ///
+ ///
+ /// The account ID of a currently logged in account.
+ ///
+ ///
+ /// The selected account ID corresponding to the given account ID.
+ ///
+ ///
+ /// containing the result of the operation.
+ /// Possible result codes:
+ /// - if the user is logged in and the information is available.
+ /// - if the output parameter is .
+ /// - if the input account ID is not locally known.
+ /// - if the input account ID is not locally logged in.
+ /// - otherwise.
+ ///
+ public Result GetSelectedAccountId(EpicAccountId localUserId, out EpicAccountId outSelectedAccountId)
+ {
+ var outSelectedAccountIdInnerHandle = IntPtr.Zero;
+
+ var callResult = Bindings.EOS_Auth_GetSelectedAccountId(InnerHandle, localUserId.InnerHandle, out outSelectedAccountIdInnerHandle);
+
+ Helper.Get(outSelectedAccountIdInnerHandle, out outSelectedAccountId);
+
+ return callResult;
+ }
+
+ ///
+ /// Link external account by continuing previous login attempt with a continuance token.
+ ///
+ /// The user will be presented with Epic Accounts onboarding flow managed by the SDK.
+ ///
+ /// On success, the user will be logged in at the completion of this action.
+ /// This will commit this external account to the Epic Account and cannot be undone in the SDK.
+ ///
+ ///
+ ///
+ ///
+ /// structure containing the account credentials to use during the link account operation
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// a callback that is fired when the link account operation completes, either successfully or in error
+ ///
+ public void LinkAccount(ref LinkAccountOptions options, object clientData, OnLinkAccountCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(LinkAccountOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_LinkAccount(InnerHandle, ref optionsInternal, clientDataPointer, OnLinkAccountCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Login/Authenticate with user credentials.
+ ///
+ ///
+ ///
+ ///
+ /// structure containing the account credentials to use during the login operation
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// a callback that is fired when the login operation completes, either successfully or in error
+ ///
+ public void Login(ref LoginOptions options, object clientData, OnLoginCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(LoginOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_Login(InnerHandle, ref optionsInternal, clientDataPointer, OnLoginCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Signs the player out of the online service.
+ ///
+ ///
+ ///
+ ///
+ /// structure containing information about which account to log out.
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// a callback that is fired when the logout operation completes, either successfully or in error
+ ///
+ public void Logout(ref LogoutOptions options, object clientData, OnLogoutCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(LogoutOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_Logout(InnerHandle, ref optionsInternal, clientDataPointer, OnLogoutCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Query the backend for an ID token that describes one of the merged account IDs of a local authenticated user.
+ ///
+ /// The ID token can be used to impersonate a merged account ID when communicating with online services.
+ ///
+ /// An ID token for the selected account ID of a locally authenticated user will always be readily available and does not need to be queried explicitly.
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing the merged account ID for which to query an ID token.
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate.
+ ///
+ ///
+ /// A callback that is fired when the operation completes, either successfully or in error.
+ ///
+ public void QueryIdToken(ref QueryIdTokenOptions options, object clientData, OnQueryIdTokenCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(QueryIdTokenOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_QueryIdToken(InnerHandle, ref optionsInternal, clientDataPointer, OnQueryIdTokenCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Unregister from receiving login status updates.
+ ///
+ ///
+ /// handle representing the registered callback
+ ///
+ public void RemoveNotifyLoginStatusChanged(ulong inId)
+ {
+ Bindings.EOS_Auth_RemoveNotifyLoginStatusChanged(InnerHandle, inId);
+
+ Helper.RemoveCallbackByNotificationId(inId);
+ }
+
+ ///
+ /// Verify a given ID token for authenticity and validity.
+ ///
+ ///
+ ///
+ ///
+ /// Structure containing information about the ID token to verify.
+ ///
+ ///
+ /// Arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// A callback that is fired when the operation completes, either successfully or in error.
+ ///
+ public void VerifyIdToken(ref VerifyIdTokenOptions options, object clientData, OnVerifyIdTokenCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(VerifyIdTokenOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_VerifyIdToken(InnerHandle, ref optionsInternal, clientDataPointer, OnVerifyIdTokenCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+
+ ///
+ /// Contact the backend service to verify validity of an existing user auth token.
+ /// This function is intended for server-side use only.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// structure containing information about the auth token being verified
+ ///
+ ///
+ /// arbitrary data that is passed back to you in the CompletionDelegate
+ ///
+ ///
+ /// a callback that is fired when the logout operation completes, either successfully or in error
+ ///
+ public void VerifyUserAuth(ref VerifyUserAuthOptions options, object clientData, OnVerifyUserAuthCallback completionDelegate)
+ {
+ if (completionDelegate == null)
+ {
+ throw new ArgumentNullException("completionDelegate");
+ }
+
+ var optionsInternal = default(VerifyUserAuthOptionsInternal);
+ optionsInternal.Set(ref options);
+
+ var clientDataPointer = IntPtr.Zero;
+
+ Helper.AddCallback(out clientDataPointer, clientData, completionDelegate);
+
+ Bindings.EOS_Auth_VerifyUserAuth(InnerHandle, ref optionsInternal, clientDataPointer, OnVerifyUserAuthCallbackInternalImplementation.Delegate);
+
+ Helper.Dispose(ref optionsInternal);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthScopeFlags.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthScopeFlags.cs
new file mode 100644
index 0000000..710102b
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthScopeFlags.cs
@@ -0,0 +1,45 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Flags that describe user permissions
+ ///
+ [Flags]
+ public enum AuthScopeFlags : int
+ {
+ ///
+ /// Default value, no permissions required
+ ///
+ NoFlags = 0x0,
+ ///
+ /// Permissions to see your account ID, display name, and language
+ ///
+ BasicProfile = 0x1,
+ ///
+ /// Permissions to see a list of your friends who use this application
+ ///
+ FriendsList = 0x2,
+ ///
+ /// Permissions to set your online presence and see presence of your friends
+ ///
+ Presence = 0x4,
+ ///
+ /// Permissions to manage the Epic friends list. This scope is restricted to Epic first party products, and attempting to use it will result in authentication failures.
+ ///
+ FriendsManagement = 0x8,
+ ///
+ /// Permissions to see email in the response when fetching information for a user. This scope is restricted to Epic first party products, and attempting to use it will result in authentication failures.
+ ///
+ Email = 0x10,
+ ///
+ /// Permissions to see your country
+ ///
+ Country = 0x20
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthTokenType.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthTokenType.cs
new file mode 100644
index 0000000..cb751b7
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/AuthTokenType.cs
@@ -0,0 +1,26 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Types of auth tokens
+ ///
+ ///
+ ///
+ public enum AuthTokenType : int
+ {
+ ///
+ /// Auth token is for a validated client
+ ///
+ Client = 0,
+ ///
+ /// Auth token is for a validated user
+ ///
+ User = 1
+ }
+
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyIdTokenOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyIdTokenOptions.cs
new file mode 100644
index 0000000..eca1606
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyIdTokenOptions.cs
@@ -0,0 +1,39 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyIdTokenOptions
+ {
+ ///
+ /// The Epic Account ID of the user being queried.
+ ///
+ public EpicAccountId AccountId { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyIdTokenOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_AccountId;
+
+ public void Set(ref CopyIdTokenOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AuthInterface.COPYIDTOKEN_API_LATEST;
+ Helper.Set(other.AccountId, ref m_AccountId);
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_AccountId);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyUserAuthTokenOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyUserAuthTokenOptions.cs
new file mode 100644
index 0000000..87d6d8c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/CopyUserAuthTokenOptions.cs
@@ -0,0 +1,33 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Input parameters for the function.
+ ///
+ public struct CopyUserAuthTokenOptions
+ {
+
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CopyUserAuthTokenOptionsInternal : ISettable
+ {
+ private int m_ApiVersion;
+
+ public void Set(ref CopyUserAuthTokenOptions other)
+ {
+ Dispose();
+
+ m_ApiVersion = AuthInterface.COPYUSERAUTHTOKEN_API_LATEST;
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/Credentials.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/Credentials.cs
new file mode 100644
index 0000000..baf0cea
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/Credentials.cs
@@ -0,0 +1,89 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Login credentials filled as part of the struct for API.
+ ///
+ /// Required input parameters to be set depend on the login credential type.
+ /// Any parameters not being used must be set to . Otherwise, error is returned.
+ ///
+ /// | ID is the email address, and Token is the password.
+ /// | Set ID to . Token is the exchange code.
+ /// | Set ID to . On console platforms, Token is the long-lived refresh token. Otherwise, set to .
+ /// | Set ID as the host (e.g. localhost:6547). Token is the credential name registered in the EOS Developer Authentication Tool.
+ /// | Set ID to . Token is the refresh token.
+ /// | Set ID and Token to . SystemAuthCredentialsOptions may be required on mobile platforms.
+ /// | Set ID to or the External Account ID that belongs to the external auth token. Token is the external auth token specified by ExternalType. External Account IDs set to the ID are expected as either base-10 numeric for integer-based external Account IDs, or the actual for everything else. If ID is provided, login will automatically be cancelled if the EOS SDK is able to and does detect the external account signing-out. If ID is provided, it must match the external account ID belonging to the auth-token, or login will fail.
+ ///
+ ///
+ ///
+ ///
+ public struct Credentials
+ {
+ ///
+ /// Authentication ID value based on the used .
+ /// If not used, must be set to .
+ ///
+ public Utf8String Id { get; set; }
+
+ ///
+ /// Authentication Token value based on the used .
+ /// If not used, must be set to .
+ ///
+ public Utf8String Token { get; set; }
+
+ ///
+ /// Login credentials type based on the authentication method used.
+ ///
+ public LoginCredentialType Type { get; set; }
+
+ ///
+ /// This field is for system specific options, if any.
+ ///
+ /// If provided, the structure will be located in (System)/eos_(system).h.
+ /// The structure will be named EOS_(System)_Auth_CredentialsOptions.
+ ///
+ public IntPtr SystemAuthCredentialsOptions { get; set; }
+
+ ///
+ /// Type of external login. Needed to identify the external auth method to use.
+ /// Used when login type is set to , ignored for other methods.
+ ///
+ public ExternalCredentialType ExternalType { get; set; }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CredentialsInternal : ISettable
+ {
+ private int m_ApiVersion;
+ private IntPtr m_Id;
+ private IntPtr m_Token;
+ private LoginCredentialType m_Type;
+ private IntPtr m_SystemAuthCredentialsOptions;
+ private ExternalCredentialType m_ExternalType;
+
+ public void Set(ref Credentials other)
+ {
+ Dispose();
+
+ m_ApiVersion = AuthInterface.CREDENTIALS_API_LATEST;
+ Helper.Set(other.Id, ref m_Id);
+ Helper.Set(other.Token, ref m_Token);
+ m_Type = other.Type;
+ m_SystemAuthCredentialsOptions = other.SystemAuthCredentialsOptions;
+ m_ExternalType = other.ExternalType;
+ }
+
+ public void Dispose()
+ {
+ Helper.Dispose(ref m_Id);
+ Helper.Dispose(ref m_Token);
+ Helper.Dispose(ref m_SystemAuthCredentialsOptions);
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthCallbackInfo.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthCallbackInfo.cs
new file mode 100644
index 0000000..c59984c
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthCallbackInfo.cs
@@ -0,0 +1,59 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Output parameters for the Function.
+ ///
+ public struct DeletePersistentAuthCallbackInfo : ICallbackInfo
+ {
+ ///
+ /// The code for the operation. indicates that the operation succeeded; other codes indicate errors.
+ ///
+ public Result ResultCode { get; set; }
+
+ ///
+ /// Context that was passed into
+ ///
+ public object ClientData { get; set; }
+
+ public object GetClientData()
+ {
+ return ClientData;
+ }
+
+ public Result? GetResultCode()
+ {
+ return ResultCode;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct DeletePersistentAuthCallbackInfoInternal : ICallbackInfoInternal, IGettable
+ {
+ private Result m_ResultCode;
+ private IntPtr m_ClientData;
+
+ public IntPtr ClientDataPointer
+ {
+ get
+ {
+ return m_ClientData;
+ }
+ }
+
+ public void Get(out DeletePersistentAuthCallbackInfo other)
+ {
+ other = default;
+
+ other.ResultCode = m_ResultCode;
+ object ClientDataPublic;
+ Helper.Get(m_ClientData, out ClientDataPublic);
+ other.ClientData = ClientDataPublic;
+ }
+ }
+}
diff --git a/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthOptions.cs b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthOptions.cs
new file mode 100644
index 0000000..f862d0d
--- /dev/null
+++ b/FusionAPI/Dependencies/EOSSDK/Generated/Auth/DeletePersistentAuthOptions.cs
@@ -0,0 +1,40 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+// This file is automatically generated. Changes to this file may be overwritten.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Epic.OnlineServices.Auth
+{
+ ///
+ /// Input parameters for the