From 9a8299d61ea29bd6c49db28d08be2b38f2f9aa14 Mon Sep 17 00:00:00 2001 From: Kukks Date: Fri, 1 Mar 2024 18:09:15 +0000 Subject: [PATCH] optimistic fix blink --- .../BTCPayServer.Plugins.Blink.csproj | 2 +- .../BlinkLightningClient.cs | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj b/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj index c4717f7..1ed0f44 100644 --- a/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj +++ b/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj @@ -9,7 +9,7 @@ Blink Blink Lightning support - 1.0.7 + 1.0.8 true BTCPayServer.Plugins.Blink diff --git a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs index e307e8c..00da65e 100644 --- a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs +++ b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using BTCPayServer.HostedServices; using BTCPayServer.Lightning; using GraphQL; +using GraphQL.Client.Abstractions.Websocket; using GraphQL.Client.Http; using GraphQL.Client.Http.Websocket; using GraphQL.Client.Serializer.Newtonsoft; @@ -458,6 +459,14 @@ expiresIn = (int)createInvoiceRequest.Expiry.TotalMinutes } }); + _wsSubscriptionDisposable = httpClient.WebsocketConnectionState.Subscribe(state => + { + if (state == GraphQLWebsocketConnectionState.Disconnected) + { + streamEnded.TrySetResult(); + } + }); + } catch (Exception e) { @@ -468,11 +477,22 @@ expiresIn = (int)createInvoiceRequest.Expiry.TotalMinutes { _subscription.Dispose(); _invoices.Writer.TryComplete(); + _wsSubscriptionDisposable.Dispose(); + streamEnded.TrySetResult(); } + private TaskCompletionSource streamEnded = new(); + private readonly IDisposable _wsSubscriptionDisposable; + public async Task WaitInvoice(CancellationToken cancellation) { - return await _invoices.Reader.ReadAsync(cancellation); + var resultz = await Task.WhenAny(streamEnded.Task, _invoices.Reader.ReadAsync(cancellation).AsTask()); + if (resultz is Task res) + { + return await res; + } + + throw new Exception("Stream disconnected, cannot await invoice"); } } public async Task<(Network Network, string DefaultWalletId, string DefaultWalletCurrency)> GetNetworkAndDefaultWallet(CancellationToken cancellation =default)