aspirant
|
Дата: 11.03.2011
skuvv Почему рекваест тайп фиксированный? Посмотрю в документации, спасибо за то, что обратил внимание. skuvv 2) в PlazaStreamManager void Run() Не обрабатывает состояния типа DS_STATE_ERROR или DS_STATE_CLOSE, те в случае чего будет затык и поток будет висеть закрытым или с ошибкой. Я для себя брал реализацию с примера(могу выложить если что)
Эти состояния обрабатываются методом PlazaStream.Poll(CP2ConnectionClass connection). См. строчку 174 Кодitem.Stream.Poll(item.Connection); Я тоже брал реализацию с примера[smile]. При тесте некоторые потоки открывались не с первого раза: затыков не было.
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 11.03.2011
aspirant Я тоже брал реализацию с примера[smile]. При тесте некоторые потоки открывались не с первого раза: затыков не было.
Тогда все ок [smile]
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 17.03.2011
Вопрос по _PlazaTrader.StartListeners() Каким образом планируется добавлять потоки? Сейчас по общему типу PlazaMarketData. Не лучше ли явно задавать (StreamName,TableName,TRequestType) ? допустим все StreamName в списке - просто выбираем из enum списке, потом на основе выбронного StreamName, выбираем из Dictionary<enum StreamName,enum TableName> выбираем TableName подготавлием метаданные(default загатовку для соответсвующей TableName) и подписываем поток. StreamName и TableName подготовить не проблема и народу понятно по документации будет, что где. PS Средней руки юзер типа меня не осилит процесс подписки(то что идет внутри StartListeners()), слишком замудренно [biggrin]
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 17.03.2011
С выбором Dictionary я ошибся... Тогда как вариант - единый enum список с названиями типа StreamName_TableName. Чтото Например FORTS_FUTTRADE_REPL_orders_log А уже на приеме парсить сроку, все стримы оканчиваются на REPL.
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 17.03.2011
skuvv Вопрос по _PlazaTrader.StartListeners() Это был пока черновой вариант. Сегодня появились мысли, как все это сделать попроще. Надеюсь выложить новую версию с комментариями в ближайшие дни.
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 18.03.2011
|
|
|
|
aspirant Сегодня появились мысли, как все это сделать попроще. Только что залил коммит: - Удалил всякий мусор (PlazaDataBuffer, PlazaColumnSet)
- Переименовал PlazaTable в PlazaSystemTable.
- Добавил класс PlazaTable для клиентской подписки к потокам. Внутри него есть массив PlazaRecord[], в который попадают данные из потоков.
- Добавил в 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). Он нужен для перегонки данных потоков в стандартные объекты, например создания коллекций инструментов и т.д., и поэтому нам необходимо контроллировать, какие подписки создаются и с каким набором колонок (полей). Любые другие предложения приветствуются.
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 18.03.2011
Я это и имел ввиду[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
|
|
Спасибо:
|
|
|
|
|
aspirant
|
Дата: 18.03.2011
skuvv В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные: Кодthis.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true); Я только что залил исправление. При тестировании нужно будет проверить каждый класс в папке Metadata (создать из них таблицы Плазы). Я, когда тестировал алгоритм подключения к потокам, тоже натыкался на пару схожих ошибок.
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 18.03.2011
aspirant skuvv В некоторых таблицах добавляются одинаковые поля, например таблица FuturesSessionContents, поле MinStep Потому что тот (не я [biggrin]), кто расписывал класс PlazaFuturesSessionContentsColumns, забыл исправить название поля Плазы, когда копировал переменные: Кодthis.StepPrice = new PlazaColumn(PlazaTableRegistry.FutSessionContents, "min_step", typeof(decimal), "d16.5", true); Я только что залил исправление. Не заметил ночью [biggrin] Цитата: При тестировании нужно будет проверить каждый класс в папке Metadata (создать из них таблицы Плазы). Я, когда тестировал алгоритм подключения к потокам, тоже натыкался на пару схожих ошибок.
Займусь этим
|
|
Спасибо:
|
|
|
|
|
skuvv
|
Дата: 18.03.2011
|
|
|
|
потоки FuturesAggregation не работают(не получают данные после выхода в онлайн режим), в логах клиента error: есть подозрение на lifenumber метатаблицы Цитата: 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
|
|
Спасибо:
|
|
|
|