TransaqTrader.ConnectionState.Connecting ???

TransaqTrader.ConnectionState.Connecting ???
Atom
12/6/2015
titan


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

Disconnected.jpg 103 KB (483) Connecting.jpg 103 KB (481)

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 12/9/2015
Reply


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

Thanks:

titan

Avatar
Date: 12/9/2015
Reply


Введенеие Хочется сделать обертку для коннектора по типу урока 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 { ///

/// Interaction logic for InterFace.xaml /// 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. Предыдущее сообщение написано в состоянии аффекта от целого дня кодинга и дебагинга, сильно не судите)))

Thanks:

Mikhail Sukhov

Avatar
Date: 12/9/2015
Reply


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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy