Barotrauma Client Doc
BarotraumaShared/SharedSource/Steam/AuthTicket.cs
1 #nullable enable
2 using System;
3 using System.Threading.Tasks;
5 
6 namespace Barotrauma.Steam
7 {
8  static partial class SteamManager
9  {
10  private static Option<Steamworks.AuthTicket> currentMultiplayerTicket = Option.None;
11  public static Option<Steamworks.AuthTicket> GetAuthSessionTicketForMultiplayer(Endpoint remoteHostEndpoint)
12  {
13  if (!IsInitialized)
14  {
15  return Option.None;
16  }
17 
18  if (currentMultiplayerTicket.TryUnwrap(out var ticketToCancel))
19  {
20  ticketToCancel.Cancel();
21  }
22  currentMultiplayerTicket = Option.None;
23 
24  var netIdentity = remoteHostEndpoint switch
25  {
26  LidgrenEndpoint { Address: LidgrenAddress { NetAddress: var ipAddr }, Port: var ipPort }
27  => (Steamworks.Data.NetIdentity)Steamworks.Data.NetAddress.From(ipAddr, (ushort)ipPort),
28  SteamP2PEndpoint { SteamId: var steamId }
29  => (Steamworks.Data.NetIdentity)(Steamworks.SteamId)steamId.Value,
30  _
31  => throw new ArgumentOutOfRangeException(nameof(remoteHostEndpoint))
32  };
33  var newTicket = Steamworks.SteamUser.GetAuthSessionTicket(netIdentity);
34 
35  currentMultiplayerTicket = newTicket != null
36  ? Option.Some(newTicket)
37  : Option.None;
38 
39  return currentMultiplayerTicket;
40  }
41 
42  private const string GameAnalyticsConsentIdentity = "BarotraumaGameAnalyticsConsent";
43 
44  private static Option<Steamworks.AuthTicketForWebApi> currentGameAnalyticsConsentTicket = Option.None;
45  public static async Task<Option<Steamworks.AuthTicketForWebApi>> GetAuthTicketForGameAnalyticsConsent()
46  {
47  if (!IsInitialized)
48  {
49  return Option.None;
50  }
51 
52  if (currentGameAnalyticsConsentTicket.TryUnwrap(out var ticketToCancel))
53  {
54  ticketToCancel.Cancel();
55  }
56  currentGameAnalyticsConsentTicket = Option.None;
57 
58  var newTicket = await Steamworks.SteamUser.GetAuthTicketForWebApi(identity: GameAnalyticsConsentIdentity);
59 
60  currentGameAnalyticsConsentTicket = newTicket != null
61  ? Option.Some(newTicket)
62  : Option.None;
63 
64  return currentGameAnalyticsConsentTicket;
65  }
66  }
67 }
readonly UInt64 Value
Definition: SteamId.cs:8
static Option< T > Some(T value)
static UnspecifiedNone None
Definition: Option.cs:119