mirror of
				https://github.com/JKorf/CryptoExchange.Net
				synced 2025-10-30 09:57:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @page "/LiveData"
 | |
| @inject IBinanceSocketClient binanceSocketClient
 | |
| @inject IBingXSocketClient bingXSocketClient
 | |
| @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
 | |
| 
 | |
| <h3>ETH-BTC prices, live updates:</h3>
 | |
| @foreach(var price in _prices.OrderBy(p => p.Key))
 | |
| {
 | |
|     <div>@price.Key: @price.Value</div>
 | |
| }
 | |
| 
 | |
| @code{
 | |
|     private ConcurrentDictionary<string, decimal> _prices = new ConcurrentDictionary<string, decimal>();
 | |
|     private UpdateSubscription[] _subs = Array.Empty<UpdateSubscription>();
 | |
| 
 | |
|     protected override async Task OnInitializedAsync()
 | |
|     {
 | |
|         var tasks = new Task<CallResult<UpdateSubscription>>[]
 | |
|         {
 | |
|             binanceSocketClient.SpotApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Binance", data.Data.LastPrice)),
 | |
|             bingXSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("BingX", 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();
 | |
|     }
 | |
| } |