70 lines
2.6 KiB
C#
70 lines
2.6 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text.RegularExpressions;
|
|
using Barotrauma.Steam;
|
|
|
|
namespace Barotrauma;
|
|
|
|
static class StoreIntegration
|
|
{
|
|
public enum Store
|
|
{
|
|
None,
|
|
Steam,
|
|
Epic
|
|
}
|
|
|
|
public static Store CurrentStore { get; private set; } = Store.None;
|
|
|
|
public static void Init(ref string[] programArgs)
|
|
{
|
|
#if DEBUG
|
|
if (EosInterface.Login.ParseEgsExchangeCode(programArgs).IsNone())
|
|
{
|
|
// If the dev tool is running on port 8730 with a credential of name localdev,
|
|
// we can ask it to give us an exchange code so we can test the launcher args parsing
|
|
try
|
|
{
|
|
var devAuthToolHttp = new HttpClient();
|
|
devAuthToolHttp.BaseAddress = new UriBuilder(scheme: "http", host: "127.0.0.1", portNumber: 8730).Uri;
|
|
var response = devAuthToolHttp.Send(new HttpRequestMessage(HttpMethod.Get, "localdev/exchange_code"));
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
string responseContent = response.Content.ReadAsStringAsync().Result;
|
|
var match = Regex.Match(input: responseContent,
|
|
@"\s*{\s*""exchange_code""\s*:\s*""([0-9a-fA-F]+)""\s*}\s*");
|
|
if (match.Groups.Count > 1)
|
|
{
|
|
programArgs = programArgs.Concat(new[]
|
|
{
|
|
$"-AUTH_PASSWORD={match.Groups[1].Value}",
|
|
"-AUTH_TYPE=exchangecode"
|
|
}).ToArray();
|
|
}
|
|
}
|
|
}
|
|
catch { /* do nothing */ }
|
|
}
|
|
#endif
|
|
if (EosInterface.Login.ParseEgsExchangeCode(programArgs).IsNone() && SteamManager.SteamworksLibExists)
|
|
{
|
|
// Didn't get EGS exchange code, assume we're on Steam
|
|
// and do not initialize EOS SDK until player consent is confirmed
|
|
SteamManager.Initialize();
|
|
CurrentStore = Store.Steam;
|
|
}
|
|
else
|
|
{
|
|
// Got an EGS exchange code or Steamworks is not present in the files,
|
|
// assume we're on EGS and initialize EOS SDK immediately.
|
|
if (EosInterface.Core.Init(EosInterface.ApplicationCredentials.Client, enableOverlay: RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
|
.TryUnwrapFailure(out var initError))
|
|
{
|
|
DebugConsole.ThrowError($"EOS failed to initialize: {initError}");
|
|
}
|
|
CurrentStore = Store.Epic;
|
|
}
|
|
}
|
|
} |