From 46d61196c71713f05810fe516e8f2f2273857dd7 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Mon, 11 Feb 2019 03:52:14 +0100 Subject: [PATCH] Share HttpClient with SK2 WebAPI --- ArchiSteamFarm/ArchiWebHandler.cs | 18 +++++++++++------- ArchiSteamFarm/Bot.cs | 5 +++-- ArchiSteamFarm/WebBrowser.cs | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index a3d7be06a..d95dda66e 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -1099,7 +1099,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iEconService = WebAPI.GetAsyncInterface(IEconService, steamApiKey)) { + using (dynamic iEconService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(IEconService)) { iEconService.Timeout = WebBrowser.Timeout; try { @@ -1108,6 +1108,7 @@ namespace ArchiSteamFarm { // ReSharper disable once AccessToDisposedClosure async () => await iEconService.DeclineTradeOffer( + key: steamApiKey, method: WebRequestMethods.Http.Post, tradeofferid: tradeID ) @@ -1155,7 +1156,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iEconService = WebAPI.GetAsyncInterface(IEconService, steamApiKey)) { + using (dynamic iEconService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(IEconService)) { iEconService.Timeout = WebBrowser.Timeout; try { @@ -1167,6 +1168,7 @@ namespace ArchiSteamFarm { active_only: 1, get_descriptions: 1, get_received_offers: 1, + key: steamApiKey, time_historical_cutoff: uint.MaxValue ) ).ConfigureAwait(false); @@ -1308,7 +1310,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iSteamApps = WebAPI.GetAsyncInterface(ISteamApps)) { + using (dynamic iSteamApps = Bot.SteamConfiguration.GetAsyncWebAPIInterface(ISteamApps)) { iSteamApps.Timeout = WebBrowser.Timeout; try { @@ -1575,7 +1577,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iPlayerService = WebAPI.GetAsyncInterface(IPlayerService, steamApiKey)) { + using (dynamic iPlayerService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(IPlayerService)) { iPlayerService.Timeout = WebBrowser.Timeout; try { @@ -1585,6 +1587,7 @@ namespace ArchiSteamFarm { // ReSharper disable once AccessToDisposedClosure async () => await iPlayerService.GetOwnedGames( include_appinfo: 1, + key: steamApiKey, steamid: steamID ) ).ConfigureAwait(false); @@ -1625,7 +1628,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iTwoFactorService = WebAPI.GetAsyncInterface(ITwoFactorService)) { + using (dynamic iTwoFactorService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(ITwoFactorService)) { iTwoFactorService.Timeout = WebBrowser.Timeout; try { @@ -1732,7 +1735,7 @@ namespace ArchiSteamFarm { KeyValue response = null; for (byte i = 0; (i < WebBrowser.MaxTries) && (response == null); i++) { - using (dynamic iEconService = WebAPI.GetAsyncInterface(IEconService, steamApiKey)) { + using (dynamic iEconService = Bot.SteamConfiguration.GetAsyncWebAPIInterface(IEconService)) { iEconService.Timeout = WebBrowser.Timeout; try { @@ -1741,6 +1744,7 @@ namespace ArchiSteamFarm { // ReSharper disable once AccessToDisposedClosure async () => await iEconService.GetTradeHoldDurations( + key: steamApiKey, steamid_target: steamID, trade_offer_access_token: tradeToken ?? "" // TODO: Change me once https://github.com/SteamRE/SteamKit/pull/522 is merged ) @@ -1884,7 +1888,7 @@ namespace ArchiSteamFarm { // We do not use usual retry pattern here as webAPIUserNonce is valid only for a single request // Even during timeout, webAPIUserNonce is most likely already invalid // Instead, the caller is supposed to ask for new webAPIUserNonce and call Init() again on failure - using (dynamic iSteamUserAuth = WebAPI.GetAsyncInterface(ISteamUserAuth)) { + using (dynamic iSteamUserAuth = Bot.SteamConfiguration.GetAsyncWebAPIInterface(ISteamUserAuth)) { iSteamUserAuth.Timeout = WebBrowser.Timeout; try { diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 02ecb6a5b..ae0c2289c 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -93,6 +93,7 @@ namespace ArchiSteamFarm { internal readonly ConcurrentDictionary OwnedPackageIDs = new ConcurrentDictionary(); internal readonly SteamApps SteamApps; + internal readonly SteamConfiguration SteamConfiguration; internal readonly SteamFriends SteamFriends; internal bool CanReceiveSteamCards => !IsAccountLimited && !IsAccountLocked; @@ -213,10 +214,10 @@ namespace ArchiSteamFarm { ArchiWebHandler = new ArchiWebHandler(this); - SteamConfiguration steamConfiguration = SteamConfiguration.Create(builder => builder.WithProtocolTypes(ASF.GlobalConfig.SteamProtocols).WithCellID(ASF.GlobalDatabase.CellID).WithServerListProvider(ASF.GlobalDatabase.ServerListProvider).WithHttpClientFactory(() => ArchiWebHandler.GenerateDisposableHttpClient())); + SteamConfiguration = SteamConfiguration.Create(builder => builder.WithProtocolTypes(ASF.GlobalConfig.SteamProtocols).WithCellID(ASF.GlobalDatabase.CellID).WithServerListProvider(ASF.GlobalDatabase.ServerListProvider).WithHttpClientFactory(ArchiWebHandler.GenerateDisposableHttpClient)); // Initialize - SteamClient = new SteamClient(steamConfiguration); + SteamClient = new SteamClient(SteamConfiguration); if (Debugging.IsUserDebugging && Directory.Exists(SharedInfo.DebugDirectory)) { string debugListenerPath = Path.Combine(SharedInfo.DebugDirectory, botName); diff --git a/ArchiSteamFarm/WebBrowser.cs b/ArchiSteamFarm/WebBrowser.cs index 5e0255762..342df0564 100644 --- a/ArchiSteamFarm/WebBrowser.cs +++ b/ArchiSteamFarm/WebBrowser.cs @@ -77,7 +77,7 @@ namespace ArchiSteamFarm { [NotNull] [PublicAPI] public HttpClient GenerateDisposableHttpClient(bool extendedTimeout = false) { - HttpClient result = new HttpClient(HttpClientHandler) { + HttpClient result = new HttpClient(HttpClientHandler, false) { Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * ASF.GlobalConfig.ConnectionTimeout : ASF.GlobalConfig.ConnectionTimeout) };