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

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


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

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

Tags:


Thanks:


1 2 3  > >>
aspirant

Avatar
Date: 3/11/2011
Reply


skuvv: Почему рекваест тайп фиксированный? Посмотрю в документации, спасибо за то, что обратил внимание.

skuvv: 2) в PlazaStreamManager void Run() Не обрабатывает состояния типа DS_STATE_ERROR или DS_STATE_CLOSE, те в случае чего будет затык и поток будет висеть закрытым или с ошибкой. Я для себя брал реализацию с примера(могу выложить если что) Эти состояния обрабатываются методом PlazaStream.Poll(CP2ConnectionClass connection). См. строчку 174

item.Stream.Poll(item.Connection);

Я тоже брал реализацию с примера[smile]. При тесте некоторые потоки открывались не с первого раза: затыков не было.

Thanks:

skuvv

Avatar
Date: 3/11/2011
Reply


aspirant: Я тоже брал реализацию с примера[smile]. При тесте некоторые потоки открывались не с первого раза: затыков не было. Тогда все ок [smile]

Thanks:

skuvv

Avatar
Date: 3/17/2011
Reply


Вопрос по _PlazaTrader.StartListeners() Каким образом планируется добавлять потоки? Сейчас по общему типу PlazaMarketData. Не лучше ли явно задавать (StreamName,TableName,TRequestType) ? допустим все StreamName в списке - просто выбираем из enum списке, потом на основе выбронного StreamName, выбираем из Dictionary<enum StreamName,enum TableName> выбираем TableName подготавлием метаданные(default загатовку для соответсвующей TableName) и подписываем поток. StreamName и TableName подготовить не проблема и народу понятно по документации будет, что где. PS Средней руки юзер типа меня не осилит процесс подписки(то что идет внутри StartListeners()), слишком замудренно [biggrin]

Thanks:

skuvv

Avatar
Date: 3/17/2011
Reply


С выбором Dictionary я ошибся... Тогда как вариант - единый enum список с названиями типа StreamName_TableName. Чтото Например FORTS_FUTTRADE_REPL_orders_log А уже на приеме парсить сроку, все стримы оканчиваются на REPL.

Thanks:

aspirant

Avatar
Date: 3/17/2011
Reply


skuvv: Вопрос по _PlazaTrader.StartListeners()

Это был пока черновой вариант. Сегодня появились мысли, как все это сделать попроще. Надеюсь выложить новую версию с комментариями в ближайшие дни.

Thanks:

aspirant

Avatar
Date: 3/18/2011
Reply


aspirant: Сегодня появились мысли, как все это сделать попроще.

Только что залил коммит:

  1. Удалил всякий мусор (PlazaDataBuffer, PlazaColumnSet)
  2. Переименовал PlazaTable в PlazaSystemTable.
  3. Добавил класс PlazaTable для клиентской подписки к потокам. Внутри него есть массив PlazaRecord[], в который попадают данные из потоков.
  4. Добавил в PlazaTrader метод public void StartListeners(params PlazaTable[] tables) для подписки на любые таблицы. Вот код клиентской подписки к двум потокам:
var optSessionTable = new PlazaTable(PlazaColumns.OptionSessionContents);
var rtsIndexTable = new PlazaTable(PlazaColumns.RtsIndex);
_plazaTrader.StartListeners(rtsIndexTable, optSessionTable);

В обоих случаях запрашиваются все колонки (поля) таблиц потоков Плазы. Если нужны не все колонки, можно использовать другой конструктор PlazaTable, в котором есть параметр IEnumerable<PlazaColumn> columns. Данные отлавливаются в событии public event Action<PlazaRecord[]> DataReceived; класса PlazaTable

Теперь насчет метода public void StartListeners(PlazaMarketData marketData). Он нужен для перегонки данных потоков в стандартные объекты, например создания коллекций инструментов и т.д., и поэтому нам необходимо контроллировать, какие подписки создаются и с каким набором колонок (полей). Любые другие предложения приветствуются.

Thanks:

skuvv

Avatar
Date: 3/18/2011
Reply


