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

Комментарии и предложения
Atom
3/11/2011


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

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

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

"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 У меня несколько сместились приоритеты - придется задержаться на квике, но постораюсь не пропадать.

Tags:


Thanks:


<< < 2 3 4 5 6  >
aspirant

Avatar
Date: 3/29/2011
Reply


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


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

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

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

Mikhail Sukhov

Avatar
Date: 3/29/2011
Reply


aspirant Go to

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


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

Code
var trader = new PlazaTrader();

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

trader.StartListener(trader.UsdOnlineListener);

...

trader.StopListener(trader.UsdOnlineListener);


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

Code
public override StartExport()
{
StartListener(VcbFutureListener, CommonFutureListener, CommonOptionListener,...);
}
Thanks:

aspirant

Avatar
Date: 3/30/2011
Reply


Mikhail Sukhov Go to

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

Code
var trader = new PlazaTrader();

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

trader.StartListener(trader.UsdOnlineListener);

...

trader.StopListener(trader.UsdOnlineListener);



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

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


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

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


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


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

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

aspirant Go to

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


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


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

Mikhail Sukhov

Avatar
Date: 3/30/2011
Reply


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


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

Code
var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);


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

aspirant

Avatar
Date: 3/30/2011
Reply


Mikhail Sukhov Go to

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

Code
var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);



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

Mikhail Sukhov

Avatar
Date: 3/31/2011
Reply


aspirant Go to

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


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

aspirant

Avatar
Date: 3/31/2011
Reply


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

Все понятно.

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


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

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


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

Mikhail Sukhov

Avatar
Date: 4/1/2011
Reply


aspirant Go to

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


Мне нравиться второй вариант.
Thanks:

skuvv

Avatar
Date: 4/1/2011
Reply


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

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

loading
clippy