Knocks/BackEnd/Knoks.CryptoExchanges/ExchangeClients/BinanceExchange.cs

57 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebSocket.Clients;
using WebSocket.Interfaces;
namespace Knoks.CryptoExchanges.ExchangeClients
{
class BinanceExchange : IExchangeContainer
{
#region Members
private WebSocket4NetSocket socket;
private BinanceClient client;
private UpdateData saveDataEvent;
private int exchangeId;
public IDictionary<string, string> ReplaceSymbols { get; set; }
#endregion
/// <summary>
/// ctor
/// </summary>
/// <param name="exchangeId"></param>
public BinanceExchange(int exchangeId) {
this.exchangeId = exchangeId;
}
public async Task InitClient(UpdateData updateData) {
this.saveDataEvent = updateData;
await Task.CompletedTask;
}
public async Task RequestPairsData(List<Tuple<string, string>> pairs) {
socket = new BinanceWebsocket4Net();
var streams = string.Join("/", pairs.Select(x => $"{x.Item1}{x.Item2}@kline_1m").ToArray()).TrimStart('/');
socket.Create($"wss://stream.binance.com:9443/stream?streams={streams.ToLower()}"); // depth10 // wss://stream.binance.com:9443/ws/bnbbtc@depth");
socket.Sign((s) => new ConsoleWebClient(
saveDataEvent,
this.exchangeId,
(ss) =>
{
return client = new BinanceClient(ss);
}, s));
await socket.Connect();
}
public async Task CloseConnection() {
await socket.Close();
}
public async Task Reconnect(){
await socket.Close();
}
}
}