Комментарии и предложения
Atom
11.03.2011


Заметил пару нюансов по PlazaTrader:
1)
Код

_plazaStreamManager = new PlazaStreamManager(_plazaConnectionPool, TRequestType.RT_COMBINED_DYNAMIC, 1000);

Почему рекваест тайп фиксированный? надо конкретно задавать, например у меня так было:
Цитата:

"FORTS_FUTAGGR20_REPL" - RT_REMOTE_ONLINE
"FORTS_FUTTRADE_REPL" - RT_REMOTE_ONLINE
"FORTS_FUTINFO_REPL" - RT_COMBINED_DYNAMIC
"FORTS_FUTCOMMON_REPL" - RT_REMOTE_ONLINE
"FORTS_POS_REPL" - RT_COMBINED_DYNAMIC
"FORTS_PART_REPL" - RT_COMBINED_DYNAMIC
"FORTS_VM_REPL" - RT_COMBINED_DYNAMIC

Допустим если FORTS_FUTCOMMON_REPL задать в RT_COMBINED_DYNAMIC, то при реконнекте будет перекачиваться весь поток заново.
+Revision тоже надо указывать в некоторых потоках.
2) в PlazaStreamManager void Run()
Не обрабатывает состояния типа DS_STATE_ERROR или DS_STATE_CLOSE, те в случае чего будет затык и поток будет висеть закрытым или с ошибкой.
Я для себя брал реализацию с примера(могу выложить если что)
PS У меня несколько сместились приоритеты - придется задержаться на квике, но постораюсь не пропадать.

Теги:


Спасибо:


<< < 2 3 4 5 6  >
aspirant

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


Mikhail Sukhov Перейти
1. Давай еще раз обсудим. С точки зрения практики - зачем это нужно?


Сегодня думал на эту тему. Пожалуй, действительно ты прав: нужно упростить систему. Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - все потоки фильтруются по этим двум бумагам. Я правильно понял? Вопрос: события, связанные с приходом данных (DataInserted, DataDeleted и т.д.), перекидываю из PlazaListener в PlazaTable? Или всё в PlazaTrader, и добавляю в события первым параметром PlazaTable, чтобы можно было различать, из какой таблицы пришли данные? Больше нравится первое.

Mikhail Sukhov Перейти
2. Хм, а почему бы просто не оставить как есть сейчас?

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

Mikhail Sukhov

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


aspirant Перейти

Сейчас и для клиентского кода и для стандартных потоков единый механизм - подписка через PlazaListener. Если этот класс уйдет, нужно будет делать набор дополнительный набор стандартных таблиц, чтобы пользователь их не видел и не мог поменять набор колоннок.


Можно и не убирать. Мне вообще нравиться вот такой вариант юзер кода:

Код
var trader = new PlazaTrader();

trader.UsdOnlineListener.DataInserted += record =>
{
....
};

trader.StartListener(trader.UsdOnlineListener);

...

trader.StopListener(trader.UsdOnlineListener);


И для стандартных таблиц можно так же делать:

Код
public override StartExport()
{
StartListener(VcbFutureListener, CommonFutureListener, CommonOptionListener,...);
}
Спасибо:

aspirant

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


Mikhail Sukhov Перейти

Можно и не убирать. Мне вообще нравиться вот такой вариант юзер кода:

Код
var trader = new PlazaTrader();

trader.UsdOnlineListener.DataInserted += record =>
{
....
};

trader.StartListener(trader.UsdOnlineListener);

...

trader.StopListener(trader.UsdOnlineListener);



То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?

Цитата:
Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - все потоки фильтруются по этим двум бумагам.


Я правильно понял?
Спасибо:

Mikhail Sukhov

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


aspirant Перейти
То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?


Хм, насчет создания не знаю. Можно и оставить публичным конструктор. На всякий случай.

Каждому члену PlazaTableRegistry.

aspirant Перейти

Цитата:
Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - все потоки фильтруются по этим двум бумагам.


Я правильно понял?


RegisterSecurity фильтрует только те потоки, которые относяться к инструментам. На потоки со сделками или стаканами он никак не влияет. То же самое справедливо и для других RegisterXXX
Спасибо:

Mikhail Sukhov

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


Mikhail Sukhov Перейти
RegisterSecurity фильтрует только те потоки, которые относяться к инструментам. На потоки со сделками или стаканами он никак не влияет. То же самое справедливо и для других RegisterXXX


И сразу код, как бы это можно было фильтровать:

Код
var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);


Соответственно, реализация методов ITrader.RegisterXXX так же вызывает внутри себя AddFilter.
Спасибо:

aspirant

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


Mikhail Sukhov Перейти

И сразу код, как бы это можно было фильтровать:

Код
var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);



Залил. Посмотри.
Спасибо:

Mikhail Sukhov

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


aspirant Перейти

Залил. Посмотри.


Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.
Спасибо:

aspirant

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


Mikhail Sukhov Перейти
Отредактировал. Кое что поменял.

Все понятно.

Mikhail Sukhov Перейти
aspirant Перейти
То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?


Хм, насчет создания не знаю. Можно и оставить публичным конструктор. На всякий случай.

Каждому члену PlazaTableRegistry.


Вопрос: если мы оставляем конструктор публичным, и пользователь сможет сам создавать объекты типа PlazaListener, зачем тогда создавать открытые переменные для каждого члена PlazaTableRegistry? Не будет ди это дублированием схожего функционала? Либо пользователь сам подписывается на потоки через свои объекты PlazaListener, либо мы выдаем ему строгий набор переменных и они получает информацию из потоков через наши открытые переменные?
Спасибо:

Mikhail Sukhov

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


aspirant Перейти

Вопрос: если мы оставляем конструктор публичным, и пользователь сможет сам создавать объекты типа PlazaListener, зачем тогда создавать открытые переменные для каждого члена PlazaTableRegistry? Не будет ди это дублированием схожего функционала? Либо пользователь сам подписывается на потоки через свои объекты PlazaListener, либо мы выдаем ему строгий набор переменных и они получает информацию из потоков через наши открытые переменные?


Мне нравиться второй вариант.
Спасибо:

skuvv

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


Сделайте плиз OnNewDataFromPosition, у меня не получается [confused]
Спасибо:
<< < 2 3 4 5 6  >

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

loading
clippy