This commit is contained in:
JustArchi 2019-01-02 18:09:07 +01:00
parent 9f5138cea1
commit 5f33512658
10 changed files with 234 additions and 72 deletions

View file

@ -29,6 +29,8 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ArchiSteamFarm.Localization; using ArchiSteamFarm.Localization;
using ArchiSteamFarm.NLog; using ArchiSteamFarm.NLog;
using SteamKit2;
using SteamKit2.Discovery;
namespace ArchiSteamFarm { namespace ArchiSteamFarm {
internal static class ASF { internal static class ASF {
@ -48,8 +50,22 @@ namespace ArchiSteamFarm {
return; return;
} }
// Before attempting to connect, initialize our configuration // Ensure that we ask for a list of servers if we don't have any saved servers available
await Bot.InitializeSteamConfiguration(Program.GlobalConfig.SteamProtocols, Program.GlobalDatabase.CellID, Program.GlobalDatabase.ServerListProvider).ConfigureAwait(false); IEnumerable<ServerRecord> servers = await Program.GlobalDatabase.ServerListProvider.FetchServerListAsync().ConfigureAwait(false);
if (servers?.Any() != true) {
ArchiLogger.LogGenericInfo(string.Format(Strings.Initializing, nameof(SteamDirectory)));
SteamConfiguration steamConfiguration = SteamConfiguration.Create(builder => builder.WithProtocolTypes(Program.GlobalConfig.SteamProtocols).WithCellID(Program.GlobalDatabase.CellID).WithServerListProvider(Program.GlobalDatabase.ServerListProvider).WithHttpClientFactory(() => Program.WebBrowser.GenerateDisposableHttpClient()));
try {
await SteamDirectory.LoadAsync(steamConfiguration).ConfigureAwait(false);
ArchiLogger.LogGenericInfo(Strings.Success);
} catch {
ArchiLogger.LogGenericWarning(Strings.BotSteamDirectoryInitializationFailed);
await Task.Delay(5000).ConfigureAwait(false);
}
}
HashSet<string> botNames; HashSet<string> botNames;

View file

@ -25,6 +25,7 @@ using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Http;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -227,7 +228,6 @@ namespace ArchiSteamFarm {
// ReSharper disable once AccessToDisposedClosure // ReSharper disable once AccessToDisposedClosure
async () => await iEconService.DeclineTradeOffer( async () => await iEconService.DeclineTradeOffer(
method: WebRequestMethods.Http.Post, method: WebRequestMethods.Http.Post,
secure: true,
tradeofferid: tradeID tradeofferid: tradeID
) )
).ConfigureAwait(false); ).ConfigureAwait(false);
@ -248,6 +248,8 @@ namespace ArchiSteamFarm {
return true; return true;
} }
internal HttpClient GenerateDisposableHttpClient() => WebBrowser.GenerateDisposableHttpClient();
internal async Task<HashSet<uint>> GenerateNewDiscoveryQueue() { internal async Task<HashSet<uint>> GenerateNewDiscoveryQueue() {
const string request = "/explore/generatenewdiscoveryqueue"; const string request = "/explore/generatenewdiscoveryqueue";
@ -281,7 +283,6 @@ namespace ArchiSteamFarm {
active_only: 1, active_only: 1,
get_descriptions: 1, get_descriptions: 1,
get_received_offers: 1, get_received_offers: 1,
secure: true,
time_historical_cutoff: uint.MaxValue time_historical_cutoff: uint.MaxValue
) )
).ConfigureAwait(false); ).ConfigureAwait(false);
@ -408,7 +409,7 @@ namespace ArchiSteamFarm {
WebAPI.DefaultBaseAddress.Host, WebAPI.DefaultBaseAddress.Host,
// ReSharper disable once AccessToDisposedClosure // ReSharper disable once AccessToDisposedClosure
async () => await iSteamApps.GetAppList2(secure: true) async () => await iSteamApps.GetAppList2()
).ConfigureAwait(false); ).ConfigureAwait(false);
} catch (TaskCanceledException e) { } catch (TaskCanceledException e) {
Bot.ArchiLogger.LogGenericDebuggingException(e); Bot.ArchiLogger.LogGenericDebuggingException(e);
@ -800,7 +801,6 @@ namespace ArchiSteamFarm {
// ReSharper disable once AccessToDisposedClosure // ReSharper disable once AccessToDisposedClosure
async () => await iPlayerService.GetOwnedGames( async () => await iPlayerService.GetOwnedGames(
include_appinfo: 1, include_appinfo: 1,
secure: true,
steamid: steamID steamid: steamID
) )
).ConfigureAwait(false); ).ConfigureAwait(false);
@ -849,10 +849,7 @@ namespace ArchiSteamFarm {
WebAPI.DefaultBaseAddress.Host, WebAPI.DefaultBaseAddress.Host,
// ReSharper disable once AccessToDisposedClosure // ReSharper disable once AccessToDisposedClosure
async () => await iTwoFactorService.QueryTime( async () => await iTwoFactorService.QueryTime(method: WebRequestMethods.Http.Post)
method: WebRequestMethods.Http.Post,
secure: true
)
).ConfigureAwait(false); ).ConfigureAwait(false);
} catch (TaskCanceledException e) { } catch (TaskCanceledException e) {
Bot.ArchiLogger.LogGenericDebuggingException(e); Bot.ArchiLogger.LogGenericDebuggingException(e);
@ -960,7 +957,6 @@ namespace ArchiSteamFarm {
// ReSharper disable once AccessToDisposedClosure // ReSharper disable once AccessToDisposedClosure
async () => await iEconService.GetTradeHoldDurations( async () => await iEconService.GetTradeHoldDurations(
secure: true,
steamid_target: steamID, steamid_target: steamID,
trade_offer_access_token: tradeToken ?? "" // TODO: Change me once https://github.com/SteamRE/SteamKit/pull/522 is merged trade_offer_access_token: tradeToken ?? "" // TODO: Change me once https://github.com/SteamRE/SteamKit/pull/522 is merged
) )
@ -1115,7 +1111,6 @@ namespace ArchiSteamFarm {
async () => await iSteamUserAuth.AuthenticateUser( async () => await iSteamUserAuth.AuthenticateUser(
encrypted_loginkey: Encoding.ASCII.GetString(WebUtility.UrlEncodeToBytes(encryptedLoginKey, 0, encryptedLoginKey.Length)), encrypted_loginkey: Encoding.ASCII.GetString(WebUtility.UrlEncodeToBytes(encryptedLoginKey, 0, encryptedLoginKey.Length)),
method: WebRequestMethods.Http.Post, method: WebRequestMethods.Http.Post,
secure: true,
sessionkey: Encoding.ASCII.GetString(WebUtility.UrlEncodeToBytes(encryptedSessionKey, 0, encryptedSessionKey.Length)), sessionkey: Encoding.ASCII.GetString(WebUtility.UrlEncodeToBytes(encryptedSessionKey, 0, encryptedSessionKey.Length)),
steamid: steamID steamid: steamID
) )

View file

@ -36,7 +36,6 @@ using ArchiSteamFarm.Localization;
using ArchiSteamFarm.NLog; using ArchiSteamFarm.NLog;
using Newtonsoft.Json; using Newtonsoft.Json;
using SteamKit2; using SteamKit2;
using SteamKit2.Discovery;
using SteamKit2.Unified.Internal; using SteamKit2.Unified.Internal;
namespace ArchiSteamFarm { namespace ArchiSteamFarm {
@ -58,8 +57,6 @@ namespace ArchiSteamFarm {
private static readonly SemaphoreSlim BotsSemaphore = new SemaphoreSlim(1, 1); private static readonly SemaphoreSlim BotsSemaphore = new SemaphoreSlim(1, 1);
private static readonly SemaphoreSlim LoginSemaphore = new SemaphoreSlim(1, 1); private static readonly SemaphoreSlim LoginSemaphore = new SemaphoreSlim(1, 1);
private static SteamConfiguration SteamConfiguration;
internal readonly Actions Actions; internal readonly Actions Actions;
internal readonly ArchiHandler ArchiHandler; internal readonly ArchiHandler ArchiHandler;
internal readonly ArchiLogger ArchiLogger; internal readonly ArchiLogger ArchiLogger;
@ -123,7 +120,7 @@ namespace ArchiSteamFarm {
internal bool PlayingWasBlocked { get; private set; } internal bool PlayingWasBlocked { get; private set; }
internal ulong SteamID { get; private set; } internal ulong SteamID { get; private set; }
internal int WalletBalance { get; private set; } internal uint WalletBalance { get; private set; }
internal ECurrencyCode WalletCurrency { get; private set; } internal ECurrencyCode WalletCurrency { get; private set; }
[JsonProperty] [JsonProperty]
@ -181,8 +178,12 @@ namespace ArchiSteamFarm {
BotDatabase.MobileAuthenticator.Init(this); BotDatabase.MobileAuthenticator.Init(this);
} }
ArchiWebHandler = new ArchiWebHandler(this);
SteamConfiguration steamConfiguration = SteamConfiguration.Create(builder => builder.WithProtocolTypes(Program.GlobalConfig.SteamProtocols).WithCellID(Program.GlobalDatabase.CellID).WithServerListProvider(Program.GlobalDatabase.ServerListProvider).WithHttpClientFactory(() => ArchiWebHandler.GenerateDisposableHttpClient()));
// Initialize // Initialize
SteamClient = new SteamClient(SteamConfiguration); SteamClient = new SteamClient(steamConfiguration);
if (Debugging.IsUserDebugging && Directory.Exists(SharedInfo.DebugDirectory)) { if (Debugging.IsUserDebugging && Directory.Exists(SharedInfo.DebugDirectory)) {
string debugListenerPath = Path.Combine(SharedInfo.DebugDirectory, botName); string debugListenerPath = Path.Combine(SharedInfo.DebugDirectory, botName);
@ -227,7 +228,6 @@ namespace ArchiSteamFarm {
CallbackManager.Subscribe<ArchiHandler.VanityURLChangedCallback>(OnVanityURLChangedCallback); CallbackManager.Subscribe<ArchiHandler.VanityURLChangedCallback>(OnVanityURLChangedCallback);
Actions = new Actions(this); Actions = new Actions(this);
ArchiWebHandler = new ArchiWebHandler(this);
CardsFarmer = new CardsFarmer(this); CardsFarmer = new CardsFarmer(this);
Commands = new Commands(this); Commands = new Commands(this);
Trading = new Trading(this); Trading = new Trading(this);
@ -748,30 +748,6 @@ namespace ArchiSteamFarm {
} }
} }
internal static async Task InitializeSteamConfiguration(ProtocolTypes protocolTypes, uint cellID, IServerListProvider serverListProvider) {
if (serverListProvider == null) {
ASF.ArchiLogger.LogNullError(nameof(serverListProvider));
return;
}
SteamConfiguration = SteamConfiguration.Create(builder => builder.WithProtocolTypes(protocolTypes).WithCellID(cellID).WithServerListProvider(serverListProvider));
// Ensure that we ask for a list of servers if we don't have any saved servers available
IEnumerable<ServerRecord> servers = await SteamConfiguration.ServerListProvider.FetchServerListAsync().ConfigureAwait(false);
if (servers?.Any() != true) {
ASF.ArchiLogger.LogGenericInfo(string.Format(Strings.Initializing, nameof(SteamDirectory)));
try {
await SteamDirectory.LoadAsync(SteamConfiguration).ConfigureAwait(false);
ASF.ArchiLogger.LogGenericInfo(Strings.Success);
} catch {
ASF.ArchiLogger.LogGenericWarning(Strings.BotSteamDirectoryInitializationFailed);
}
}
}
internal bool IsBlacklistedFromIdling(uint appID) { internal bool IsBlacklistedFromIdling(uint appID) {
if (appID == 0) { if (appID == 0) {
ArchiLogger.LogNullError(nameof(appID)); ArchiLogger.LogNullError(nameof(appID));
@ -2456,7 +2432,7 @@ namespace ArchiSteamFarm {
return; return;
} }
WalletBalance = callback.Balance; WalletBalance = (uint) callback.LongBalance;
WalletCurrency = callback.Currency; WalletCurrency = callback.Currency;
} }

View file

@ -45,30 +45,45 @@ namespace ArchiSteamFarm {
private readonly ArchiLogger ArchiLogger; private readonly ArchiLogger ArchiLogger;
private readonly HttpClient HttpClient; private readonly HttpClient HttpClient;
private readonly HttpClientHandler HttpClientHandler;
internal WebBrowser(ArchiLogger archiLogger, IWebProxy webProxy = null, bool extendedTimeout = false) { internal WebBrowser(ArchiLogger archiLogger, IWebProxy webProxy = null, bool extendedTimeout = false) {
ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger)); ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger));
HttpClientHandler httpClientHandler = new HttpClientHandler { HttpClientHandler = new HttpClientHandler {
AllowAutoRedirect = false, // This must be false if we want to handle custom redirection schemes such as "steammobile://" AllowAutoRedirect = false, // This must be false if we want to handle custom redirection schemes such as "steammobile://"
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
CookieContainer = CookieContainer, CookieContainer = CookieContainer
Proxy = webProxy,
UseProxy = webProxy != null
}; };
if (!RuntimeCompatibility.IsRunningOnMono) { if (webProxy != null) {
httpClientHandler.MaxConnectionsPerServer = MaxConnections; HttpClientHandler.Proxy = webProxy;
HttpClientHandler.UseProxy = true;
} }
HttpClient = new HttpClient(httpClientHandler) { Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * Program.GlobalConfig.ConnectionTimeout : Program.GlobalConfig.ConnectionTimeout) }; if (!RuntimeCompatibility.IsRunningOnMono) {
HttpClientHandler.MaxConnectionsPerServer = MaxConnections;
}
// Most web services expect that UserAgent is set, so we declare it globally HttpClient = GenerateDisposableHttpClient(extendedTimeout);
// If you by any chance came here with a very "clever" idea of changing default ASF user-agent then here is a very good advice from me: don't, for your own safety - you've been warned
HttpClient.DefaultRequestHeaders.UserAgent.ParseAdd(SharedInfo.PublicIdentifier + "/" + SharedInfo.Version + " (+" + SharedInfo.ProjectURL + ")");
} }
public void Dispose() => HttpClient.Dispose(); public void Dispose() {
HttpClient.Dispose();
HttpClientHandler.Dispose();
}
internal HttpClient GenerateDisposableHttpClient(bool extendedTimeout = false) {
HttpClient result = new HttpClient(HttpClientHandler) {
Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * Program.GlobalConfig.ConnectionTimeout : Program.GlobalConfig.ConnectionTimeout)
};
// Most web services expect that UserAgent is set, so we declare it globally
// If you by any chance came here with a very "clever" idea of hiding your ass by changing default ASF user-agent then here is a very good advice from me: don't, for your own safety - you've been warned
result.DefaultRequestHeaders.UserAgent.ParseAdd(SharedInfo.PublicIdentifier + "/" + SharedInfo.Version + " (+" + SharedInfo.ProjectURL + ")");
return result;
}
internal static void Init() { internal static void Init() {
// Set max connection limit from default of 2 to desired value // Set max connection limit from default of 2 to desired value

Binary file not shown.

View file

@ -4879,7 +4879,12 @@
</member> </member>
<member name="P:SteamKit2.SteamUser.WalletInfoCallback.Balance"> <member name="P:SteamKit2.SteamUser.WalletInfoCallback.Balance">
<summary> <summary>
Gets the balance of the wallet, in cents. Gets the balance of the wallet as a 32-bit integer, in cents.
</summary>
</member>
<member name="P:SteamKit2.SteamUser.WalletInfoCallback.LongBalance">
<summary>
Gets the balance of the wallet as a 64-bit integer, in cents.
</summary> </summary>
</member> </member>
<member name="T:SteamKit2.SteamUser.UpdateMachineAuthCallback"> <member name="T:SteamKit2.SteamUser.UpdateMachineAuthCallback">
@ -5935,6 +5940,13 @@
<param name="allowDirectoryFetch">Whether or not to use the Steam Directory to discover available servers.</param> <param name="allowDirectoryFetch">Whether or not to use the Steam Directory to discover available servers.</param>
<returns>A builder with modified configuration.</returns> <returns>A builder with modified configuration.</returns>
</member> </member>
<member name="M:SteamKit2.ISteamConfigurationBuilder.WithHttpClientFactory(SteamKit2.HttpClientFactory)">
<summary>
Configures this <see cref="T:SteamKit2.SteamConfiguration" /> with custom HTTP behaviour.
</summary>
<param name="factoryFunction">A function to create and configure a new HttpClient.</param>
<returns>A builder with modified configuration.</returns>
</member>
<member name="M:SteamKit2.ISteamConfigurationBuilder.WithProtocolTypes(SteamKit2.ProtocolTypes)"> <member name="M:SteamKit2.ISteamConfigurationBuilder.WithProtocolTypes(SteamKit2.ProtocolTypes)">
<summary> <summary>
Configures how this <see cref="T:SteamKit2.SteamConfiguration" /> will be used to connect to Steam. Configures how this <see cref="T:SteamKit2.SteamConfiguration" /> will be used to connect to Steam.
@ -5973,6 +5985,13 @@
Keys can be obtained from https://steamcommunity.com/dev or the Steamworks Partner site.</param> Keys can be obtained from https://steamcommunity.com/dev or the Steamworks Partner site.</param>
<returns>A builder with modified configuration.</returns> <returns>A builder with modified configuration.</returns>
</member> </member>
<member name="T:SteamKit2.HttpClientFactory">
<summary>
Factory function to create a user-configured HttpClient.
The HttpClient will be disposed of after use.
</summary>
<returns>A new <see cref="T:System.Net.Http.HttpClient"/> to be used to send HTTP requests.</returns>
</member>
<member name="T:SteamKit2.SteamConfiguration"> <member name="T:SteamKit2.SteamConfiguration">
<summary> <summary>
Configuration object to use. Configuration object to use.
@ -6012,6 +6031,11 @@
when calling <c>SteamFriends.RequestFriendInfo</c> without specifying flags. when calling <c>SteamFriends.RequestFriendInfo</c> without specifying flags.
</summary> </summary>
</member> </member>
<member name="P:SteamKit2.SteamConfiguration.HttpClientFactory">
<summary>
Factory function to create a user-configured HttpClient.
</summary>
</member>
<member name="P:SteamKit2.SteamConfiguration.ProtocolTypes"> <member name="P:SteamKit2.SteamConfiguration.ProtocolTypes">
<summary> <summary>
The supported protocol types to use when attempting to connect to Steam. The supported protocol types to use when attempting to connect to Steam.
@ -6338,6 +6362,7 @@
<returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.Interface.Call(System.Net.Http.HttpMethod,System.String,System.Int32,System.Collections.Generic.Dictionary{System.String,System.String})"> <member name="M:SteamKit2.WebAPI.Interface.Call(System.Net.Http.HttpMethod,System.String,System.Int32,System.Collections.Generic.Dictionary{System.String,System.String})">
@ -6351,6 +6376,7 @@
<returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.Interface.Dispose"> <member name="M:SteamKit2.WebAPI.Interface.Dispose">
@ -6389,10 +6415,6 @@
The dynamic method name was not in the correct format. The dynamic method name was not in the correct format.
All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number. All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number.
</exception> </exception>
<exception cref="T:System.ArgumentException">
The reserved named parameter 'secure' was not a boolean value.
This parameter is used when requests must go through the secure API.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException"> <exception cref="T:System.ArgumentOutOfRangeException">
The function version number specified was out of range. The function version number specified was out of range.
</exception> </exception>
@ -6423,6 +6445,7 @@
<returns>A <see cref="T:System.Threading.Tasks.Task`1"/> that contains a <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:System.Threading.Tasks.Task`1"/> that contains a <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.AsyncInterface.Dispose"> <member name="M:SteamKit2.WebAPI.AsyncInterface.Dispose">
@ -6461,10 +6484,6 @@
The dynamic method name was not in the correct format. The dynamic method name was not in the correct format.
All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number. All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number.
</exception> </exception>
<exception cref="T:System.ArgumentException">
The reserved named parameter 'secure' was not a boolean value.
This parameter is used when requests must go through the secure API.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException"> <exception cref="T:System.ArgumentOutOfRangeException">
The function version number specified was out of range. The function version number specified was out of range.
</exception> </exception>
@ -6503,6 +6522,28 @@
<param name="apiKey">An optional API key to be used for authorized requests.</param> <param name="apiKey">An optional API key to be used for authorized requests.</param>
<returns>A dynamic <see cref="T:SteamKit2.WebAPI.AsyncInterface"/> object to interact with the Web API.</returns> <returns>A dynamic <see cref="T:SteamKit2.WebAPI.AsyncInterface"/> object to interact with the Web API.</returns>
</member> </member>
<member name="T:SteamKit2.WebAPIRequestException">
<summary>
Thrown when WebAPI request fails.
</summary>
</member>
<member name="P:SteamKit2.WebAPIRequestException.StatusCode">
<summary>
Represents the status code of the HTTP response.
</summary>
</member>
<member name="P:SteamKit2.WebAPIRequestException.Headers">
<summary>
Represents the collection of HTTP response headers.
</summary>
</member>
<member name="M:SteamKit2.WebAPIRequestException.#ctor(System.String,System.Net.Http.HttpResponseMessage)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.WebAPIRequestException"/> class.
</summary>
<param name="message">The message that describes the error.</param>
<param name="response">HTTP response message including the status code and data.</param>
</member>
<member name="T:SteamKit2.DepotManifest"> <member name="T:SteamKit2.DepotManifest">
<summary> <summary>
Represents a Steam3 depot manifest. Represents a Steam3 depot manifest.
@ -6586,6 +6627,31 @@
<c>true</c> if the filenames are encrypted; otherwise, <c>false</c>. <c>true</c> if the filenames are encrypted; otherwise, <c>false</c>.
</value> </value>
</member> </member>
<member name="P:SteamKit2.DepotManifest.DepotID">
<summary>
Gets the depot id.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.ManifestGID">
<summary>
Gets the manifest id.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.CreationTime">
<summary>
Gets the depot creation time.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.TotalUncompressedSize">
<summary>
Gets the total uncompressed size of all files in this depot.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.TotalCompressedSize">
<summary>
Gets the total compressed size of all files in this depot.
</summary>
</member>
<member name="M:SteamKit2.DepotManifest.DecryptFilenames(System.Byte[])"> <member name="M:SteamKit2.DepotManifest.DecryptFilenames(System.Byte[])">
<summary> <summary>
Attempts to decrypts file names with the given encryption key. Attempts to decrypts file names with the given encryption key.
@ -6640,6 +6706,20 @@
</summary> </summary>
<param name="nAppID">The 32bit app id to assign this GameID from.</param> <param name="nAppID">The 32bit app id to assign this GameID from.</param>
</member> </member>
<member name="M:SteamKit2.GameID.#ctor(System.UInt32,System.String)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.GameID"/> class.
</summary>
<param name="nAppID">The base app id of the mod.</param>
<param name="modPath">The game folder name of the mod.</param>
</member>
<member name="M:SteamKit2.GameID.#ctor(System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.GameID"/> class.
</summary>
<param name="exePath">The path to the executable, usually quoted.</param>
<param name="appName">The name of the application shortcut.</param>
</member>
<member name="M:SteamKit2.GameID.Set(System.UInt64)"> <member name="M:SteamKit2.GameID.Set(System.UInt64)">
<summary> <summary>
Sets the various components of this GameID from a 64bit integer form. Sets the various components of this GameID from a 64bit integer form.

Binary file not shown.

Binary file not shown.

View file

@ -4879,7 +4879,12 @@
</member> </member>
<member name="P:SteamKit2.SteamUser.WalletInfoCallback.Balance"> <member name="P:SteamKit2.SteamUser.WalletInfoCallback.Balance">
<summary> <summary>
Gets the balance of the wallet, in cents. Gets the balance of the wallet as a 32-bit integer, in cents.
</summary>
</member>
<member name="P:SteamKit2.SteamUser.WalletInfoCallback.LongBalance">
<summary>
Gets the balance of the wallet as a 64-bit integer, in cents.
</summary> </summary>
</member> </member>
<member name="T:SteamKit2.SteamUser.UpdateMachineAuthCallback"> <member name="T:SteamKit2.SteamUser.UpdateMachineAuthCallback">
@ -5935,6 +5940,13 @@
<param name="allowDirectoryFetch">Whether or not to use the Steam Directory to discover available servers.</param> <param name="allowDirectoryFetch">Whether or not to use the Steam Directory to discover available servers.</param>
<returns>A builder with modified configuration.</returns> <returns>A builder with modified configuration.</returns>
</member> </member>
<member name="M:SteamKit2.ISteamConfigurationBuilder.WithHttpClientFactory(SteamKit2.HttpClientFactory)">
<summary>
Configures this <see cref="T:SteamKit2.SteamConfiguration" /> with custom HTTP behaviour.
</summary>
<param name="factoryFunction">A function to create and configure a new HttpClient.</param>
<returns>A builder with modified configuration.</returns>
</member>
<member name="M:SteamKit2.ISteamConfigurationBuilder.WithProtocolTypes(SteamKit2.ProtocolTypes)"> <member name="M:SteamKit2.ISteamConfigurationBuilder.WithProtocolTypes(SteamKit2.ProtocolTypes)">
<summary> <summary>
Configures how this <see cref="T:SteamKit2.SteamConfiguration" /> will be used to connect to Steam. Configures how this <see cref="T:SteamKit2.SteamConfiguration" /> will be used to connect to Steam.
@ -5973,6 +5985,13 @@
Keys can be obtained from https://steamcommunity.com/dev or the Steamworks Partner site.</param> Keys can be obtained from https://steamcommunity.com/dev or the Steamworks Partner site.</param>
<returns>A builder with modified configuration.</returns> <returns>A builder with modified configuration.</returns>
</member> </member>
<member name="T:SteamKit2.HttpClientFactory">
<summary>
Factory function to create a user-configured HttpClient.
The HttpClient will be disposed of after use.
</summary>
<returns>A new <see cref="T:System.Net.Http.HttpClient"/> to be used to send HTTP requests.</returns>
</member>
<member name="T:SteamKit2.SteamConfiguration"> <member name="T:SteamKit2.SteamConfiguration">
<summary> <summary>
Configuration object to use. Configuration object to use.
@ -6012,6 +6031,11 @@
when calling <c>SteamFriends.RequestFriendInfo</c> without specifying flags. when calling <c>SteamFriends.RequestFriendInfo</c> without specifying flags.
</summary> </summary>
</member> </member>
<member name="P:SteamKit2.SteamConfiguration.HttpClientFactory">
<summary>
Factory function to create a user-configured HttpClient.
</summary>
</member>
<member name="P:SteamKit2.SteamConfiguration.ProtocolTypes"> <member name="P:SteamKit2.SteamConfiguration.ProtocolTypes">
<summary> <summary>
The supported protocol types to use when attempting to connect to Steam. The supported protocol types to use when attempting to connect to Steam.
@ -6338,6 +6362,7 @@
<returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.Interface.Call(System.Net.Http.HttpMethod,System.String,System.Int32,System.Collections.Generic.Dictionary{System.String,System.String})"> <member name="M:SteamKit2.WebAPI.Interface.Call(System.Net.Http.HttpMethod,System.String,System.Int32,System.Collections.Generic.Dictionary{System.String,System.String})">
@ -6351,6 +6376,7 @@
<returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.Interface.Dispose"> <member name="M:SteamKit2.WebAPI.Interface.Dispose">
@ -6389,10 +6415,6 @@
The dynamic method name was not in the correct format. The dynamic method name was not in the correct format.
All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number. All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number.
</exception> </exception>
<exception cref="T:System.ArgumentException">
The reserved named parameter 'secure' was not a boolean value.
This parameter is used when requests must go through the secure API.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException"> <exception cref="T:System.ArgumentOutOfRangeException">
The function version number specified was out of range. The function version number specified was out of range.
</exception> </exception>
@ -6423,6 +6445,7 @@
<returns>A <see cref="T:System.Threading.Tasks.Task`1"/> that contains a <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns> <returns>A <see cref="T:System.Threading.Tasks.Task`1"/> that contains a <see cref="T:SteamKit2.KeyValue"/> object representing the results of the Web API call.</returns>
<exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception> <exception cref="T:System.ArgumentNullException">The function name or request method provided were <c>null</c>.</exception>
<exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception> <exception cref="T:System.Net.Http.HttpRequestException">An network error occurred when performing the request.</exception>
<exception cref="T:SteamKit2.WebAPIRequestException">A network error occurred when performing the request.</exception>
<exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception> <exception cref="T:System.IO.InvalidDataException">An error occured when parsing the response from the WebAPI.</exception>
</member> </member>
<member name="M:SteamKit2.WebAPI.AsyncInterface.Dispose"> <member name="M:SteamKit2.WebAPI.AsyncInterface.Dispose">
@ -6461,10 +6484,6 @@
The dynamic method name was not in the correct format. The dynamic method name was not in the correct format.
All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number. All API function calls must be in the format 'FunctionName###' where the optional ###'s represent a version number.
</exception> </exception>
<exception cref="T:System.ArgumentException">
The reserved named parameter 'secure' was not a boolean value.
This parameter is used when requests must go through the secure API.
</exception>
<exception cref="T:System.ArgumentOutOfRangeException"> <exception cref="T:System.ArgumentOutOfRangeException">
The function version number specified was out of range. The function version number specified was out of range.
</exception> </exception>
@ -6503,6 +6522,28 @@
<param name="apiKey">An optional API key to be used for authorized requests.</param> <param name="apiKey">An optional API key to be used for authorized requests.</param>
<returns>A dynamic <see cref="T:SteamKit2.WebAPI.AsyncInterface"/> object to interact with the Web API.</returns> <returns>A dynamic <see cref="T:SteamKit2.WebAPI.AsyncInterface"/> object to interact with the Web API.</returns>
</member> </member>
<member name="T:SteamKit2.WebAPIRequestException">
<summary>
Thrown when WebAPI request fails.
</summary>
</member>
<member name="P:SteamKit2.WebAPIRequestException.StatusCode">
<summary>
Represents the status code of the HTTP response.
</summary>
</member>
<member name="P:SteamKit2.WebAPIRequestException.Headers">
<summary>
Represents the collection of HTTP response headers.
</summary>
</member>
<member name="M:SteamKit2.WebAPIRequestException.#ctor(System.String,System.Net.Http.HttpResponseMessage)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.WebAPIRequestException"/> class.
</summary>
<param name="message">The message that describes the error.</param>
<param name="response">HTTP response message including the status code and data.</param>
</member>
<member name="T:SteamKit2.DepotManifest"> <member name="T:SteamKit2.DepotManifest">
<summary> <summary>
Represents a Steam3 depot manifest. Represents a Steam3 depot manifest.
@ -6586,6 +6627,31 @@
<c>true</c> if the filenames are encrypted; otherwise, <c>false</c>. <c>true</c> if the filenames are encrypted; otherwise, <c>false</c>.
</value> </value>
</member> </member>
<member name="P:SteamKit2.DepotManifest.DepotID">
<summary>
Gets the depot id.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.ManifestGID">
<summary>
Gets the manifest id.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.CreationTime">
<summary>
Gets the depot creation time.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.TotalUncompressedSize">
<summary>
Gets the total uncompressed size of all files in this depot.
</summary>
</member>
<member name="P:SteamKit2.DepotManifest.TotalCompressedSize">
<summary>
Gets the total compressed size of all files in this depot.
</summary>
</member>
<member name="M:SteamKit2.DepotManifest.DecryptFilenames(System.Byte[])"> <member name="M:SteamKit2.DepotManifest.DecryptFilenames(System.Byte[])">
<summary> <summary>
Attempts to decrypts file names with the given encryption key. Attempts to decrypts file names with the given encryption key.
@ -6640,6 +6706,20 @@
</summary> </summary>
<param name="nAppID">The 32bit app id to assign this GameID from.</param> <param name="nAppID">The 32bit app id to assign this GameID from.</param>
</member> </member>
<member name="M:SteamKit2.GameID.#ctor(System.UInt32,System.String)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.GameID"/> class.
</summary>
<param name="nAppID">The base app id of the mod.</param>
<param name="modPath">The game folder name of the mod.</param>
</member>
<member name="M:SteamKit2.GameID.#ctor(System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:SteamKit2.GameID"/> class.
</summary>
<param name="exePath">The path to the executable, usually quoted.</param>
<param name="appName">The name of the application shortcut.</param>
</member>
<member name="M:SteamKit2.GameID.Set(System.UInt64)"> <member name="M:SteamKit2.GameID.Set(System.UInt64)">
<summary> <summary>
Sets the various components of this GameID from a 64bit integer form. Sets the various components of this GameID from a 64bit integer form.