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


Комментарии и предложения
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:


1 2 3  > >>
aspirant

Avatar
Date: 3/11/2011
Reply


skuvv Go to
Почему рекваест тайп фиксированный?

Посмотрю в документации, спасибо за то, что обратил внимание.

skuvv Go to

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

Эти состояния обрабатываются методом PlazaStream.Poll(CP2ConnectionClass connection). См. строчку 174
Code
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 Go to
Вопрос по _PlazaTrader.StartListeners()


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

aspirant

Avatar
Date: 3/18/2011
Reply


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


Только что залил коммит:
  1. Удалил всякий мусор (PlazaDataBuffer, PlazaColumnSet)
  2. Переименовал PlazaTable в PlazaSystemTable.
  3. Добавил класс PlazaTable для клиентской подписки к потокам. Внутри него есть массив PlazaRecord[], в который попадают данные из потоков.
  4. Добавил в PlazaTrader метод public void StartListeners(params PlazaTable[] tables) для подписки на любые таблицы. Вот код клиентской подписки к двум потокам:
    Code
    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]
в блоке
Code

            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 Go to
В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep


Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные:
Code
this.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true);


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

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

Thanks:

skuvv

Avatar
Date: 3/18/2011
Reply


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


Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные:
Code
this.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true);


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

Не заметил ночью [biggrin]
Quote:

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

Займусь этим

Thanks:

skuvv

Avatar
Date: 3/18/2011
Reply


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

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