2
0
mirror of synced 2025-02-16 18:37:01 +00:00

65 lines
2.0 KiB
C#
Raw Normal View History

2024-06-14 11:05:29 +02:00
using CodexContractsPlugin;
using CodexContractsPlugin.ChainMonitor;
2024-01-26 18:17:56 -05:00
using Logging;
using Utils;
namespace TestNetRewarder
{
public class Processor : ITimeSegmentHandler
2024-01-26 18:17:56 -05:00
{
private readonly RequestBuilder builder;
private readonly RewardChecker rewardChecker;
private readonly MarketTracker marketTracker;
private readonly BufferLogger bufferLogger;
2024-06-14 11:05:29 +02:00
private readonly ChainState chainState;
private readonly BotClient client;
2024-01-26 18:17:56 -05:00
private readonly ILog log;
public Processor(Configuration config, BotClient client, ICodexContracts contracts, ILog log)
2024-01-26 18:17:56 -05:00
{
this.client = client;
2024-01-26 18:17:56 -05:00
this.log = log;
2024-06-14 11:05:29 +02:00
builder = new RequestBuilder();
rewardChecker = new RewardChecker(builder);
marketTracker = new MarketTracker(config, log);
bufferLogger = new BufferLogger();
var handler = new ChainChangeMux(
rewardChecker.Handler,
marketTracker
);
chainState = new ChainState(new LogSplitter(log, bufferLogger), contracts, handler, config.HistoryStartUtc);
2024-01-26 18:17:56 -05:00
}
2024-06-14 11:05:29 +02:00
public async Task OnNewSegment(TimeRange timeRange)
2024-01-26 18:17:56 -05:00
{
try
{
2024-06-14 11:05:29 +02:00
chainState.Update(timeRange.To);
var averages = marketTracker.GetAverages();
2024-06-20 12:15:59 +02:00
var lines = RemoveFirstLine(bufferLogger.Get());
var request = builder.Build(averages, lines);
if (request.HasAny())
{
await client.SendRewards(request);
}
2024-01-26 18:17:56 -05:00
}
catch (Exception ex)
{
log.Error("Exception processing time segment: " + ex);
2024-04-01 13:56:07 +02:00
throw;
2024-01-26 18:17:56 -05:00
}
}
2024-06-20 12:15:59 +02:00
private string[] RemoveFirstLine(string[] lines)
{
if (!lines.Any()) return Array.Empty<string>();
return lines.Skip(1).ToArray();
}
2024-01-26 18:17:56 -05:00
}
}