Где-то косячок... =)


Где-то косячок... =)
Atom
8/10/2013


Изменяющиеся цвета кнопок при подключении я сделал. Понравилось. Захотелось, чтобы при нажатии "Connect" запускался терминал и авторизовывался, если он не запущен. Да так, чтобы логин и пароль были записаны в отдельном фале, а не в коде(пока юзаю Junior для отладки). Сделал. Но вот косяк. Терминал запускается, а передавать значения в StockSharp.WpfConnectionInterface.dll не хочет. Если запускать код на включенном терминале, то все работает. Думал задержки маленькие поставить - не помогают. Нужен взгляд профессионала!)

Как работает запуск и авторизация:
По адресу C:\Key_Junior\Key_Junior.txt храню файл Key_Junior.txt(кодировка файла UTF-8 вроде), в котором текст следующего содержания:
C:\Program Files\QUIK-Junior\info.exe
61488
ХХХХХХХХХХ
, где первая строка адрес нужного Квика, вторая и третья логин и пароль.
метод считывает каждую строку и запоминает нужные данные. А потом на их основе запускает терминал.

Прилагаю архивчик, в нем:
Из StockSharp.WpfConnectionInterface - InterFace.xaml, InterFace.xaml.cs;
Из StockSharp.TraderConnection - SafeConnection.cs;
Текстовый файл - Key_Junior.txt.

По отдельности работает. Вместе, на моменте передачи данных из потока(уже появляется надпись "Disconnect") зависает.

П.С. Может это все как-то более рационально можно реализовать?
Данные.rar 3 KB (473)



Thanks:


IvanB

Avatar
Date: 8/11/2013
Reply


Bond Go to
Изменяющиеся цвета кнопок при подключении я сделал. Понравилось. Захотелось, чтобы при нажатии "Connect" запускался терминал и авторизовывался, если он не запущен. Да так, чтобы логин и пароль были записаны в отдельном фале, а не в коде(пока юзаю Junior для отладки). Сделал. Но вот косяк. Терминал запускается, а передавать значения в StockSharp.WpfConnectionInterface.dll не хочет. Если запускать код на включенном терминале, то все работает. Думал задержки маленькие поставить - не помогают. Нужен взгляд профессионала!)
...


Думаю, на момент создания коннектора, терминал еще не получил все данные с сервера. Нужно четко разделить этапы запуска терминала и этап создания коннектора и т.д., можно сделать две кнопки, на запуск (и авторизацию) и подключение к терминалу. Убедиться, что при автоматическом запуске программы, все нужные таблицы создаются.
Ну а вообще, ничего хитрого здесь нет, все должно работать.
Thanks:

Bond

Avatar
Date: 8/11/2013
Reply


Quote:
Думаю, на момент создания коннектора, терминал еще не получил все данные с сервера. Нужно четко разделить этапы запуска терминала и этап создания коннектора и т.д., можно сделать две кнопки, на запуск (и авторизацию) и подключение к терминалу. Убедиться, что при автоматическом запуске программы, все нужные таблицы создаются.
Ну а вообще, ничего хитрого здесь нет, все должно работать.

Вот и мне кажется, что должно работать. Автоматизация процесса для того и нужна, чтобы не делать лишних действий, не создавать новых кнопок. Тогда почему срабатывает событие Isconneted, если еще не все данные стали поступать? Какое дополнительное условие или событие реализовать, чтобы узнать что мы полностью подключились и можем передавать данные дальше?
П.С. Я пробовал ставить задержки после авторизации терминала, чтобы Квик успел все подгрузить. Почему-то не помогло.
Thanks:

IvanB

Avatar
Date: 8/12/2013
Reply


Bond Go to

Вот и мне кажется, что должно работать. Автоматизация процесса для того и нужна, чтобы не делать лишних действий, не создавать новых кнопок. Тогда почему срабатывает событие Isconneted, если еще не все данные стали поступать? Какое дополнительное условие или событие реализовать, чтобы узнать что мы полностью подключились и можем передавать данные дальше?
П.С. Я пробовал ставить задержки после авторизации терминала, чтобы Квик успел все подгрузить. Почему-то не помогло.


Вот проект, где при нажатии на кнопку "подключиться" проверяется запущен-ли терминал, если запущен, то подключается, если не запущен, то запускает, авторизуется и подключается к терминалу.
Thanks:

Bond

Avatar
Date: 8/15/2013
Reply


Иван, вы не могли бы пояснить следующий код из урока:
Code

public BaseTrader Trader { get; private set; }

        /// <summary>
        /// Событие появления нового исключения
        /// </summary>
        public event Action<Exception> NewException = delegate { };

        /// <summary>
        /// Конструктор. Создать безопасное подключение
        /// </summary>
        /// <param name="trader">Коннектор к торговой платформе</param>
        public SafeConnection(BaseTrader trader)
        {
            Trader = trader;
        }

Как Trader узнает где расположен терминал Квик?
Почему-то при авторизации(там мы явно указываем путь до терминала) при выполнении Trader.Connect() он забывает, где терминал и выдает Исключение "Не могу найти терминал". Почему без авторизации он не выдает Исключение? Получается при запущенном терминале он знает где тот расположен.
Указал явно как в предложенном вами примере путь до терминала в ConnectSafe():
Code
						Trader = new QuikTrader(Path.Text);

Уже видно, что подключается, но все равно срабатывает Исключение "Не верное значение в ComponentModel"(лексика исключения примерная).
Thanks:

IvanB

Avatar
Date: 8/15/2013
Reply


Bond Go to
Иван, вы не могли бы пояснить следующий код из урока:
Code

public BaseTrader Trader { get; private set; }

        /// <summary>
        /// Событие появления нового исключения
        /// </summary>
        public event Action<Exception> NewException = delegate { };

        /// <summary>
        /// Конструктор. Создать безопасное подключение
        /// </summary>
        /// <param name="trader">Коннектор к торговой платформе</param>
        public SafeConnection(BaseTrader trader)
        {
            Trader = trader;
        }

Как Trader узнает где расположен терминал Квик?

В данном коде используется базовый класс BaseTrader, т.е ему не важно какой коннектор ему был передан (Quik, Plaza, или что-то другое)
Bond Go to

Почему-то при авторизации(там мы явно указываем путь до терминала) при выполнении Trader.Connect() он забывает, где терминал и выдает Исключение "Не могу найти терминал". Почему без авторизации он не выдает Исключение? Получается при запущенном терминале он знает где тот расположен.
Указал явно как в предложенном вами примере путь до терминала в ConnectSafe():
Code
						Trader = new QuikTrader(Path.Text);

Уже видно, что подключается, но все равно срабатывает Исключение "Не верное значение в ComponentModel"(лексика исключения примерная).

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

Bond

Avatar
Date: 8/15/2013
Reply


В общем разобрался. Пустяк, а столько времени потратил, чтобы найти проблему...
После запуска авторизации в SafeConnection все прекрасно запускалось, только после Trader.Connect() все висло. В Исключении было, что не может найти терминал. Как выяснилось путь до терминала прописывался в MainWindow.xaml.cs в каждом уроке отдельно.
Code

ConnectionInterFace.SafeConnection = new SafeConnection(new QuikTrader(QuikTerminal.GetDefaultPath()));

В данном случае путь до терминала нужно указать явно
Code

ConnectionInterFace.SafeConnection = new SafeConnection(new QuikTrader(pathFile));

, где pathFile - путь до терминала.
Вот и вся любовь![biggrin]
Thanks:


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

loading
clippy