@page "/LiveData" @inject IBinanceSocketClient binanceSocketClient @inject IBitfinexSocketClient bitfinexSocketClient @inject IBitgetSocketClient bitgetSocketClient @inject IBybitSocketClient bybitSocketClient @inject ICoinExSocketClient coinExSocketClient @inject IHuobiSocketClient huobiSocketClient @inject IKrakenSocketClient krakenSocketClient @inject IKucoinSocketClient kucoinSocketClient @inject IOKXSocketClient okxSocketClient @using System.Collections.Concurrent @using CryptoExchange.Net.Objects @using CryptoExchange.Net.Objects.Sockets; @using CryptoExchange.Net.Sockets @implements IDisposable

ETH-BTC prices, live updates:

@foreach(var price in _prices.OrderBy(p => p.Key)) {
@price.Key: @price.Value
} @code{ private ConcurrentDictionary _prices = new ConcurrentDictionary(); private UpdateSubscription[] _subs = Array.Empty(); protected override async Task OnInitializedAsync() { var tasks = new Task>[] { binanceSocketClient.SpotApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Binance", data.Data.LastPrice)), bitfinexSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("tETHBTC", data => UpdateData("Bitfinex", data.Data.LastPrice)), bitgetSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.LastPrice)), bybitSocketClient.V5SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bybit", data.Data.LastPrice)), coinExSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("CoinEx", data.Data.LastPrice)), huobiSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ethbtc", data => UpdateData("Huobi", data.Data.ClosePrice ?? 0)), krakenSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH/XBT", data => UpdateData("Kraken", data.Data.LastTrade.Price)), kucoinSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("Kucoin", data.Data.LastPrice ?? 0)), okxSocketClient.UnifiedApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("OKX", data.Data.LastPrice ?? 0)), }; await Task.WhenAll(tasks); _subs = tasks.Where(t => t.Result.Success).Select(t => t.Result.Data).ToArray(); } private void UpdateData(string exchange, decimal price) { _prices[exchange] = price; InvokeAsync(StateHasChanged); } public void Dispose() { foreach (var sub in _subs) // It's not necessary to wait for this _ = sub.CloseAsync(); } }