Websocket как сделать? - страница 23

 
Алексей Барбашин:

Так ты высказывай как бы хотелось, чтобы ты сам получал удовольствие от процесса. Только пойми: у сервера нельзя запросить конкретную свечу, можно только диапазон свечей за выбранные даты. Так что думай в этом направлении.

Тогда пусть лучше будет запись данных в файл. Не пойму как добавить папку

 
Нашел, добавил
 
Maxim Kuznetsov:

а можно вмешаться ?

класс/интерфейс со стороны MT никто не хочет сделать заранее ??

то есть дать конкретное ТЗ которое обсуждается и которое подлежит исполнению.

ну давайте начнём:


class Hibou {

Hidou(string url=HIBOU_WS_URL);  // думаю почти бесспорно

~Hibou();

void DoEvent(); // веб-сокеты асинхронны, а может в тредах реализуем, будем дёргать при первой возможности

int State(); // некое текущее состояние

/// хенды по событиям протокола, вызываемые из DoEvevnt

virtual void OnConnect();  //  соеденились - зашибись

virtual void OnMessage(string json); // получили внятный Event

/// и так далее - заказчик представляет как он намерен использовать интерфейс.

/// если он этого не знает, мы за него ничего придумать не можем, клиника в руках пациентов

}

Не можно! А НУЖНО! Чем больше заинтересованных подключится, тем лучше получится!

Обычно On[Event|Connect|Message] и так далее используются для оповещения того, что событие произошло, но мы же не имеем возможности оповещать МТ, такой событийной модели к сожалению нет, мы не можем передавать сообщения в МТ(((

Поэтому у нас остается только метод периодического опроса шарпа со стороны mql, например по мизерному таймеру. (((

И чтобы все происходило корректно... Каждый кто читал справку по mql не раз замечал такое выражение что событие становится в очередь, да и разработчики, в том числе и Ренат, буквально на каждом шагу нам говорят что все события терминала - синхронные, и обрабатываются в порядке очереди, и все системные события и события терминала помещаются в эту самую очередь и последовательно обрабатываются. Именно по этой причине я в первой же редакции и предложил использовать тот же самый механизм обмена: очередь.

 

Подключаем к нашему проекту библиотеку WebSocket4Net из пакетов Nuget.

Описываем класс сокета. Добавим ему свойство IsOpen , которое будет отвечать за то, что сокет открыт.

Буквально слегка оформляет класс сокета, нужные using прописываем через контекстные подсказки.


Далее дорабатываем глобальный менеджер. В его статическом конструкторе сразу будем создавать экземпляр сокета, чтобы не забывать о нем.


Я прислушался к Максиму и добавил в глобальный менеджер метод соединения с конкретным брокером. Это будет удобно если будет развитие под других брокеров

Дорабатываем web-socket, создаем обработчики событий самого сокета.


 
Алексей Барбашин:


Я прислушался к Максиму и добавил в глобальный менеджер метод соединения с конкретным брокером. Это будет удобно если будет развитие под других брокеров

вы видимо слушали третьим глазом :-) 

 
Maxim Kuznetsov:

вы видимо слушали третьим глазом :-) 

Макс, ты предложил создать класс, но у нас для общих методов есть класс GlobalManager, а создавать отдельный специфический класс я пока не вижу смысла.

Что касается интерфейса для связи с МТ, то в дальнейшем у нас будет класс ConnectorMQL, когда мы протестируем все наши методы в консольном режиме.

Если я чтото не верно понял то поправь меня, попробуй донести свою мысль немного иначе, не делай поспешных выводов.

P.S. Хотя конечно можно не только универсальную точку входа типа ConnectorMQL сделать, а реально отдельный класс HuobiMQL, который будет отправлять в глобальный менеждер специализированные команды.
 
Алексей Барбашин:

Что-то у меняsslProtocols не видит


 
Fedor Arkhipov:

Что-то у меняsslProtocols не видит


Да вроде все нормально, он же не подчеркнут. А вот точку с запятой в конце строки поставить нужно.

 

Добавил папку Points, а в ней сделал класс HuobiMQL


В события открытия и закрытия сокета добавил установку свойства состояния сокета


 
Алексей Барбашин:

Макс, ты предложил создать класс, но у нас для общих методов есть класс GlobalManager, а создавать отдельный специфический класс я пока не вижу смысла.

Что касается интерфейса для связи с МТ, то в дальнейшем у нас будет класс ConnectorMQL, когда мы протестируем все наши методы в консольном режиме.

Если я чтото не верно понял то поправь меня, попробуй донести свою мысль немного иначе, не делай поспешных выводов.

к стороне проектирования: всё гораздо проще - @Fedor Arkhipov (автор топика и инициатор) обяъвляет "я хочу чтобы было именно так, а конкретно сейчас нужен Hibou" . И мелкие/согласуемые коррективы от нас убогих :-) Потому что именно он знает зачем вся затея.

мне например неясно нахзначение многих классов, но это мои тараканы... 

блин, вам надо, вот и получите в максимально компактном виде вещь - обратились,получили внятный ответ и даже поток, и разобрались с ошибками. а Классов и Методов можно напердолить сотню иерархий :-)

Причина обращения: