Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="client"></param>
        /// <param name="user"></param>
        /// <param name="callback"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static async Task StreamAsync(this IUserDataWebSocketClient client, IBinanceApiUser user, Action <UserDataEventArgs> callback, CancellationToken token)
        {
            Throw.IfNull(client, nameof(client));

            await client.SubscribeAsync(user, callback, token)
            .ConfigureAwait(false);

            await client.WebSocket.StreamAsync(token)
            .ConfigureAwait(false);
        }
Beispiel #2
0
        private async Task SubscribeToUserData(bool reConnect = false)
        {
            if (_userDataSubscribeTask != null && !reConnect)
            {
                return;
            }

            try
            {
                _user?.Dispose();

                _userDataCancellationTokenSource?.Cancel();
                _userDataCancellationTokenSource?.Dispose();

                _userDataCancellationTokenSource = new CancellationTokenSource();

                if (_userDataWebSocketClient != null)
                {
                    _userDataWebSocketClient.TradeUpdate   -= OnAccountTradeUpdate;
                    _userDataWebSocketClient.AccountUpdate -= OnAccountUpdate;
                    _userDataWebSocketClient.OrderUpdate   -= OnOrderUpdate;
                }

                _userDataWebSocketClient = _serviceProvider.GetService <IUserDataWebSocketClient>();

                _user = new BinanceApiUser(_config.Key, _config.Secret);

                _userDataWebSocketClient.TradeUpdate   += OnAccountTradeUpdate;
                _userDataWebSocketClient.AccountUpdate += OnAccountUpdate;
                _userDataWebSocketClient.OrderUpdate   += OnOrderUpdate;

                _userDataSubscribeTask = _userDataWebSocketClient.SubscribeAsync(_user, _userDataCancellationTokenSource.Token);

                if (!reConnect)
                {
                    UserDataReConnectionTimerInitialize();
                }

                await _userDataSubscribeTask;
            }
            catch (Exception ex)
            {
                _userDataSubscribeTask = null;

                _log.LogError($"Error with user data websocket {ex.Message}", ex);

                await _onUserDataError?.Invoke();
            }
        }
Beispiel #3
0
        internal static async Task DisableLiveTask()
        {
            LiveTokenSource?.Cancel();

            // Wait for live task to complete.
            if (LiveTask != null && !LiveTask.IsCompleted)
            {
                await LiveTask;
            }

            LiveTokenSource?.Dispose();

            if (TradeCache != null)
            {
                lock (ConsoleSync)
                {
                    Console.WriteLine();
                    Console.WriteLine("  ...live trades feed disabled.");
                }
            }
            TradeCache = null;

            if (OrderBookCache != null)
            {
                lock (ConsoleSync)
                {
                    Console.WriteLine();
                    Console.WriteLine("  ...live order book feed disabled.");
                }
            }
            OrderBookCache = null;

            if (CandlestickCache != null)
            {
                lock (ConsoleSync)
                {
                    Console.WriteLine();
                    Console.WriteLine("  ...live candlestick feed disabled.");
                }
            }
            CandlestickCache = null;

            if (AggregateTradeCache != null)
            {
                lock (ConsoleSync)
                {
                    Console.WriteLine();
                    Console.WriteLine("  ...live aggregate trades feed disabled.");
                }
            }
            AggregateTradeCache = null;

            if (UserDataClient != null)
            {
                lock (ConsoleSync)
                {
                    Console.WriteLine();
                    Console.WriteLine("  ...live account feed disabled.");
                }
            }
            UserDataClient = null;

            LiveTokenSource = null;
            LiveTask        = null;
        }
Beispiel #4
0
 /// <summary>
 /// Unsubscribe listen key (and user along w/ all callbacks).
 /// </summary>
 /// <param name="client"></param>
 /// <param name="listenKey"></param>
 public static void Unsubscribe(this IUserDataWebSocketClient client, string listenKey)
 => client.Unsubscribe(listenKey, null);
Beispiel #5
0
 /// <summary>
 /// Subscribe listen key and user (w/o callback).
 /// </summary>
 /// <param name="client"></param>
 /// <param name="listenKey"></param>
 /// <param name="user"></param>
 public static void Subscribe(this IUserDataWebSocketClient client, string listenKey, IKucoinApiUser user)
 => client.Subscribe(listenKey, user, null);
Beispiel #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="client"></param>
 /// <param name="user"></param>
 /// <param name="token"></param>
 /// <returns></returns>
 public static Task StreamAsync(this IUserDataWebSocketClient client, IBinanceApiUser user, CancellationToken token)
 => StreamAsync(client, user, null, token);
Beispiel #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="client"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static Task StreamAsync(this IUserDataWebSocketClient client, CancellationToken token)
        {
            Throw.IfNull(client, nameof(client));

            return(client.Stream.StreamAsync(token));
        }
Beispiel #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="client"></param>
 /// <param name="user"></param>
 /// <param name="token"></param>
 /// <returns></returns>
 public static Task SubscribeAsync(this IUserDataWebSocketClient client, IBinanceApiUser user, CancellationToken token)
 => client.SubscribeAsync(user, null, token);
        private async Task SubscribeToUserData()
        {
            if (_userDataSubscribeTask != null)
            {
                return;
            }

            try
            {
                try
                {
                    await _userDataSemaphore.WaitAsync();

                    if (_userDataSubscribeTask != null)
                    {
                        return;
                    }

                    _log.LogInformation("Subscribe to user data");

                    _user?.Dispose();
                    _user = null;

                    _userDataCancellationTokenSource?.Cancel();
                    _userDataCancellationTokenSource?.Dispose();

                    _userDataCancellationTokenSource = new CancellationTokenSource();

                    if (_userDataWebSocketClient != null)
                    {
                        _userDataWebSocketClient.TradeUpdate   -= OnAccountTradeUpdate;
                        _userDataWebSocketClient.AccountUpdate -= OnAccountUpdate;
                        _userDataWebSocketClient.OrderUpdate   -= OnOrderUpdate;
                    }

                    _userDataWebSocketClient = _serviceProvider.GetService <IUserDataWebSocketClient>();

                    _user = new BinanceApiUser(_config.Key, _config.Secret);

                    _userDataWebSocketClient.TradeUpdate   += OnAccountTradeUpdate;
                    _userDataWebSocketClient.AccountUpdate += OnAccountUpdate;
                    _userDataWebSocketClient.OrderUpdate   += OnOrderUpdate;

                    _userDataSubscribeTask = _userDataWebSocketClient.SubscribeAsync(_user, _userDataCancellationTokenSource.Token);

                    UserDataDisconnectionTimerInitialize();
                }
                finally
                {
                    _userDataSemaphore.Release();
                }

                await _userDataSubscribeTask;

                _userDataSubscribeTask = null;
            }
            catch (Exception)
            {
                _userDataSubscribeTask = null;

                await OnUserDataDisconnect(true);
            }
        }