using System.Threading.Tasks; using Barotrauma.Networking; namespace Barotrauma; public static partial class EosInterface { public static class Presence { public readonly record struct JoinGameInfo( EpicAccountId RecipientId, string JoinCommand); public readonly record struct AcceptInviteInfo( EpicAccountId RecipientId, string JoinCommand); public readonly record struct ReceiveInviteInfo( EpicAccountId RecipientId, EpicAccountId SenderId, string JoinCommand); private static readonly NamedEvent dummyJoinGameEvent = new NamedEvent(); private static readonly NamedEvent dummyAcceptInviteEvent = new NamedEvent(); private static readonly NamedEvent dummyReceiveInviteEvent = new NamedEvent(); public static NamedEvent OnJoinGame => Core.LoadedImplementation.IsInitialized() ? Core.LoadedImplementation.OnJoinGame : dummyJoinGameEvent; public static NamedEvent OnInviteAccepted => Core.LoadedImplementation.IsInitialized() ? Core.LoadedImplementation.OnInviteAccepted : dummyAcceptInviteEvent; public static NamedEvent OnInviteReceived => Core.LoadedImplementation.IsInitialized() ? Core.LoadedImplementation.OnInviteReceived : dummyReceiveInviteEvent; public enum SetJoinCommandError { EosNotInitialized, FailedToSetCustomInvite, FailedToCreatePresenceModification, JoinCommandTooLong, ServerNameTooLong, FailedToSetJoinInfo, FailedToGetPuid, DescTooLong, FailedToSetRichText, FailedToSetRecords, SetPresenceTimedOut, FailedToSetPresence } public static async Task> SetJoinCommand( EpicAccountId epicAccountId, string desc, string serverName, string joinCommand) => Core.LoadedImplementation.IsInitialized() ? await Core.LoadedImplementation.SetJoinCommand(epicAccountId, desc, serverName, joinCommand) : Result.Failure(SetJoinCommandError.EosNotInitialized); public enum SendInviteError { EosNotInitialized, FailedToGetSelfPuid, FailedToGetRemotePuid, TimedOut, InternalError } public static async Task> SendInvite( EpicAccountId selfEpicAccountId, EpicAccountId remoteEpicAccountId) => Core.LoadedImplementation.IsInitialized() ? await Core.LoadedImplementation.SendInvite(selfEpicAccountId, remoteEpicAccountId) : Result.Failure(SendInviteError.EosNotInitialized); public static void DeclineInvite(EpicAccountId selfEpicAccountId, EpicAccountId senderEpicAccountId) { if (Core.LoadedImplementation.IsInitialized()) { Core.LoadedImplementation.DeclineInvite(selfEpicAccountId, senderEpicAccountId); } } } internal abstract partial class Implementation { public abstract NamedEvent OnJoinGame { get; } public abstract NamedEvent OnInviteAccepted { get; } public abstract NamedEvent OnInviteReceived { get; } public abstract Task> SetJoinCommand( EpicAccountId epicAccountId, string desc, string joinCommand, string s); public abstract Task> SendInvite( EpicAccountId selfEpicAccountId, EpicAccountId remoteEpicAccountId); public abstract void DeclineInvite(EpicAccountId selfEpicAccountId, EpicAccountId senderEpicAccountId); } }