Knocks/BackEnd/WebSocket.Clients/Sockets/BitfinexWebsocket4Net.cs

89 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Bitfinex.Client.Websocket;
using Bitfinex.Client.Websocket.Websockets;
using Bitfinex.Client.Websocket.Client;
using Bitfinex.Client.Websocket.Requests;
using Bitfinex.Client.Websocket.Utils;
using System.Linq;
using System.Threading;
namespace WebSocket.Clients
{
public class BitfinexWebsocket4Net : WebSocket4NetSocket
{
#region Members
private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
//private Timer Timer;
//private DateTime? LastCall;
private DateTime? CreateTime;
#endregion
/// <summary>
/// ctor
/// </summary>
public BitfinexWebsocket4Net() {
}
public override void Create(string url)
{
//this.ExchangeId = exchangeId;
//this.updateData = updateDate;
//Socket.MessageReceived += Socket_MessageReceived;
CreateTime = DateTime.Now;
}
//private void Socket_MessageReceived(object sender, WebSocket4Net.MessageReceivedEventArgs e)
//{
// LastCall = DateTime.Now;
//}
public async override Task Connect()
{
await Task.CompletedTask;
}
public async override Task Connect(string[] pairs) {
using (var communicator = new BitfinexWebsocketCommunicator(BitfinexValues.ApiWebsocketUrl))
{
using (var client = new BitfinexWebsocketClient(communicator))
{
client.Streams.InfoStream.Subscribe(info =>
{
foreach (var item in pairs)
{
client.Send(new CandlesSubscribeRequest(item, BitfinexTimeFrame.OneMinute));
}
});
client.Streams.CandlesStream.Subscribe(candles =>
{
candles.CandleList.OrderBy(x => x.Mts).ToList().ForEach(x =>
{
OnDataReceived1(new Dictionary<string, object> { { candles.Pair, x } });
});
});
await communicator.Start();
await Task.Run(() => CheckReconnect(_cancellationTokenSource.Token), _cancellationTokenSource.Token);
}
}
}
private async Task CheckReconnect(CancellationToken token)
{
do
{
await Task.CompletedTask;
} while (!token.WaitHandle.WaitOne(TimeSpan.FromSeconds(1)));
}
public override Task Close()
{
_cancellationTokenSource.Cancel();
return Task.CompletedTask;
}
}
}