49 lines
1.4 KiB
C#
Raw Normal View History

using Logging;
2024-09-12 12:05:42 +02:00
namespace AutoClient.Modes
2024-09-12 12:05:42 +02:00
{
public class PurchasingMode : IMode
2024-09-12 12:05:42 +02:00
{
private readonly List<AutomaticPurchaser> purchasers = new List<AutomaticPurchaser>();
2024-09-12 14:38:15 +02:00
private readonly App app;
private Task starterTask = Task.CompletedTask;
2024-09-12 12:05:42 +02:00
public PurchasingMode(App app)
2024-09-12 12:05:42 +02:00
{
2024-09-12 14:38:15 +02:00
this.app = app;
2024-09-12 12:05:42 +02:00
}
public void Start(ICodexInstance instance, int index)
2024-09-12 12:05:42 +02:00
{
2024-09-12 14:38:15 +02:00
for (var i = 0; i < app.Config.NumConcurrentPurchases; i++)
2024-09-12 12:05:42 +02:00
{
2024-10-30 11:09:13 +01:00
purchasers.Add(new AutomaticPurchaser(new LogPrefixer(app.Log, $"({i}) "), instance, new CodexNode(app, instance)));
2024-09-12 12:05:42 +02:00
}
2024-09-12 14:38:15 +02:00
var delayPerPurchaser =
TimeSpan.FromSeconds(10 * index) +
TimeSpan.FromMinutes(app.Config.ContractDurationMinutes) / app.Config.NumConcurrentPurchases;
starterTask = Task.Run(() => StartPurchasers(delayPerPurchaser));
}
private async Task StartPurchasers(TimeSpan delayPerPurchaser)
{
2024-09-12 12:05:42 +02:00
foreach (var purchaser in purchasers)
{
purchaser.Start();
await Task.Delay(delayPerPurchaser);
}
}
2024-09-12 14:38:15 +02:00
public void Stop()
{
starterTask.Wait();
foreach (var purchaser in purchasers)
{
purchaser.Stop();
}
}
2024-09-12 12:05:42 +02:00
}
}