chunk zapper to not use all sockets at once

This commit is contained in:
Kukks
2023-05-08 14:12:01 +02:00
parent 0484c87863
commit 475db0ebf3

View File

@@ -100,25 +100,31 @@ public class Zapper : IHostedService
} }
} }
var relaysToConnectTo = pendingZaps.SelectMany(@event => @event.relays).Distinct(); var relaysToConnectTo = pendingZaps.SelectMany(@event => @event.relays).Distinct();
var relaysToZap =relaysToConnectTo.ToDictionary(s => s, s => pendingZaps.Where(@event => @event.relays.Contains(s)).Select(@event => @event.nostrEvent).ToArray()); var relaysToZap =relaysToConnectTo.
ToDictionary(s => s, s => pendingZaps.Where(@event => @event.relays.Contains(s)).Select(@event => @event.nostrEvent).ToArray())
.Chunk(5);
await Task.WhenAll(relaysToZap.Select(async relay => foreach (var chunk in relaysToZap)
{ {
try await Task.WhenAll(chunk.Select(async relay =>
{ {
_logger.LogInformation($"Zapping {relay.Value.Length} to {relay.Key}"); try
var cts = new CancellationTokenSource(); {
cts.CancelAfter(TimeSpan.FromSeconds(30)); _logger.LogInformation($"Zapping {relay.Value.Length} to {relay.Key}");
using var c = new NostrClient(new Uri(relay.Key)); var cts = new CancellationTokenSource();
_ = c.Connect(cts.Token); cts.CancelAfter(TimeSpan.FromSeconds(30));
await c.WaitUntilConnected(cts.Token); using var c = new NostrClient(new Uri(relay.Key));
await c.SendEventsAndWaitUntilReceived(relay.Value, cts.Token); _ = c.Connect(cts.Token);
await c.Disconnect(); await c.WaitUntilConnected(cts.Token);
} await c.SendEventsAndWaitUntilReceived(relay.Value, cts.Token);
catch (Exception e) await c.Disconnect();
{ }
} catch (Exception e)
})); {
}
}));
}
} }
var waitingToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); var waitingToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);