Создание метода веб-сокета и многократного использования свойства путем перемещения их в отдельный класс - PullRequest
0 голосов
/ 13 марта 2020

У меня есть несколько функций, использующих веб-сокеты, и я хотел переместить следующие логи c в другой класс.

Проблема в том, что если я переместу Ticker в этот другой класс, то я бы приходится повторять его каждый раз на _socketClient.SubscribeToKlineUpdates, потому что это также подписка на веб-сокеты, которая убивает идею веб-сокетов. Единственный способ - это, вероятно, оставить Ticker в WhwhatStrategy.cs и переместить метод GetTicker в этот другой класс. Но тогда как он может обновлять свойство из другого класса каждый раз?

Как я могу сделать эти вспомогательные методы, такие как GetTicker, повторно используемыми? Примите во внимание, что каждая стратегия logi c выполняется в другой подписке на веб-сокет: _socketClient.SubscribeToKlineUpdates, и Wh whatStrategy порождает несколько потоков.

WhwhatStrategy.cs

public interface IStrategy
{
    void Start(Bot bot, CancellationToken token);
}

public class WhateverStrategy : IStrategy
{
    /// <summary>
    /// Gets tickers.
    /// </summary>
    public BinanceStreamTick Ticker { get; set; }

    /// <summary>
    /// Gets prices.
    /// </summary>
    private void GetTicker(string symbol)
    {
        var price = _client.Get24HPrice(symbol);

        while (!price.Success)
        {
            price = _client.Get24HPrice(symbol);
        }

        var ticker = new BinanceStreamTick
        {
            LowPrice = price.Data.LowPrice,
            HighPrice = price.Data.HighPrice,
            OpenPrice = price.Data.OpenPrice,
            BestAskQuantity = price.Data.AskQuantity,
            BestAskPrice = price.Data.AskPrice,
            BestBidQuantity = price.Data.BidQuantity,
            BestBidPrice = price.Data.BidPrice,
            CloseTradesQuantity = price.Data.LastQuantity,
            CurrentDayClosePrice = price.Data.LastPrice,
            PrevDayClosePrice = price.Data.PreviousClosePrice,
            WeightedAverage = price.Data.WeightedAveragePrice,
            PriceChangePercentage = price.Data.PriceChangePercent,
            PriceChange = price.Data.PriceChange,
            Symbol = price.Data.Symbol
        };

        Ticker = ticker;

        _socketClient.SubscribeToSymbolTickerUpdates(symbol, (data) => Ticker = data);
    }

    public void Start(Bot bot, CancellationToken token)
    {
        GetTicker(bot.Symbol);

        _socketClient.SubscribeToKlineUpdates(bot.Symbol, bot.Interval, data =>
        {
            // another web socket
        });
    }
}

SocketHelper. cs (повторная попытка, но свойство?)

/// <summary>
/// This class getting data using web sockets,
/// in order to reduce requests.
/// </summary>
public class SocketHelpers
{
    private readonly IBinanceClient _client;
    private readonly IBinanceSocketClient _socketClient;

    public SocketHelpers(IBinanceClient client, IBinanceSocketClient socketClient)
    {
        _client = client;
        _socketClient = socketClient;
    }

    /// <summary>
    /// Gets tickers.
    /// </summary>
    public BinanceStreamTick Ticker { get; set; }

    /// <summary>
    /// Gets prices.
    /// </summary>
    private void GetTicker(string symbol)
    {
        var price = _client.Get24HPrice(symbol);

        while (!price.Success)
        {
            var weight = BinanceHelpers.UsedWeight(price.ResponseHeaders);
            Globals.Instance.HandleRateLimits(weight.Value);

            price = _client.Get24HPrice(symbol);
        }

        var ticker = new BinanceStreamTick
        {
            LowPrice = price.Data.LowPrice,
            HighPrice = price.Data.HighPrice,
            OpenPrice = price.Data.OpenPrice,
            BestAskQuantity = price.Data.AskQuantity,
            BestAskPrice = price.Data.AskPrice,
            BestBidQuantity = price.Data.BidQuantity,
            BestBidPrice = price.Data.BidPrice,
            CloseTradesQuantity = price.Data.LastQuantity,
            CurrentDayClosePrice = price.Data.LastPrice,
            PrevDayClosePrice = price.Data.PreviousClosePrice,
            WeightedAverage = price.Data.WeightedAveragePrice,
            PriceChangePercentage = price.Data.PriceChangePercent,
            PriceChange = price.Data.PriceChange,
            Symbol = price.Data.Symbol
        };

        Ticker = ticker;

        _socketClient.SubscribeToSymbolTickerUpdates(symbol, (data) => Ticker = data);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...