From 475db0ebf3745ec9d133d523bd2b66aab4007ab1 Mon Sep 17 00:00:00 2001 From: Kukks Date: Mon, 8 May 2023 14:12:01 +0200 Subject: [PATCH] chunk zapper to not use all sockets at once --- Plugins/BTCPayServer.Plugins.NIP05/Zapper.cs | 38 +++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/Plugins/BTCPayServer.Plugins.NIP05/Zapper.cs b/Plugins/BTCPayServer.Plugins.NIP05/Zapper.cs index 53e06da..4662016 100644 --- a/Plugins/BTCPayServer.Plugins.NIP05/Zapper.cs +++ b/Plugins/BTCPayServer.Plugins.NIP05/Zapper.cs @@ -100,25 +100,31 @@ public class Zapper : IHostedService } } 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}"); - var cts = new CancellationTokenSource(); - cts.CancelAfter(TimeSpan.FromSeconds(30)); - using var c = new NostrClient(new Uri(relay.Key)); - _ = c.Connect(cts.Token); - await c.WaitUntilConnected(cts.Token); - await c.SendEventsAndWaitUntilReceived(relay.Value, cts.Token); - await c.Disconnect(); - } - catch (Exception e) - { - } - })); + try + { + _logger.LogInformation($"Zapping {relay.Value.Length} to {relay.Key}"); + var cts = new CancellationTokenSource(); + cts.CancelAfter(TimeSpan.FromSeconds(30)); + using var c = new NostrClient(new Uri(relay.Key)); + _ = c.Connect(cts.Token); + await c.WaitUntilConnected(cts.Token); + await c.SendEventsAndWaitUntilReceived(relay.Value, cts.Token); + await c.Disconnect(); + } + catch (Exception e) + { + } + })); + } + } var waitingToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);