Я это и имел ввиду[thumbup] в блоке ```

		foreach (var fieldInfo in this.GetType().GetFields().Where(x => x.FieldType == typeof(PlazaColumn)))
		{
			if (!(fieldInfo.Name == "ReplId" || fieldInfo.Name == "ReplRev" || fieldInfo.Name == "ReplAct"))
				result.Add((PlazaColumn)fieldInfo.GetValue(this));
		}
В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep
Thanks:

aspirant

Avatar
Date: 3/18/2011
Reply


skuvv: В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep

Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные:

this.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true);

Я только что залил исправление.

При тестировании нужно будет проверить каждый класс в папке Metadata (создать из них таблицы Плазы). Я, когда тестировал алгоритм подключения к потокам, тоже натыкался на пару схожих ошибок.

Thanks:

skuvv

Avatar
Date: 3/18/2011
Reply


aspirant:

skuvv: В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep

Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные:

this.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true);

> 
> Я только что залил исправление.
Не заметил ночью [biggrin] 
> При тестировании нужно будет проверить каждый класс в папке Metadata (создать из них таблицы Плазы).  Я, когда тестировал алгоритм подключения к потокам, тоже натыкался на пару схожих ошибок.
Займусь этим

Thanks:

skuvv

Avatar
Date: 3/18/2011
Reply


потоки FuturesAggregation не работают(не получают данные после выхода в онлайн режим), в логах клиента error: есть подозрение на <mark>lifenumber</mark> метатаблицы

2011-03-18 15:28:05.305;p2mq-cli;;MQ library started. 2011-03-18 15:28:05.309;p2repl-cli;;Client replication library started 2011-03-18 15:28:05.321;p2mq-cli;;Socket connected;conn 0x911DC14;host 'localhost';port 4001 2011-03-18 15:28:05.323;p2mq-cli;;Connection 0x911DB30 connected; connID 1 2011-03-18 15:28:07.085;p2mq-cli;;Socket connected;conn 0x9139B64;host '127.0.0.1';port 4001 2011-03-18 15:28:07.087;p2mq-cli;;Connection 0x9139A80 connected; connID 2 2011-03-18 15:28:07.096;p2repl-cli;;Stream created;stream 0xA442FA8 2011-03-18 15:28:07.096;P2ReplStorage;;Revs were inited; stream 0x0; cnt 1 2011-03-18 15:28:07.096;P2ReplStorage;; tbl_idx 0; cur_rev 1 2011-03-18 15:28:07.097;P2ReplStorage;;Basic policy created;stream 0x0,policy 0xA440EB8 2011-03-18 15:28:07.116;p2repl-cli;;Stream opening started;stream 0xA442FA8,type 2,name 'FORTS_FUTAGGR5_REPL',server_addr 'FINTER_FORTS3.inter_futaggr5' 2011-03-18 15:28:07.135;p2repl-cli;;Stream opened;stream 0xA442FA8;channel 0x4CF4F0D1358 2011-03-18 15:28:07.135;P2ReplStorage;;Revs were cleared after lifenum change; stream 0xA442FA8; cnt 1 2011-03-18 15:28:07.135;P2ReplStorage;; tbl_idx 0; cur_rev 0 2011-03-18 15:28:07.140;p2repl-cli;;CLOSE message posted;stream 0xA442FA8 2011-03-18 15:28:07.142;p2repl-cli;error;p2err 40962=0xA002 - 'REPL:OBJECT_CHANGED__';Stream state was changed;stream 0xA442FA8 2011-03-18 15:28:07.142;p2repl-cli;error;p2err 40962=0xA002 - 'REPL:OBJECT_CHANGED__';Couldn't start scheme setting (auto);stream 0xA442FA8 2011-03-18 15:28:07.143;P2ReplStorage;;Basic policy deleted;stream 0xA442FA8,policy 0xA440EB8 2011-03-18 15:28:07.148;P2ReplStorage;;Revs were inited; stream 0x0; cnt 1 2011-03-18 15:28:07.148;P2ReplStorage;; tbl_idx 0; cur_rev 2 2011-03-18 15:28:07.148;P2ReplStorage;;Basic policy created;stream 0x0,policy 0xA448968 2011-03-18 15:28:07.169;p2repl-cli;;Stream opening started;stream 0xA442FA8,type 2,name 'FORTS_FUTAGGR5_REPL',server_addr 'FINTER_FORTS3.inter_futaggr5' 2011-03-18 15:28:07.189;p2repl-cli;;Stream opened;stream 0xA442FA8;channel 0x4D04F0D1358 2011-03-18 15:28:07.190;p2repl-cli;;Scheme setting started;stream 0xA442FA8 2011-03-18 15:28:07.209;p2repl-cli;;Scheme is set;stream 0xA442FA8;channel 0x4D04F0D1358 2011-03-18 15:28:07.209;p2repl-cli;;Statistics module for table 'orders_aggr' was successfully registered 2011-03-18 15:28:07.210;p2repl-cli;;Statistics was registered;stream name FORTS_FUTAGGR5_REPL 2011-03-18 15:28:07.213;p2repl-cli;;Data requested;stream 0xA442FA8;channel 0x4D04F0D1358;session 0 2011-03-18 15:28:07.232;p2repl-cli;;DATA message received;stream 0xA442FA8 2011-03-18 15:28:07.232;p2repl-cli;;Stream is on-line;stream 0xA442FA8

Thanks:
1 2 3  > >>

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

loading
clippy