mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2025-12-24 10:16:49 +00:00
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b098b79a5 | ||
|
|
2cab6c82e4 | ||
|
|
91d3012581 | ||
|
|
354b60db53 | ||
|
|
fd89c42e48 | ||
|
|
79a862dd0e | ||
|
|
54a20246db | ||
|
|
822bfc239f | ||
|
|
f80bf929f7 | ||
|
|
e201d88e7a | ||
|
|
ce5443ca9a | ||
|
|
4b570f7928 | ||
|
|
b5152eb852 | ||
|
|
c5315be572 | ||
|
|
b4a2c76736 | ||
|
|
53726a6a26 | ||
|
|
84ec2b7b26 | ||
|
|
336a8b5150 | ||
|
|
4a6480d223 | ||
|
|
017b26986b | ||
|
|
6287bc85fe | ||
|
|
2a54c7101f |
12
.github/workflows/ci.yml
vendored
12
.github/workflows/ci.yml
vendored
@@ -62,7 +62,7 @@ jobs:
|
||||
run: dotnet build ArchiSteamFarm.CustomPlugins.PeriodicGC -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
||||
|
||||
- name: Build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
run: dotnet build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
||||
run: dotnet build "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
||||
|
||||
- name: Run ArchiSteamFarm.Tests
|
||||
run: dotnet test ArchiSteamFarm.Tests -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
||||
@@ -71,9 +71,9 @@ jobs:
|
||||
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
|
||||
shell: sh
|
||||
run: |
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" ]; then
|
||||
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" > "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new";
|
||||
mv "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs"
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
|
||||
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new";
|
||||
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
||||
fi
|
||||
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
|
||||
if: startsWith(matrix.os, 'windows-')
|
||||
@@ -83,8 +83,8 @@ jobs:
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs' -PathType Leaf)) {
|
||||
(Get-Content 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs').Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs'
|
||||
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs" -PathType Leaf)) {
|
||||
(Get-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs"
|
||||
}
|
||||
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Core
|
||||
run: dotnet publish "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" -o "out/${{ env.STEAM_TOKEN_DUMPER_NAME }}/${{ env.NET_CORE_VERSION }}" -p:UseAppHost=false --nologo
|
||||
|
||||
@@ -38,12 +38,12 @@ script:
|
||||
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet build ArchiSteamFarm.CustomPlugins.ExamplePlugin -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet build ArchiSteamFarm.CustomPlugins.PeriodicGC -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet build "$STEAM_TOKEN_DUMPER_NAME" -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" ]; then
|
||||
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs" > "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new";
|
||||
mv "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs.new" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/SharedInfo.cs"
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
|
||||
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new";
|
||||
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
||||
fi
|
||||
|
||||
dotnet publish "$STEAM_TOKEN_DUMPER_NAME" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:UseAppHost=false --nologo
|
||||
|
||||
Submodule ASF-WebConfigGenerator updated: 3289a9ab60...a8b5e7b653
2
ASF-ui
2
ASF-ui
Submodule ASF-ui updated: 17c5a777b9...9f21342fa2
@@ -22,14 +22,13 @@
|
||||
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
internal static class SharedInfo {
|
||||
internal const byte ApiVersion = 1;
|
||||
internal const byte AppInfosPerSingleRequest = byte.MaxValue;
|
||||
internal const string ConfigurationPropertyEnabled = nameof(SteamTokenDumperPlugin) + "Enabled";
|
||||
internal const ushort ItemsPerSingleRequest = 2048; // Should be synchronized with TimeoutForLongRunningTasksInSeconds
|
||||
internal const byte MaximumHoursBetweenRefresh = 8; // Per single bot account, makes sense to be 2 or 3 times less than MinimumHoursBetweenUploads
|
||||
internal const byte MaximumMinutesBeforeFirstUpload = 60; // Must be greater or equal to MinimumMinutesBeforeFirstUpload
|
||||
internal const byte MinimumHoursBetweenUploads = 24;
|
||||
internal const byte MinimumMinutesBeforeFirstUpload = 10; // Must be less or equal to MaximumMinutesBeforeFirstUpload
|
||||
internal const string ServerURL = "https://asf-token-dumper.xpaw.me";
|
||||
internal const byte TimeoutForLongRunningTasksInSeconds = 60; // Should be synchronized with ItemsPerSingleRequest
|
||||
internal const string Token = "STEAM_TOKEN_DUMPER_TOKEN";
|
||||
|
||||
internal static bool HasValidToken => Token.Length == 128;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
// _ _ _ ____ _ _____
|
||||
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
|
||||
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
|
||||
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
|
||||
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
|
||||
// |
|
||||
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
|
||||
// Contact: JustArchi@JustArchi.net
|
||||
// |
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// |
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
// |
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using JetBrains.Annotations;
|
||||
using SteamKit2;
|
||||
|
||||
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
internal static class StaticHelpers {
|
||||
[NotNull]
|
||||
internal static Task<T> ToLongRunningTask<T>([NotNull] this AsyncJob<T> job) where T : CallbackMsg {
|
||||
if (job == null) {
|
||||
throw new ArgumentNullException(nameof(job));
|
||||
}
|
||||
|
||||
job.Timeout = TimeSpan.FromSeconds(SharedInfo.TimeoutForLongRunningTasksInSeconds);
|
||||
|
||||
return job.ToTask();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -250,11 +250,11 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
|
||||
bot.ArchiLogger.LogGenericInfo($"Retrieving a total of {appIDsToRefresh.Count} app access tokens...");
|
||||
|
||||
HashSet<uint> appIDsThisRound = new HashSet<uint>(Math.Min(appIDsToRefresh.Count, SharedInfo.ItemsPerSingleRequest));
|
||||
HashSet<uint> appIDsThisRound = new HashSet<uint>(Math.Min(appIDsToRefresh.Count, SharedInfo.AppInfosPerSingleRequest));
|
||||
|
||||
using (HashSet<uint>.Enumerator enumerator = appIDsToRefresh.GetEnumerator()) {
|
||||
while (true) {
|
||||
while ((appIDsThisRound.Count < SharedInfo.ItemsPerSingleRequest) && enumerator.MoveNext()) {
|
||||
while ((appIDsThisRound.Count < SharedInfo.AppInfosPerSingleRequest) && enumerator.MoveNext()) {
|
||||
appIDsThisRound.Add(enumerator.Current);
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
SteamApps.PICSTokensCallback response;
|
||||
|
||||
try {
|
||||
response = await bot.SteamApps.PICSGetAccessTokens(appIDsThisRound, Enumerable.Empty<uint>());
|
||||
response = await bot.SteamApps.PICSGetAccessTokens(appIDsThisRound, Enumerable.Empty<uint>()).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
bot.ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -289,7 +289,7 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
|
||||
using (HashSet<uint>.Enumerator enumerator = appIDsToRefresh.GetEnumerator()) {
|
||||
while (true) {
|
||||
while ((appIDsThisRound.Count < SharedInfo.ItemsPerSingleRequest) && enumerator.MoveNext()) {
|
||||
while ((appIDsThisRound.Count < SharedInfo.AppInfosPerSingleRequest) && enumerator.MoveNext()) {
|
||||
appIDsThisRound.Add(enumerator.Current);
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
AsyncJobMultiple<SteamApps.PICSProductInfoCallback>.ResultSet response;
|
||||
|
||||
try {
|
||||
response = await bot.SteamApps.PICSGetProductInfo(appIDsThisRound.Select(appID => new SteamApps.PICSRequest { ID = appID, AccessToken = GlobalCache.GetAppToken(appID), Public = false }), Enumerable.Empty<SteamApps.PICSRequest>());
|
||||
response = await bot.SteamApps.PICSGetProductInfo(appIDsThisRound.Select(appID => new SteamApps.PICSRequest { ID = appID, AccessToken = GlobalCache.GetAppToken(appID), Public = false }), Enumerable.Empty<SteamApps.PICSRequest>()).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
bot.ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -320,6 +320,7 @@ namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
|
||||
appIDsThisRound.Clear();
|
||||
|
||||
Dictionary<uint, uint> appChangeNumbers = new Dictionary<uint, uint>();
|
||||
|
||||
HashSet<Task<SteamApps.DepotKeyCallback>> depotTasks = new HashSet<Task<SteamApps.DepotKeyCallback>>();
|
||||
|
||||
foreach (SteamApps.PICSProductInfoCallback.PICSProductInfo app in response.Results.SelectMany(result => result.Apps.Values)) {
|
||||
|
||||
@@ -218,7 +218,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.AddFriend(request));
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.AddFriend(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -253,7 +253,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedClanChatRoomsService.SendMessage(x => x.GetClanChatRoomInfo(request));
|
||||
response = await UnifiedClanChatRoomsService.SendMessage(x => x.GetClanChatRoomInfo(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -284,7 +284,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.GetGameBadgeLevels(request));
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.GetGameBadgeLevels(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -316,7 +316,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.GetMyChatRoomGroups(request));
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.GetMyChatRoomGroups(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -348,7 +348,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedEconService.SendMessage(x => x.GetTradeOfferAccessToken(request));
|
||||
response = await UnifiedEconService.SendMessage(x => x.GetTradeOfferAccessToken(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -386,7 +386,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.JoinChatRoomGroup(request));
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.JoinChatRoomGroup(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -477,7 +477,7 @@ namespace ArchiSteamFarm {
|
||||
Client.Send(request);
|
||||
|
||||
try {
|
||||
return await new AsyncJob<RedeemGuestPassResponseCallback>(Client, request.SourceJobID);
|
||||
return await new AsyncJob<RedeemGuestPassResponseCallback>(Client, request.SourceJobID).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericException(e);
|
||||
|
||||
@@ -510,7 +510,7 @@ namespace ArchiSteamFarm {
|
||||
Client.Send(request);
|
||||
|
||||
try {
|
||||
return await new AsyncJob<PurchaseResponseCallback>(Client, request.SourceJobID);
|
||||
return await new AsyncJob<PurchaseResponseCallback>(Client, request.SourceJobID).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericException(e);
|
||||
|
||||
@@ -540,7 +540,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.RemoveFriend(request));
|
||||
response = await UnifiedPlayerService.SendMessage(x => x.RemoveFriend(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -592,7 +592,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedFriendMessagesService.SendMessage(x => x.SendMessage(request));
|
||||
response = await UnifiedFriendMessagesService.SendMessage(x => x.SendMessage(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -628,7 +628,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.SendChatMessage(request));
|
||||
response = await UnifiedChatRoomService.SendMessage(x => x.SendChatMessage(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
@@ -663,7 +663,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUnifiedMessages.ServiceMethodResponse response;
|
||||
|
||||
try {
|
||||
response = await UnifiedFriendMessagesService.SendMessage(x => x.SendMessage(request));
|
||||
response = await UnifiedFriendMessagesService.SendMessage(x => x.SendMessage(request)).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
|
||||
|
||||
@@ -671,11 +671,27 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
}
|
||||
|
||||
SteamApps.PICSTokensCallback tokenCallback = null;
|
||||
|
||||
for (byte i = 0; (i < WebBrowser.MaxTries) && (tokenCallback == null) && IsConnectedAndLoggedOn; i++) {
|
||||
try {
|
||||
tokenCallback = await SteamApps.PICSGetAccessTokens(appID, null).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (tokenCallback == null) {
|
||||
return (optimisticDiscovery ? appID : 0, DateTime.MinValue, true);
|
||||
}
|
||||
|
||||
SteamApps.PICSRequest request = new SteamApps.PICSRequest(appID, tokenCallback.AppTokens.TryGetValue(appID, out ulong accessToken) ? accessToken : 0, false);
|
||||
|
||||
AsyncJobMultiple<SteamApps.PICSProductInfoCallback>.ResultSet productInfoResultSet = null;
|
||||
|
||||
for (byte i = 0; (i < WebBrowser.MaxTries) && (productInfoResultSet == null) && IsConnectedAndLoggedOn; i++) {
|
||||
try {
|
||||
productInfoResultSet = await SteamApps.PICSGetProductInfo(appID, null, false);
|
||||
productInfoResultSet = await SteamApps.PICSGetProductInfo(request.ToEnumerable(), Enumerable.Empty<SteamApps.PICSRequest>()).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
@@ -845,7 +861,7 @@ namespace ArchiSteamFarm {
|
||||
|
||||
for (byte i = 0; (i < WebBrowser.MaxTries) && (productInfoResultSet == null) && IsConnectedAndLoggedOn; i++) {
|
||||
try {
|
||||
productInfoResultSet = await SteamApps.PICSGetProductInfo(Enumerable.Empty<SteamApps.PICSRequest>(), packageRequests);
|
||||
productInfoResultSet = await SteamApps.PICSGetProductInfo(Enumerable.Empty<SteamApps.PICSRequest>(), packageRequests).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
@@ -1119,7 +1135,7 @@ namespace ArchiSteamFarm {
|
||||
SteamUser.WebAPIUserNonceCallback callback;
|
||||
|
||||
try {
|
||||
callback = await SteamUser.RequestWebAPIUserNonce();
|
||||
callback = await SteamUser.RequestWebAPIUserNonce().ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
ArchiLogger.LogGenericWarningException(e);
|
||||
await Connect(true).ConfigureAwait(false);
|
||||
@@ -1733,7 +1749,7 @@ namespace ArchiSteamFarm {
|
||||
|
||||
try {
|
||||
if (DateTime.UtcNow.Subtract(ArchiHandler.LastPacketReceived).TotalSeconds > ASF.GlobalConfig.ConnectionTimeout) {
|
||||
await SteamFriends.RequestProfileInfo(SteamID);
|
||||
await SteamFriends.RequestProfileInfo(SteamID).ToLongRunningTask().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
HeartBeatFailures = 0;
|
||||
@@ -2376,7 +2392,7 @@ namespace ArchiSteamFarm {
|
||||
Dictionary<uint, ulong> packageAccessTokens = new Dictionary<uint, ulong>();
|
||||
Dictionary<uint, uint> packagesToRefresh = new Dictionary<uint, uint>();
|
||||
|
||||
foreach (SteamApps.LicenseListCallback.License license in callback.LicenseList.GroupBy(license => license.PackageID).Select(group => group.OrderByDescending(license => license.TimeCreated).First())) {
|
||||
foreach (SteamApps.LicenseListCallback.License license in callback.LicenseList.GroupBy(license => license.PackageID, (packageID, licenses) => licenses.OrderByDescending(license => license.TimeCreated).First())) {
|
||||
OwnedPackageIDs[license.PackageID] = (license.PaymentMethod, license.TimeCreated);
|
||||
|
||||
if (!ASF.GlobalDatabase.PackageAccessTokensReadOnly.TryGetValue(license.PackageID, out ulong packageAccessToken) || (packageAccessToken != license.AccessToken)) {
|
||||
|
||||
@@ -576,7 +576,7 @@ namespace ArchiSteamFarm {
|
||||
SteamApps.FreeLicenseCallback callback;
|
||||
|
||||
try {
|
||||
callback = await Bot.SteamApps.RequestFreeLicense(gameID);
|
||||
callback = await Bot.SteamApps.RequestFreeLicense(gameID).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
Bot.ArchiLogger.LogGenericWarningException(e);
|
||||
response.AppendLine(FormatBotResponse(string.Format(Strings.BotAddLicense, "app/" + gameID, EResult.Timeout)));
|
||||
|
||||
@@ -166,9 +166,15 @@ namespace ArchiSteamFarm.Helpers {
|
||||
OS.UnixSetFileAccess(directoryPath, OS.EUnixPermission.Combined777);
|
||||
} else {
|
||||
DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
|
||||
DirectorySecurity directorySecurity = new DirectorySecurity(FilePath, AccessControlSections.All);
|
||||
|
||||
directoryInfo.SetAccessControl(directorySecurity);
|
||||
try {
|
||||
DirectorySecurity directorySecurity = new DirectorySecurity(directoryPath, AccessControlSections.All);
|
||||
|
||||
directoryInfo.SetAccessControl(directorySecurity);
|
||||
} catch (PrivilegeNotHeldException e) {
|
||||
// Non-critical, user might have no rights to manage the resource
|
||||
ASF.ArchiLogger.LogGenericDebuggingException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,9 +185,15 @@ namespace ArchiSteamFarm.Helpers {
|
||||
OS.UnixSetFileAccess(FilePath, OS.EUnixPermission.Combined777);
|
||||
} else {
|
||||
FileInfo fileInfo = new FileInfo(FilePath);
|
||||
FileSecurity fileSecurity = new FileSecurity(FilePath, AccessControlSections.All);
|
||||
|
||||
fileInfo.SetAccessControl(fileSecurity);
|
||||
try {
|
||||
FileSecurity fileSecurity = new FileSecurity(FilePath, AccessControlSections.All);
|
||||
|
||||
fileInfo.SetAccessControl(fileSecurity);
|
||||
} catch (PrivilegeNotHeldException e) {
|
||||
// Non-critical, user might have no rights to manage the resource
|
||||
ASF.ArchiLogger.LogGenericDebuggingException(e);
|
||||
}
|
||||
}
|
||||
} catch (IOException) {
|
||||
// Ignored, if the file was already created in the meantime by another instance, this is fine
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
// _ _ _ ____ _ _____
|
||||
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
|
||||
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
|
||||
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
|
||||
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
|
||||
// |
|
||||
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
|
||||
// Contact: JustArchi@JustArchi.net
|
||||
// |
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// |
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
// |
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace ArchiSteamFarm.Helpers {
|
||||
internal sealed class CrossProcessSemaphore : ICrossProcessSemaphore {
|
||||
private readonly Semaphore GlobalSemaphore;
|
||||
|
||||
internal CrossProcessSemaphore([NotNull] string name) {
|
||||
if (string.IsNullOrEmpty(name)) {
|
||||
throw new ArgumentNullException(nameof(name));
|
||||
}
|
||||
|
||||
GlobalSemaphore = new Semaphore(1, 1, name);
|
||||
}
|
||||
|
||||
public void Dispose() => GlobalSemaphore.Dispose();
|
||||
|
||||
void ICrossProcessSemaphore.Release() => GlobalSemaphore.Release();
|
||||
|
||||
[NotNull]
|
||||
Task ICrossProcessSemaphore.WaitAsync() {
|
||||
GlobalSemaphore.WaitOne();
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[NotNull]
|
||||
Task<bool> ICrossProcessSemaphore.WaitAsync(int millisecondsTimeout) => Task.FromResult(GlobalSemaphore.WaitOne(millisecondsTimeout));
|
||||
}
|
||||
}
|
||||
@@ -71,14 +71,7 @@ namespace ArchiSteamFarm {
|
||||
|
||||
string resourceName = GetOsResourceName(objectName);
|
||||
|
||||
try {
|
||||
return new CrossProcessSemaphore(resourceName);
|
||||
} catch (PlatformNotSupportedException e) {
|
||||
// CrossProcessSemaphore is currently available only for Windows platforms, we use alternative synchronization for other OSes
|
||||
ASF.ArchiLogger.LogGenericDebuggingException(e);
|
||||
|
||||
return new CrossProcessFileBasedSemaphore(resourceName);
|
||||
}
|
||||
return new CrossProcessFileBasedSemaphore(resourceName);
|
||||
}
|
||||
|
||||
internal static void Init(bool systemRequired, GlobalConfig.EOptimizationMode optimizationMode) {
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
|
||||
try {
|
||||
picsChanges = await refreshBot.SteamApps.PICSGetChangesSince(LastChangeNumber, true, true);
|
||||
picsChanges = await refreshBot.SteamApps.PICSGetChangesSince(LastChangeNumber, true, true).ToLongRunningTask().ConfigureAwait(false);
|
||||
} catch (Exception e) {
|
||||
refreshBot.ArchiLogger.LogGenericWarningException(e);
|
||||
}
|
||||
|
||||
@@ -32,9 +32,12 @@ using AngleSharp.XPath;
|
||||
using Humanizer;
|
||||
using Humanizer.Localisation;
|
||||
using JetBrains.Annotations;
|
||||
using SteamKit2;
|
||||
|
||||
namespace ArchiSteamFarm {
|
||||
public static class Utilities {
|
||||
private const byte TimeoutForLongRunningTasksInSeconds = 60;
|
||||
|
||||
// Normally we wouldn't need to use this singleton, but we want to ensure decent randomness across entire program's lifetime
|
||||
private static readonly Random Random = new Random();
|
||||
|
||||
@@ -259,6 +262,30 @@ namespace ArchiSteamFarm {
|
||||
[PublicAPI]
|
||||
public static string ToHumanReadable(this TimeSpan timeSpan) => timeSpan.Humanize(3, maxUnit: TimeUnit.Year, minUnit: TimeUnit.Second);
|
||||
|
||||
[NotNull]
|
||||
[PublicAPI]
|
||||
public static Task<T> ToLongRunningTask<T>([NotNull] this AsyncJob<T> job) where T : CallbackMsg {
|
||||
if (job == null) {
|
||||
throw new ArgumentNullException(nameof(job));
|
||||
}
|
||||
|
||||
job.Timeout = TimeSpan.FromSeconds(TimeoutForLongRunningTasksInSeconds);
|
||||
|
||||
return job.ToTask();
|
||||
}
|
||||
|
||||
[NotNull]
|
||||
[PublicAPI]
|
||||
public static Task<AsyncJobMultiple<T>.ResultSet> ToLongRunningTask<T>([NotNull] this AsyncJobMultiple<T> job) where T : CallbackMsg {
|
||||
if (job == null) {
|
||||
throw new ArgumentNullException(nameof(job));
|
||||
}
|
||||
|
||||
job.Timeout = TimeSpan.FromSeconds(TimeoutForLongRunningTasksInSeconds);
|
||||
|
||||
return job.ToTask();
|
||||
}
|
||||
|
||||
internal static void DeleteEmptyDirectoriesRecursively(string directory) {
|
||||
if (string.IsNullOrEmpty(directory)) {
|
||||
ASF.ArchiLogger.LogNullError(nameof(directory));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>4.2.2.4</Version>
|
||||
<Version>4.2.2.7</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -7,6 +7,7 @@ RUN echo "node: $(node --version)" && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG ASF_ARCH=x64
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
@@ -24,13 +25,14 @@ RUN dotnet --info && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-arm64 --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-arm64 --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=docker -p:SelfContained=false -p:UseAppHost=false -r linux-arm64 --nologo && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r "linux-${ASF_ARCH}" --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r "linux-${ASF_ARCH}" --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=docker -p:SelfContained=false -p:UseAppHost=false -r "linux-${ASF_ARCH}" --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/generic" ]; then cp "ArchiSteamFarm/overlay/generic/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm64v8 AS runtime
|
||||
ARG DOTNET_ARCH=
|
||||
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim${DOTNET_ARCH} AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
@@ -38,6 +40,6 @@ LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
VOLUME ["/app/config", "/app/logs"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "dotnet"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -7,6 +7,7 @@ RUN echo "node: $(node --version)" && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG ASF_ARCH=x64
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
@@ -24,13 +25,14 @@ RUN dotnet --info && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-arm64 --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-arm64 --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=linux-arm64 -p:PublishSingleFile=true -p:PublishTrimmed=true -r linux-arm64 --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/linux-arm64" ]; then cp "ArchiSteamFarm/overlay/linux-arm64/"* "out/result"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r "linux-${ASF_ARCH}" --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r "linux-${ASF_ARCH}" --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" "-p:ASFVariant=linux-${ASF_ARCH}" -p:PublishSingleFile=true -p:PublishTrimmed=true -r "linux-${ASF_ARCH}" --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/linux-${ASF_ARCH}" ]; then cp "ArchiSteamFarm/overlay/linux-${ASF_ARCH}/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim-arm64v8 AS runtime
|
||||
ARG DOTNET_ARCH=
|
||||
FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim${DOTNET_ARCH} AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
@@ -38,6 +40,6 @@ LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
VOLUME ["/app/config", "/app/logs"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "ArchiSteamFarm"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm-Service.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -1,43 +0,0 @@
|
||||
FROM node:lts AS build-node
|
||||
WORKDIR /app
|
||||
COPY ASF-ui .
|
||||
RUN echo "node: $(node --version)" && \
|
||||
echo "npm: $(npm --version)" && \
|
||||
npm ci && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
ENV NET_CORE_VERSION netcoreapp3.1
|
||||
ENV STEAM_TOKEN_DUMPER_NAME ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
WORKDIR /app
|
||||
COPY --from=build-node /app/dist ASF-ui/dist
|
||||
COPY ArchiSteamFarm ArchiSteamFarm
|
||||
COPY ArchiSteamFarm.OfficialPlugins.SteamTokenDumper ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
COPY resources resources
|
||||
COPY Directory.Build.props Directory.Build.props
|
||||
RUN dotnet --info && \
|
||||
# TODO: Remove workaround for https://github.com/microsoft/msbuild/issues/3897 when it's no longer needed
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-arm --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-arm --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=linux-arm -p:PublishSingleFile=true -p:PublishTrimmed=true -r linux-arm --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/linux-arm" ]; then cp "ArchiSteamFarm/overlay/linux-arm/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim-arm32v7 AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "ArchiSteamFarm"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm-Service.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -1,43 +0,0 @@
|
||||
FROM node:lts AS build-node
|
||||
WORKDIR /app
|
||||
COPY ASF-ui .
|
||||
RUN echo "node: $(node --version)" && \
|
||||
echo "npm: $(npm --version)" && \
|
||||
npm ci && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
ENV NET_CORE_VERSION netcoreapp3.1
|
||||
ENV STEAM_TOKEN_DUMPER_NAME ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
WORKDIR /app
|
||||
COPY --from=build-node /app/dist ASF-ui/dist
|
||||
COPY ArchiSteamFarm ArchiSteamFarm
|
||||
COPY ArchiSteamFarm.OfficialPlugins.SteamTokenDumper ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
COPY resources resources
|
||||
COPY Directory.Build.props Directory.Build.props
|
||||
RUN dotnet --info && \
|
||||
# TODO: Remove workaround for https://github.com/microsoft/msbuild/issues/3897 when it's no longer needed
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-x64 --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-x64 --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=linux-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true -r linux-x64 --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/linux-x64" ]; then cp "ArchiSteamFarm/overlay/linux-x64/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-buster-slim AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "ArchiSteamFarm"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm-Service.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -1,43 +0,0 @@
|
||||
FROM node:lts AS build-node
|
||||
WORKDIR /app
|
||||
COPY ASF-ui .
|
||||
RUN echo "node: $(node --version)" && \
|
||||
echo "npm: $(npm --version)" && \
|
||||
npm ci && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
ENV NET_CORE_VERSION netcoreapp3.1
|
||||
ENV STEAM_TOKEN_DUMPER_NAME ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
WORKDIR /app
|
||||
COPY --from=build-node /app/dist ASF-ui/dist
|
||||
COPY ArchiSteamFarm ArchiSteamFarm
|
||||
COPY ArchiSteamFarm.OfficialPlugins.SteamTokenDumper ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
COPY resources resources
|
||||
COPY Directory.Build.props Directory.Build.props
|
||||
RUN dotnet --info && \
|
||||
# TODO: Remove workaround for https://github.com/microsoft/msbuild/issues/3897 when it's no longer needed
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-arm --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-arm --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=docker -p:SelfContained=false -p:UseAppHost=false -r linux-arm --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/generic" ]; then cp "ArchiSteamFarm/overlay/generic/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm32v7 AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "dotnet"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -1,43 +0,0 @@
|
||||
FROM node:lts AS build-node
|
||||
WORKDIR /app
|
||||
COPY ASF-ui .
|
||||
RUN echo "node: $(node --version)" && \
|
||||
echo "npm: $(npm --version)" && \
|
||||
npm ci && \
|
||||
npm run deploy
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-dotnet
|
||||
ARG STEAM_TOKEN_DUMPER_TOKEN
|
||||
ENV CONFIGURATION Release
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
ENV NET_CORE_VERSION netcoreapp3.1
|
||||
ENV STEAM_TOKEN_DUMPER_NAME ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
WORKDIR /app
|
||||
COPY --from=build-node /app/dist ASF-ui/dist
|
||||
COPY ArchiSteamFarm ArchiSteamFarm
|
||||
COPY ArchiSteamFarm.OfficialPlugins.SteamTokenDumper ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
||||
COPY resources resources
|
||||
COPY Directory.Build.props Directory.Build.props
|
||||
RUN dotnet --info && \
|
||||
# TODO: Remove workaround for https://github.com/microsoft/msbuild/issues/3897 when it's no longer needed
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-CN.resx" ]; then ln -s "Strings.zh-CN.resx" "ArchiSteamFarm/Localization/Strings.zh-Hans.resx"; fi && \
|
||||
if [ -f "ArchiSteamFarm/Localization/Strings.zh-TW.resx" ]; then ln -s "Strings.zh-TW.resx" "ArchiSteamFarm/Localization/Strings.zh-Hant.resx"; fi && \
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then sed -i "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"; fi && \
|
||||
dotnet publish "${STEAM_TOKEN_DUMPER_NAME}" -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" -p:SelfContained=false -p:UseAppHost=false -r linux-x64 --nologo && \
|
||||
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -p:SelfContained=false -p:UseAppHost=false -r linux-x64 --nologo && \
|
||||
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/result" -p:ASFVariant=docker -p:SelfContained=false -p:UseAppHost=false -r linux-x64 --nologo && \
|
||||
if [ -d "ArchiSteamFarm/overlay/generic" ]; then cp "ArchiSteamFarm/overlay/generic/"* "out/result"; fi && \
|
||||
if [ -f "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" ]; then mkdir -p "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; cp "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/${STEAM_TOKEN_DUMPER_NAME}.dll" "out/result/plugins/${STEAM_TOKEN_DUMPER_NAME}"; fi
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS runtime
|
||||
ENV ASPNETCORE_URLS=
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
|
||||
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
|
||||
LABEL maintainer="JustArchi <JustArchi@JustArchi.net>"
|
||||
EXPOSE 1242
|
||||
WORKDIR /app
|
||||
COPY --from=build-dotnet /app/out/result .
|
||||
VOLUME ["/app/config", "/app/logs", "/app/plugins"]
|
||||
HEALTHCHECK CMD ["pidof", "-q", "dotnet"]
|
||||
ENTRYPOINT ["./ArchiSteamFarm.sh", "--no-restart", "--process-required", "--system-required"]
|
||||
@@ -127,7 +127,7 @@ build_script:
|
||||
}
|
||||
|
||||
|
||||
dotnet build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper -c "$env:CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
dotnet build "$env:STEAM_TOKEN_DUMPER_NAME" -c "$env:CONFIGURATION" -p:UseAppHost=false --nologo
|
||||
|
||||
|
||||
if ($LastExitCode -ne 0) {
|
||||
@@ -157,8 +157,8 @@ after_test:
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
|
||||
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs' -PathType Leaf)) {
|
||||
(Get-Content 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs').Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content 'ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\SharedInfo.cs'
|
||||
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs" -PathType Leaf)) {
|
||||
(Get-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs"
|
||||
}
|
||||
|
||||
|
||||
|
||||
21
cc.sh
21
cc.sh
@@ -4,10 +4,13 @@ set -eu
|
||||
TARGET_FRAMEWORK="netcoreapp3.1"
|
||||
|
||||
MAIN_PROJECT="ArchiSteamFarm"
|
||||
STEAM_TOKEN_DUMPER_NAME="${MAIN_PROJECT}.OfficialPlugins.SteamTokenDumper"
|
||||
TESTS_PROJECT="${MAIN_PROJECT}.Tests"
|
||||
SOLUTION="${MAIN_PROJECT}.sln"
|
||||
CONFIGURATION="Release"
|
||||
OUT="out"
|
||||
OUT_ASF="${OUT}/result"
|
||||
OUT_STD="${OUT}/${STEAM_TOKEN_DUMPER_NAME}"
|
||||
|
||||
ASF_UI=1
|
||||
CLEAN=0
|
||||
@@ -88,7 +91,7 @@ if [ "$ASF_UI" -eq 1 ]; then
|
||||
npm run-script deploy --no-progress --prefix ASF-ui
|
||||
|
||||
# ASF's output www folder needs cleaning as well
|
||||
rm -rf "${OUT}/www"
|
||||
rm -rf "${OUT_ASF}/www"
|
||||
else
|
||||
echo "WARNING: ASF-ui dependencies are missing, skipping build of ASF-ui..."
|
||||
fi
|
||||
@@ -109,7 +112,21 @@ if [ "$TEST" -eq 1 ]; then
|
||||
dotnet test "$TESTS_PROJECT" $DOTNET_FLAGS
|
||||
fi
|
||||
|
||||
dotnet publish "$MAIN_PROJECT" -o "$OUT" $DOTNET_FLAGS
|
||||
dotnet publish "$MAIN_PROJECT" -o "$OUT_ASF" $DOTNET_FLAGS
|
||||
|
||||
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
|
||||
git checkout -- "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
||||
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new";
|
||||
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
||||
|
||||
dotnet publish "$STEAM_TOKEN_DUMPER_NAME" -o "$OUT_STD" $DOTNET_FLAGS
|
||||
git checkout -- "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
||||
|
||||
mkdir -p "${OUT_ASF}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
|
||||
cp "${OUT_STD}/${STEAM_TOKEN_DUMPER_NAME}.dll" "${OUT_ASF}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
|
||||
else
|
||||
echo "WARNING: STEAM_TOKEN_DUMPER_TOKEN is missing, skipping build of ${STEAM_TOKEN_DUMPER_NAME}..."
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "SUCCESS: Compilation finished successfully! :)"
|
||||
|
||||
14
hooks/build
Normal file
14
hooks/build
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env sh
|
||||
# This hook is used by Docker Hub as an instruction on how to build the ASF release
|
||||
# See: https://docs.docker.com/docker-hub/builds/advanced
|
||||
set -eu
|
||||
|
||||
asf_arch="$(echo "$DOCKER_TAG" | cut -d '-' -f 2)"
|
||||
|
||||
case "$asf_arch" in
|
||||
"arm") dotnet_arch="-arm32v7" ;;
|
||||
"arm64") dotnet_arch="-arm64v8" ;;
|
||||
*) dotnet_arch=""; asf_arch="x64" ;;
|
||||
esac
|
||||
|
||||
docker build -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" --build-arg "STEAM_TOKEN_DUMPER_TOKEN=${STEAM_TOKEN_DUMPER_TOKEN-}" --build-arg "ASF_ARCH=${asf_arch}" --build-arg "DOTNET_ARCH=${dotnet_arch}" .
|
||||
18
run.sh
18
run.sh
@@ -1,20 +1,20 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
BINARY_PATH="$(dirname "$(readlink -f "$0")")/out"
|
||||
BINARY_DIR="$(dirname "$(readlink -f "$0")")/out/result"
|
||||
CONFIG_PATH="config/ASF.json"
|
||||
|
||||
if [ ! -d "$BINARY_PATH" ]; then
|
||||
echo "ERROR: $BINARY_PATH could not be found!"
|
||||
if [ ! -d "$BINARY_DIR" ]; then
|
||||
echo "ERROR: $BINARY_DIR could not be found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$BINARY_PATH"
|
||||
cd "$BINARY_DIR"
|
||||
|
||||
BINARY="$(pwd)/ArchiSteamFarm.dll"
|
||||
BINARY_PATH="$(pwd)/ArchiSteamFarm.dll"
|
||||
|
||||
if [ ! -f "$BINARY" ]; then
|
||||
echo "ERROR: $BINARY could not be found!"
|
||||
if [ ! -f "$BINARY_PATH" ]; then
|
||||
echo "ERROR: $BINARY_PATH could not be found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -74,9 +74,9 @@ dotnet --info
|
||||
|
||||
if [ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?true' "$CONFIG_PATH"; then
|
||||
# We're running ASF in headless mode so we don't need STDIN
|
||||
dotnet "$BINARY" $BINARY_ARGS & # Start ASF in the background, trap will work properly due to non-blocking call
|
||||
dotnet "$BINARY_PATH" $BINARY_ARGS & # Start ASF in the background, trap will work properly due to non-blocking call
|
||||
wait $! # This will forward dotnet error code, set -e will abort the script if it's non-zero
|
||||
else
|
||||
# We're running ASF in non-headless mode, so we need STDIN to be operative
|
||||
dotnet "$BINARY" $BINARY_ARGS # Start ASF in the foreground, trap won't work until process exit
|
||||
dotnet "$BINARY_PATH" $BINARY_ARGS # Start ASF in the foreground, trap won't work until process exit
|
||||
fi
|
||||
|
||||
2
wiki
2
wiki
Submodule wiki updated: b825f6ddbb...d4db33893f
Reference in New Issue
Block a user