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


Изменяющиеся цвета кнопок при подключении я сделал. Понравилось. Захотелось, чтобы при нажатии "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 (565)

Теги:


Спасибо:


IvanB

Фотография
Дата: 11.08.2013
Ответить


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


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

Bond

Фотография
Дата: 11.08.2013
Ответить


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

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

IvanB

Фотография
Дата: 12.08.2013
Ответить


Bond

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


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

Bond

Фотография
Дата: 15.08.2013
Ответить


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

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():
Код
						Trader = new QuikTrader(Path.Text);

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

IvanB

Фотография
Дата: 15.08.2013
Ответить


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

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

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

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

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

Bond

Фотография
Дата: 15.08.2013
Ответить


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

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

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

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

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy