Files
LuaCsForBarotraumaEP/Libraries/BarotraumaLibs/EosInterface/Friends/Presence.cs
2024-03-28 18:34:33 +02:00

105 lines
4.1 KiB
C#

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<JoinGameInfo> dummyJoinGameEvent =
new NamedEvent<JoinGameInfo>();
private static readonly NamedEvent<AcceptInviteInfo> dummyAcceptInviteEvent =
new NamedEvent<AcceptInviteInfo>();
private static readonly NamedEvent<ReceiveInviteInfo> dummyReceiveInviteEvent =
new NamedEvent<ReceiveInviteInfo>();
public static NamedEvent<JoinGameInfo> OnJoinGame
=> Core.LoadedImplementation.IsInitialized()
? Core.LoadedImplementation.OnJoinGame
: dummyJoinGameEvent;
public static NamedEvent<AcceptInviteInfo> OnInviteAccepted
=> Core.LoadedImplementation.IsInitialized()
? Core.LoadedImplementation.OnInviteAccepted
: dummyAcceptInviteEvent;
public static NamedEvent<ReceiveInviteInfo> 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<Result<Unit, SetJoinCommandError>> 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<Result<Unit, SendInviteError>> 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<Presence.JoinGameInfo> OnJoinGame { get; }
public abstract NamedEvent<Presence.AcceptInviteInfo> OnInviteAccepted { get; }
public abstract NamedEvent<Presence.ReceiveInviteInfo> OnInviteReceived { get; }
public abstract Task<Result<Unit, Presence.SetJoinCommandError>> SetJoinCommand(
EpicAccountId epicAccountId, string desc, string joinCommand, string s);
public abstract Task<Result<Unit, Presence.SendInviteError>> SendInvite(
EpicAccountId selfEpicAccountId, EpicAccountId remoteEpicAccountId);
public abstract void DeclineInvite(EpicAccountId selfEpicAccountId, EpicAccountId senderEpicAccountId);
}
}