mirror of
				https://github.com/JKorf/CryptoExchange.Net
				synced 2025-11-04 04:17:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
@page "/LiveData"
 | 
						|
@inject IBinanceSocketClient binanceSocketClient
 | 
						|
@inject IBingXSocketClient bingXSocketClient
 | 
						|
@inject IBitfinexSocketClient bitfinexSocketClient
 | 
						|
@inject IBitgetSocketClient bitgetSocketClient
 | 
						|
@inject IBitMartSocketClient bitmartSocketClient
 | 
						|
@inject IBitMEXSocketClient bitmexSocketClient
 | 
						|
@inject IBybitSocketClient bybitSocketClient
 | 
						|
@inject ICoinbaseSocketClient coinbaseSocketClient
 | 
						|
@inject ICoinExSocketClient coinExSocketClient
 | 
						|
@inject ICryptoComSocketClient cryptocomSocketClient
 | 
						|
@inject IDeepCoinSocketClient deepCoinSocketClient
 | 
						|
@inject IGateIoSocketClient gateioSocketClient
 | 
						|
@inject IHTXSocketClient htxSocketClient
 | 
						|
@inject IHyperLiquidSocketClient hyperLiquidSocketClient
 | 
						|
@inject IKrakenSocketClient krakenSocketClient
 | 
						|
@inject IKucoinSocketClient kucoinSocketClient
 | 
						|
@inject IMexcSocketClient mexcSocketClient
 | 
						|
@inject IOKXSocketClient okxSocketClient
 | 
						|
@inject IToobitSocketClient toobitSocketClient
 | 
						|
@inject IWhiteBitSocketClient whitebitSocketClient
 | 
						|
@inject IXTSocketClient xtSocketClient
 | 
						|
@using System.Collections.Concurrent
 | 
						|
@using CryptoExchange.Net.Objects
 | 
						|
@using CryptoExchange.Net.Objects.Sockets;
 | 
						|
@using CryptoExchange.Net.Sockets
 | 
						|
@using XT.Net.Interfaces.Clients
 | 
						|
@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.SpotApiV2.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.LastPrice)),
 | 
						|
            bitmartSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("BitMart", data.Data.LastPrice)),
 | 
						|
            bitmexSocketClient.ExchangeApi.SubscribeToSymbolUpdatesAsync("ETH_XBT", data => UpdateData("BitMEX", data.Data.LastPrice ?? 0)),
 | 
						|
            bybitSocketClient.V5SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bybit", data.Data.LastPrice)),
 | 
						|
            coinExSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync(["ETHBTC"], data => UpdateData("CoinEx", data.Data.First().LastPrice)),
 | 
						|
            coinbaseSocketClient.AdvancedTradeApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("Coinbase", data.Data.LastPrice ?? 0)),
 | 
						|
            cryptocomSocketClient.ExchangeApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("CryptoCom", data.Data.LastPrice ?? 0)),
 | 
						|
            deepCoinSocketClient.ExchangeApi.SubscribeToSymbolUpdatesAsync("ETH-BTC", data => UpdateData("DeepCoin", data.Data.LastPrice ?? 0)),
 | 
						|
            gateioSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("GateIo", data.Data.LastPrice)),
 | 
						|
            htxSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ethbtc", data => UpdateData("HTX", data.Data.ClosePrice ?? 0)),
 | 
						|
            xtSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("eth_btc", data => UpdateData("XT", data.Data.LastPrice ?? 0)),
 | 
						|
            // HyperLiquid doesn't support the ETH/BTC pair
 | 
						|
            //hyperLiquidSocketClient.SpotApi.SubscribeToSymbolUpdatesAsync("ETH", data => UpdateData("HyperLiquid", data.Data.MidPrice ?? 0)),
 | 
						|
            krakenSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH/BTC", data => UpdateData("Kraken", data.Data.LastPrice)),
 | 
						|
            kucoinSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("Kucoin", data.Data.LastPrice ?? 0)),
 | 
						|
            mexcSocketClient.SpotApi.SubscribeToMiniTickerUpdatesAsync("ETHBTC", data => UpdateData("Mexc", data.Data.LastPrice)),
 | 
						|
            okxSocketClient.UnifiedApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("OKX", data.Data.LastPrice ?? 0)),
 | 
						|
            // Toobit doesn't support the ETH/BTC pair
 | 
						|
            //toobitSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Toobit", data.Data.LastPrice ?? 0)),
 | 
						|
            whitebitSocketClient.V4Api.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("WhiteBit", data.Data.Ticker.LastPrice)),
 | 
						|
        };
 | 
						|
 | 
						|
        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();
 | 
						|
    }
 | 
						|
} |