← Zurück

TransaqTrader.ConnectionState.Connecting ???

собссно хочется сделать обертку для коннектора по типу урока 2. Часть 1. Создание обертки коннекторов (https://vk.com/stocksharpedu?z=video-66650972_167470507%2Feb956e23a603a4440c). Передав объекту TransaqTrader: логин, пароль, адрес сервера и после команды Trader.Connect(), последний изменят состояние на Connecting....и собссно всё....События Connected не наступают, поезда не едут..Подскажите люди добрые чем можете. Адрес сервера менял...Эффект такой же...Библиотека 4.3.13...Когда нормально подключается (без обертки коннектора) - он на 2-3 сек задумывается, доматывается до жесткого диска и наступает событие Connected. В описываемом случае команда Trader.Connect() быстро и безрезультатно проглатывается...🤨

War dieses Thema hilfreich?

Thema teilen

Kommentare (3)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Я ни одного предложения не понял. Можете как-то поделить на абзацы, с более подробным описанием?

titan
titan Autor

<u>Введенеие</u> Хочется сделать обертку для коннектора по типу урока 2. Часть 1. Создание обертки коннекторов (https://vk.com/stocksharpedu?z=video-66650972_167470507%2Feb956e23a603a4440c), чтобы было все по-взрослому))) По простому(т.е. без использования класса SafeConnection и графического юзер контрола(wpfconnection)), подключение, c использованием библиотек 4.3.13, работает!

  1. Анализ работы кода позволил найти проблему:
namespace TraderConnection { public class SafeConnection {
    private Timer timer_sc;
    public Connector Trader
    {
        get; set; 
    }

    public SafeConnection(Connector trader)
    {
        Trader = trader;
        
    }
    

    public void ConnectSafe()
    {
        
        Trader.ReConnectionSettings.Interval=TimeSpan.FromSeconds(10);
        Trader.ReConnectionSettings.WorkingTime = ExchangeBoard.Forts.WorkingTime;
        Trader.ConnectionError += OnNewException;
        Trader.OrdersRegisterFailed += fails => fails.ForEach(f => OnNewException(f.Error));
        Trader.Connect();

// !!!! В ЭТОМ МЕСТЕ Trader ИЗМЕНЯЕТ ЗНАЧЕНИЕ ПОЛЯ ConnectionState ИЗ Disconnected В Connecting....

     //  if (Trader!=null && Trader.ConnectionState==ConnectionStates.Connected)
     //  {
     //      try
     //      {
     //          IsConnected = true;
     //      }
     //      catch (Exception ex)
     //      {
     //          OnNewException(ex);
     //      } 
     // }
    }

    public void DisconnectSafe()
    {
        if (Trader != null && Trader.ConnectionState == ConnectionStates.Connected)
        {Trader.Disconnect();}
    }

    public event Action<Exception> NewException = delegate { };

    protected virtual void OnNewException(Exception exeption)
    {
        NewException(exeption);
    }


    

    public bool IsConnected
    {
        get
        {return (Trader != null && Trader.ConnectionState == ConnectionStates.Connected);}

        private set { }

    }
}

}

  1. Поскольку ConnectionState находится в состоянии Connecting, события Connected в классе WpfConnection не происходит:
namespace WpfConnectionInterface { /// <summary> /// Interaction logic for InterFace.xaml /// </summary> public partial class InterFace : UserControl { private SafeConnection _safeConnection; public SafeConnection SafeConnection { set { _safeConnection = value; btnConnect.IsEnabled = _safeConnection != null; } get { return _safeConnection; } }
    public InterFace()
    {
        InitializeComponent();
        Loaded += InterfaceLoaded;
        btnConnect.IsEnabled = false;
    }

    private void InterfaceLoaded(object sender, RoutedEventArgs e)
    {
        var window = Window.GetWindow(this.Parent);
        if (window != null)
            window.Closed += delegate
            {
                if (_safeConnection != null)
                    _safeConnection.DisconnectSafe();
            };
    }

    private void ConnectClick(object sender, RoutedEventArgs e)
    {
        
        if (_safeConnection == null)
            return;
        if (_safeConnection.IsConnected)
        {
            //кнопка содержит контент "Disconnect", после щелчка по ней:...->
            btnConnect.Content = "Connect";
            btnConnect.IsEnabled = false;
            _safeConnection.Trader.NewSecurities -= TraderNewSecurities;
            _safeConnection.Trader.NewPortfolios -= TraderNewPortfolios;
            _safeConnection.DisconnectSafe();
            Action disconnected = null;
            disconnected = () =>
            {
                _safeConnection.Trader.Disconnected -= disconnected;
                this.GuiAsync(() => { btnConnect.IsEnabled = true; });
            };
            _safeConnection.Trader.Disconnected += disconnected;
        }
        else
        {
            //кнопка содержит контент "Connect", после щелчка по ней:...->
            btnConnect.Content = "Disconnect";
            btnConnect.IsEnabled = false;
            
            _safeConnection.Trader.NewSecurities += TraderNewSecurities;
            _safeConnection.Trader.NewPortfolios += TraderNewPortfolios;
            Action connected = null;
            connected = () =>
            {
                _safeConnection.Trader.Connected -= connected;
                this.GuiAsync(() => { btnConnect.IsEnabled = true; });
            };

//Здесь событием Connected соответственно и не пахнет
_safeConnection.Trader.Connected += connected; _safeConnection.ConnectSafe();

        }

    }

    public Security SelectedSecurity
    {
        get { return (Security) cbSecurities.SelectedItem; }
    }

    public Portfolio SelectedPortfolio
    {
        get { return (Portfolio)cbPortfolios.SelectedItem; }
    }

    private void TraderNewPortfolios(IEnumerable<Portfolio> obj)
    {
        this.GuiAsync(() => { cbPortfolios.ItemsSource = _safeConnection.Trader.Portfolios; });
    }

    private void TraderNewSecurities(IEnumerable<Security> obj)
    {
        this.GuiAsync(() => { cbSecurities.ItemsSource = _safeConnection.Trader.Securities; });
    }

    private void DisonnectClick(object sender, RoutedEventArgs e)
    {
        
    }
}

}

  1. События NewSecurities и NewPortfolios не происходят. Поезда не едут)))

P.s. Предыдущее сообщение написано в состоянии аффекта от целого дня кодинга и дебагинга, сильно не судите)))

Mikhail Sukhov
Mikhail Sukhov

Если вы по кодам из учебного процесса, то просьба писать в чат или в группу обучения.