aspirant
|
Дата: 29.03.2011
|
|
|
|
|
[quote=Mikhail Sukhov;7111]1. Давай еще раз обсудим. С точки зрения практики - зачем это нужно?[/quote]
Сегодня думал на эту тему. Пожалуй, действительно ты прав: нужно упростить систему. Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - [b]все[/b] потоки фильтруются по этим двум бумагам. Я правильно понял? Вопрос: события, связанные с приходом данных (DataInserted, DataDeleted и т.д.), перекидываю из PlazaListener в PlazaTable? Или всё в PlazaTrader, и добавляю в события первым параметром PlazaTable, чтобы можно было различать, из какой таблицы пришли данные? Больше нравится первое.
[quote=Mikhail Sukhov;7111]2. Хм, а почему бы просто не оставить как есть сейчас?[/quote]
Сейчас и для клиентского кода и для стандартных потоков единый механизм - подписка через PlazaListener. Если этот класс уйдет, нужно будет делать набор дополнительный набор стандартных таблиц, чтобы пользователь их не видел и не мог поменять набор колоннок.
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 29.03.2011
[quote=aspirant;7146]
Сейчас и для клиентского кода и для стандартных потоков единый механизм - подписка через PlazaListener. Если этот класс уйдет, нужно будет делать набор дополнительный набор стандартных таблиц, чтобы пользователь их не видел и не мог поменять набор колоннок.[/quote]
Можно и не убирать. Мне вообще нравиться вот такой вариант юзер кода:
[code]var trader = new PlazaTrader();
trader.UsdOnlineListener.DataInserted += record =>
;
trader.StartListener(trader.UsdOnlineListener);
...
trader.StopListener(trader.UsdOnlineListener);
[/code]
И для стандартных таблиц можно так же делать:
[code]public override StartExport()
{
StartListener(VcbFutureListener, CommonFutureListener, CommonOptionListener,...);
}[/code]
|
|
|
|
Спасибо:
|
|
|
|
|
|
aspirant
|
Дата: 30.03.2011
[quote=Mikhail Sukhov;7148]
Можно и не убирать. Мне вообще нравиться вот такой вариант юзер кода:
[code]var trader = new PlazaTrader();
trader.UsdOnlineListener.DataInserted += record =>
;
trader.StartListener(trader.UsdOnlineListener);
...
trader.StopListener(trader.UsdOnlineListener);
[/code]
[/quote]
То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?
[quote]Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - все потоки фильтруются по этим двум бумагам.[/quote]
Я правильно понял?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2011
[quote=aspirant;7158]То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?
[/quote]
Хм, насчет создания не знаю. Можно и оставить публичным конструктор. На всякий случай.
Каждому [b]члену PlazaTableRegistry[/b].
[quote=aspirant;7158]
[quote]Тем более что фильтры будут носить глобальный характер, т.е. вызвал RegisterSecurity(Security security) для какой-то бумаги, и все потоки сразу стали фильтровать только по ней, добавил еще одну - все потоки фильтруются по этим двум бумагам.[/quote]
Я правильно понял?[/quote]
RegisterSecurity фильтрует только те потоки, которые относяться к инструментам. На потоки со сделками или стаканами он никак не влияет. То же самое справедливо и для других RegisterXXX
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 30.03.2011
[quote=Mikhail Sukhov;7163]RegisterSecurity фильтрует только те потоки, которые относяться к инструментам. На потоки со сделками или стаканами он никак не влияет. То же самое справедливо и для других RegisterXXX[/quote]
И сразу код, как бы это можно было фильтровать:
[code]var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);[/code]
Соответственно, реализация методов ITrader.RegisterXXX так же вызывает внутри себя AddFilter.
|
|
|
|
Спасибо:
|
|
|
|
|
|
aspirant
|
Дата: 30.03.2011
[quote=Mikhail Sukhov;7171]
И сразу код, как бы это можно было фильтровать:
[code]var usdOnlineListener = trader.UsdOnlineListener;
usdOnlineListener.AddFilter(rih1);
...
usdOnlineListener.RemoveFilter(rih1);[/code]
[/quote]
Залил. Посмотри.
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 31.03.2011
[quote=aspirant;7190]
Залил. Посмотри.
[/quote]
Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.
|
|
|
|
Спасибо:
|
|
|
|
|
|
aspirant
|
Дата: 31.03.2011
[quote=Mikhail Sukhov;7194]Отредактировал. Кое что поменял.[/quote]
Все понятно.
[quote=Mikhail Sukhov;7163][quote=aspirant;7158]То есть получается пользователь не сможет создавать объекты типа PlazaListener? И каждому классу-наследнику PlazaColumns (PlazaAggregationColumns и т.д.) внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener?
[/quote]
Хм, насчет создания не знаю. Можно и оставить публичным конструктор. На всякий случай.
Каждому [b]члену PlazaTableRegistry[/b].[/quote]
Вопрос: если мы оставляем конструктор публичным, и пользователь сможет сам создавать объекты типа PlazaListener, зачем тогда создавать открытые переменные для каждого члена PlazaTableRegistry? Не будет ди это дублированием схожего функционала? Либо пользователь сам подписывается на потоки через свои объекты PlazaListener, либо мы выдаем ему строгий набор переменных и они получает информацию из потоков через наши открытые переменные?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 01.04.2011
[quote=aspirant;7220]
Вопрос: если мы оставляем конструктор публичным, и пользователь сможет сам создавать объекты типа PlazaListener, зачем тогда создавать открытые переменные для каждого члена PlazaTableRegistry? Не будет ди это дублированием схожего функционала? Либо пользователь сам подписывается на потоки через свои объекты PlazaListener, либо мы выдаем ему строгий набор переменных и они получает информацию из потоков через наши открытые переменные?
[/quote]
Мне нравиться второй вариант.
|
|
|
|
Спасибо:
|
|
|
|
|
|
skuvv
|
Дата: 01.04.2011
Сделайте плиз OnNewDataFromPosition, у меня не получается [confused]
|
|
|
|
Спасибо:
|
|
|
|
|