﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">PlazaTable, PlazaSystemTable - что-то одно.</title>
  <id>~/topic/1459/plazatable-plazasystemtable---chto-to-odno_/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-23T10:25:38Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1459" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/6974/</id>
    <title type="text"> Интересно, а зачем потоку еще раз указывать название, если до этого уже сказали через _dataStream.S...</title>
    <published>2011-03-23T13:15:52Z</published>
    <updated>2011-03-23T13:15:52Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6966/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6962/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Интересно, а зачем потоку еще раз указывать название, если до этого уже сказали через _dataStream.StreamName&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Mea culpa.  Вот правильный кусок кода:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_dataStream.StreamName = &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;;&lt;br /&gt;// вторым параметром указывается название dbScheme, можно &amp;quot;&amp;quot;, если dbScheme:CustReplScheme (дефолтная)&lt;br /&gt;_dataStream.TableSet.InitFromIni2(_configFileName, &amp;quot;&amp;quot;);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Интересно, а можно в одном файле сохранять все схемы?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6966/</id>
    <title type="text"> Интересно, а зачем потоку еще раз указывать название, если до этого уже сказали через _dataStream.S...</title>
    <published>2011-03-23T08:54:56Z</published>
    <updated>2011-03-23T08:54:56Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6962/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Интересно, а зачем потоку еще раз указывать название, если до этого уже сказали через _dataStream.StreamName&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Mea culpa.  Вот правильный кусок кода:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_dataStream.StreamName = &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;;&lt;br /&gt;// вторым параметром указывается название dbScheme, можно &amp;quot;&amp;quot;, если dbScheme:CustReplScheme (дефолтная)&lt;br /&gt;_dataStream.TableSet.InitFromIni2(_configFileName, &amp;quot;&amp;quot;);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6962/</id>
    <title type="text"> У нее есть внутреннее знание В следующем коде произойдет исключение, если хотя бы одна из колонок у...</title>
    <published>2011-03-23T08:06:54Z</published>
    <updated>2011-03-23T08:06:54Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6960/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;У нее есть внутреннее знание [smile] В следующем коде произойдет исключение, если хотя бы одна из колонок указана неправильно:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_dataStream.TableSet.InitFromIni2(_configFileName, &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Интересно, а зачем потоку еще раз указывать название, если до этого уже сказали через _dataStream.StreamName</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6960/</id>
    <title type="text">В итоге то к чему пришли? Пришли, что это будет в списке второстепенных задач по потокам, но я сдела...</title>
    <published>2011-03-23T05:22:00Z</published>
    <updated>2011-03-23T05:22:00Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6958/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;В итоге то к чему пришли?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Пришли, что это будет в списке второстепенных задач по потокам, но я сделал сразу, потому что это оказалось быстрее, чем я предполагал.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6958/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А как Плаза отпределяет, что для потока FORTS_OPTCOMMON_REPL нужен вот тот файл ini а не какой то другой?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;У нее есть внутреннее знание [smile] В следующем коде произойдет исключение, если хотя бы одна из колонок указана неправильно:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_dataStream.TableSet.InitFromIni2(_configFileName, &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6958/</id>
    <title type="text">А стоит ли давать так делать? Вроде обсуждали про пул подключений для распараллеливания потоков. Я, ...</title>
    <published>2011-03-22T20:13:45Z</published>
    <updated>2011-03-22T20:13:45Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6936/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6896/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А стоит ли давать так делать?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вроде обсуждали про пул подключений для распараллеливания потоков.  Я, когда писал PlazaStreamManager, сразу это и сделал.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В итоге то к чему пришли?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6936/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6896/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;4. А как тогда потоки стартую если названия из не указывается?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот ini-файл для таблицы FORTS_OPTCOMMON_REPL\common (колонки не все)&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&amp;#91;dbscheme:CustReplScheme&amp;#93;&lt;br /&gt;table=common&lt;br /&gt;&lt;br /&gt;; Общая информация по сессии&lt;br /&gt;&amp;#91;table:CustReplScheme:common&amp;#93;&lt;br /&gt;field=replID,i8&lt;br /&gt;field=replRev,i8&lt;br /&gt;field=replAct,i8&lt;br /&gt;field=isin_id,i4&lt;br /&gt;field=sess_id,i4&lt;br /&gt;field=best_sell,d16.5&lt;br /&gt;field=amount_sell,i4&lt;br /&gt;field=best_buy,d16.5&lt;br /&gt;field=amount_buy,i4&lt;br /&gt;field=price,d16.5&lt;br /&gt;field=trend,d16.5&lt;br /&gt;field=amount,i4&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А вот как инициализиурется поток в коде:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;_dataStream = new CP2DataStreamClass();&lt;br /&gt;_dataStream.StreamName = &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;; // название потока указывается в этой строчке.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А как Плаза отпределяет, что для потока FORTS_OPTCOMMON_REPL нужен вот тот файл ini а не какой то другой?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6936/</id>
    <title type="text"> Сама Плаза дает, тем более что для каждого потока создается отдельное подключение (CP2ConnectionCla...</title>
    <published>2011-03-22T12:25:05Z</published>
    <updated>2011-03-22T12:25:05Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6896/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6892/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Сама Плаза дает, тем более что для каждого потока создается отдельное подключение (CP2ConnectionClass) с уникальным именем (в соответствии с рекомендациями разработчиков). &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А стоит ли давать так делать?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вроде обсуждали про пул подключений для распараллеливания потоков.  Я, когда писал PlazaStreamManager, сразу это и сделал.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6896/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;4. А как тогда потоки стартую если названия из не указывается?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот ini-файл для таблицы FORTS_OPTCOMMON_REPL\common (колонки не все)&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&amp;#91;dbscheme:CustReplScheme&amp;#93;&lt;br /&gt;table=common&lt;br /&gt;&lt;br /&gt;; Общая информация по сессии&lt;br /&gt;&amp;#91;table:CustReplScheme:common&amp;#93;&lt;br /&gt;field=replID,i8&lt;br /&gt;field=replRev,i8&lt;br /&gt;field=replAct,i8&lt;br /&gt;field=isin_id,i4&lt;br /&gt;field=sess_id,i4&lt;br /&gt;field=best_sell,d16.5&lt;br /&gt;field=amount_sell,i4&lt;br /&gt;field=best_buy,d16.5&lt;br /&gt;field=amount_buy,i4&lt;br /&gt;field=price,d16.5&lt;br /&gt;field=trend,d16.5&lt;br /&gt;field=amount,i4&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А вот как инициализиурется поток в коде:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;_dataStream = new CP2DataStreamClass();&lt;br /&gt;_dataStream.StreamName = &amp;quot;FORTS_OPTCOMMON_REPL&amp;quot;; // название потока указывается в этой строчке.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Меняем название потока, и с той же схемой инициализируем таблицу с таким же именем из другого потока:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;_dataStream = new CP2DataStreamClass();&lt;br /&gt;_dataStream.StreamName = &amp;quot;FORTS_FUTCOMMON_REPL&amp;quot;;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Конечно, эти две таблицах не полностью соответствуют друг другу, но при желании (что я и сделал), можно создать выборочную схему с одинаковым набором колоннок.&lt;br /&gt;&lt;br /&gt;По поводу остального напишу вечером.  Кстати, позавчера вечером начал мапить объекты из потоков (см. метод PlazaTrader.OnNewDataFromOptionSessionContents())</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6896/</id>
    <title type="text"> Сама Плаза дает, тем более что для каждого потока создается отдельное подключение (CP2ConnectionCla...</title>
    <published>2011-03-20T20:45:01Z</published>
    <updated>2011-03-20T20:45:19Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6892/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Сама Плаза дает, тем более что для каждого потока создается отдельное подключение (CP2ConnectionClass) с уникальным именем (в соответствии с рекомендациями разработчиков). &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А стоит ли давать так делать?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6892/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6886/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;2. Ты опять мешаешь метаданные с Плаза потоками.&lt;br /&gt;&lt;br /&gt;Я бы написал так:&lt;br /&gt;&lt;br /&gt;[code]&lt;br /&gt;// в этот момент (можно запихнуть в статический конструктор PlazaTableRegistry)&lt;br /&gt;// сканируется директория на предмет определения схем, и если уже создана схема ввиде файла для OptionSession&lt;br /&gt;// то PlazaTableRegistry.OptionSession.Columns уже заполнен какими то колонками, исходя из файла&lt;br /&gt;var optSessionTable = PlazaTableRegistry.OptionSession;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вопросы: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Кто и в какой момент будет создавать эти схемы-файлы?&lt;br /&gt;&lt;li&gt;Получается нужно обыгрывать такой сценарий: клиент запустил PlazaTrader, создал подписку на таблицу 1 с 3 колонками, вышел из программы. Мы должны запомнить, что его подписка состоит из 3 колонок. Он снова запустил PlazaTrader, добавил в подписку еще одну колонку, вышел из программы.  Мы опять сохранили состояние. В таком случае нужно иметь в виду, что 1) родной формат схем-файлов Плазы не поддерживает сохранение параметров фильтрации и 2) название потока (FORTS_OPTINFO_REPL и т.д.) не указывается в файле, его нужно передавать в коде отдельно (кстати, почему так сделано, больше всего меня удивляет).  Придется либо запихивать и 1) и 2) в комментарии, либо сохранять все внутри XML, то есть однозначно клиенту эти файлы показывать не стоит.&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1. При первом обращении к PlazaTableRegistry они будут создаваться им, если файлов нет на диске. Если есть, то наоборот, их файлов будут считываться информация и заполняться PlazaTable.Columns тех таблиц, информация о которых присутствует на диске.&lt;br /&gt;&lt;br /&gt;2. Предлагаю сохранять файлы не по выходу из программы, а когда меняется коллекция PlazaTable.Columns.&lt;br /&gt;&lt;br /&gt;3. Фильтрацию (по инструменту) не нужно сохранять. Это динамическая информация и зависит от запущенных стратегий. Не запустил пользователь стратегию, данные не текут. Запустил, вызвал PlazaTrader.RegisterXXX - данные текут.&lt;br /&gt;&lt;br /&gt;4. А как тогда потоки стартую если названия из не указывается?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6892/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6886/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;тоесть мы метаданные готовим до того, как будет создан PlazaTrader и вызван Connect.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Почему это важно?  Речь идет о создании одного-двух десятков маленьких текстовиков, причем делаться это будет один раз при подписке на поток.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Потому что в реальном времени потоки же не изменить. Вроде как Plaza сканирует схемы и уже потом не поменять метаданные. Я ошибаюсь?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6892/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;b&gt;Еще важный момент:&lt;/b&gt; ты можешь добавить в класс PlazaTrader событие тип Unloading или Disposing, которые будет вызываться при выгрузке.  Это нужно для PlazaStreamManager: все потоки (plaza streams) вертятся в отдельных потоках (threads), и, если в клиентском коде явно не вызывать PlazaStreamManager.Dispose(), программа будет висеть в памяти, а данные по-прежнему будут сыпаться.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Сейчас просто создавай потоки с Thread.IsBackground = true.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6895/</id>
    <title type="text">Нужно определить минимальный набор, с которым можно прожить. Поскольку на один и тот же поток можно ...</title>
    <published>2011-03-20T20:32:38Z</published>
    <updated>2011-03-20T20:32:38Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6893/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6887/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Нужно определить минимальный набор, с которым можно прожить.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Поскольку на один и тот же поток можно подписываться несколько раз (см. мой предыдущий пост), может быть, мы сами будем подписываться на стандратняе потоки, чтобы можно было правильно мапить все объекты, а клиент пусть делает, что хочет?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Да, согласен. Но это все равно не избавляет от факта присутствия &amp;quot;лишних&amp;quot; (ExtensionInfo) колонок? Они необходимы, и их нужно экспортировать не со стороны пользовательского кода, а через конфигурирование метаданных.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6893/</id>
    <title type="text">Нужно определить минимальный набор, с которым можно прожить. Поскольку на один и тот же поток можно ...</title>
    <published>2011-03-20T19:49:26Z</published>
    <updated>2011-03-20T19:49:26Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6887/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Нужно определить минимальный набор, с которым можно прожить.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Поскольку на один и тот же поток можно подписываться несколько раз (см. мой предыдущий пост), может быть, мы сами будем подписываться на стандратняе потоки, чтобы можно было правильно мапить все объекты, а клиент пусть делает, что хочет?&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6892/</id>
    <title type="text">Но есть но. Приведу твой код: var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSession...</title>
    <published>2011-03-20T19:44:29Z</published>
    <updated>2011-03-20T19:44:53Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6886/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Но есть но. Приведу твой код:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSessionContents,&lt;br /&gt;    new&amp;#91;&amp;#93; { PlazaColumnRegistry.OptionSessionContents.Isin, PlazaColumnRegistry.OptionSessionContents.IsinId });&lt;br /&gt;_plazaTrader.StartListeners(optSessionTable);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1. Я не проверял но более чем уверен, что плаза не дает два раза создать поток по одной и той же таблице с разными полями.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Сама Плаза дает, тем более что для каждого потока создается отдельное подключение (CP2ConnectionClass) с уникальным именем (в соответствии с рекомендациями разработчиков).  Только что проверял:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;optSessionListener1_DataInserted: 28800;43882;0;RTS-6.11M150611CA 100000;151364&lt;br /&gt;optSessionListener2_DataInserted: 28800;43882;0;151331;88,66;8950,48;0;0;100000,00000;0;20101220000000000;20110615000000000;8975,37;151331;3274;151364;RI100000BF1;RTS-6.11M150611CA 100000;Июньский Марж.Амер.Call.100000 Фьюч.контр RTS-6.11;0;0,00000;0,00000;89065,00000;RTS;5,00000;1;2,84763;20110615000000000;89065,00000;115&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Правда раньше потоки хранились внутри PlazaStreamManager в словаре, и, если ключ явно не указывался, вместо ключа использовалось сочетание поток+таблица, поэтому два раза один и тот же поток, не указывая разные ключи, добавить было нельзя.  Сейчас я словарь переделал в простой список, в который можно добавлять потоки по одной и той же таблице.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6886/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;2. Ты опять мешаешь метаданные с Плаза потоками.&lt;br /&gt;&lt;br /&gt;Я бы написал так:&lt;br /&gt;&lt;br /&gt;[code]&lt;br /&gt;// в этот момент (можно запихнуть в статический конструктор PlazaTableRegistry)&lt;br /&gt;// сканируется директория на предмет определения схем, и если уже создана схема ввиде файла для OptionSession&lt;br /&gt;// то PlazaTableRegistry.OptionSession.Columns уже заполнен какими то колонками, исходя из файла&lt;br /&gt;var optSessionTable = PlazaTableRegistry.OptionSession;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вопросы: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Кто и в какой момент будет создавать эти схемы-файлы?&lt;br /&gt;&lt;li&gt;Получается нужно обыгрывать такой сценарий: клиент запустил PlazaTrader, создал подписку на таблицу 1 с 3 колонками, вышел из программы. Мы должны запомнить, что его подписка состоит из 3 колонок. Он снова запустил PlazaTrader, добавил в подписку еще одну колонку, вышел из программы.  Мы опять сохранили состояние. В таком случае нужно иметь в виду, что 1) родной формат схем-файлов Плазы не поддерживает сохранение параметров фильтрации и 2) название потока (FORTS_OPTINFO_REPL и т.д.) не указывается в файле, его нужно передавать в коде отдельно (кстати, почему так сделано, больше всего меня удивляет).  Придется либо запихивать и 1) и 2) в комментарии, либо сохранять все внутри XML, то есть однозначно клиенту эти файлы показывать не стоит.&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6886/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;тоесть мы метаданные готовим до того, как будет создан PlazaTrader и вызван Connect.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Почему это важно?  Речь идет о создании одного-двух десятков маленьких текстовиков, причем делаться это будет один раз при подписке на поток.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Еще важный момент:&lt;/b&gt; ты можешь добавить в класс PlazaTrader событие тип Unloading или Disposing, которые будет вызываться при выгрузке.  Это нужно для PlazaStreamManager: все потоки (plaza streams) вертятся в отдельных потоках (threads), и, если в клиентском коде явно не вызывать PlazaStreamManager.Dispose(), программа будет висеть в памяти, а данные по-прежнему будут сыпаться.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6887/</id>
    <title type="text">Тут вот какой вопрос: предположим, что, чтобы замапить объекты Security типа опцион, нужно подписать...</title>
    <published>2011-03-20T15:36:44Z</published>
    <updated>2011-03-20T15:37:21Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6875/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Тут вот какой вопрос: предположим, что, чтобы замапить объекты Security типа опцион, нужно подписаться на поток &lt;b&gt;FORTS_OPTINFO_REPL\opt_sess_contents&lt;/b&gt;.  Пользователь берет и по какой-то причине передает в PlazaTrader не всю таблицу, а только некий набор колонок (см. кусок кода № 2 выше).  Данные приходят, но не все.  Объекты создаются, но некоторые свойства не мапятся.  Это допустимая ситуация, или мы должны каким-то образом ее предотвратить?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Нужно определить минимальный набор, с которым можно прожить. Тоесть, если пользователь имеет ini схему для особых таблиц (инструменты, заявки, сделки и т.д. - это все особые), у которых отсутствуют обязательные поля (это как раз те, что PlazaColumns.IsMandatory == true, но сейчас по ошибке они все true), то их нужно или дописать, или выбросить ошибку (пока предлагаю второе, так как я всегда против эвристики в коде).&lt;br /&gt;&lt;br /&gt;Если же у него сверх необходимого в полях, то они идут в ExtensionInfo где ключом является PlazaColumn, а значение - то что получили из потока.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6886/</id>
    <title type="text"> Если его убрать, получается, что данные будут приходить в PlazaStreamManager, который будет передав...</title>
    <published>2011-03-20T15:05:03Z</published>
    <updated>2011-03-20T15:32:37Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6875/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Если его убрать, получается, что данные будут приходить в PlazaStreamManager, который будет передавать их в PlazaTrader, котрый будет уже отдавать клиенту. Но тогда данные со всех потоков будут приходить через одно событие, а это 1) возможное узкое место в коде и 2) усложнение кода, потому что внутри события PlazaTrader будет гигантский switch statement&lt;br /&gt;&lt;br /&gt;.... поискапино&lt;br /&gt;&lt;br /&gt;Еще раз повторюсь, мне кажется PlazaTable не совсем подходящее название для этого класса.  Может быть PlazaSubscription или PlazaListener?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Да, я кажется понял идею. Был не прав. Тогда я за переименование. То, что сейчас PlazaSystemTable -&amp;gt; PlazaTable. PlazaTable -&amp;gt; PlazaSubscription или PlazaListener.&lt;br /&gt;&lt;br /&gt;Но есть но. Приведу твой код:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSessionContents,&lt;br /&gt;    new&amp;#91;&amp;#93; { PlazaColumnRegistry.OptionSessionContents.Isin, PlazaColumnRegistry.OptionSessionContents.IsinId });&lt;br /&gt;_plazaTrader.StartListeners(optSessionTable);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1. Я не проверял но более чем уверен, что плаза не дает два раза создать поток по одной и той же таблице с разными полями.&lt;br /&gt;2. Ты опять мешаешь метаданные с Плаза потоками.&lt;br /&gt;&lt;br /&gt;Я бы написал так:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;// в этот момент (можно запихнуть в статический конструктор PlazaTableRegistry)&lt;br /&gt;// сканируется директория на предмет определения схем, и если уже создана схема ввиде файла для OptionSession&lt;br /&gt;// то PlazaTableRegistry.OptionSession.Columns уже заполнен какими то колонками, исходя из файла&lt;br /&gt;var optSessionTable = PlazaTableRegistry.OptionSession;&lt;br /&gt;&lt;br /&gt;// проверяем, не добавлена ли уже необходимые колонки (были добавлены при предыдущем запуске, или же пользователь уже имеет файл с правильными настройками)&lt;br /&gt;if (!optSessionTable.Columns.Contains(PlazaColumnRegistry.OptionSessionContents.Isin))&lt;br /&gt;{&lt;br /&gt;    // при добавлении колонок автоматически меняется соответствующий ini файл на диске (пока я так понял этой фичи нет, но это не долго добавить).&lt;br /&gt;    optSessionTable.Columns.AddRange(new&amp;#91;&amp;#93; { PlazaColumnRegistry.OptionSessionContents.Isin, PlazaColumnRegistry.OptionSessionContents.IsinId });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// тоесть мы метаданные готовим до того, как будет создан PlazaTrader и вызван Connect.&lt;br /&gt;&lt;br /&gt;var optSessListener = new PlazaListener(PlazaTableRegistry.OptionSession);&lt;br /&gt;_plazaTrader.StartListeners(optSessListener);&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6875/</id>
    <title type="text">Это все нужно засовывать в PlazaTable. Не понял, как это сделать. Можешь объяснить, приведя код? Сей...</title>
    <published>2011-03-19T20:44:39Z</published>
    <updated>2011-03-19T20:44:39Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Это все нужно засовывать в PlazaTable.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Не понял, как это сделать.  Можешь объяснить, приведя код?  Сейчас, чтобы подписаться, например, на таблицу &lt;b&gt;FORTS_OPTINFO_REPL\opt_sess_contents&lt;/b&gt;, &lt;br /&gt;нужно сделать вот так:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSessionContents);&lt;br /&gt;_plazaTrader.StartListeners(optSessionTable);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А чтобы подписаться только на две колонки той же самой таблицы, нужно сделать вот это:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSessionContents,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;new&amp;#91;&amp;#93; { PlazaColumnRegistry.OptionSessionContents.Isin, PlazaColumnRegistry.OptionSessionContents.IsinId });&lt;br /&gt;_plazaTrader.StartListeners(optSessionTable);&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Внутри метода &lt;b&gt;PlazaTable.CreateStream()&lt;/b&gt; конструктор PlazaStream создаст на лету ini-файл схему для передачи Плазе.  Названия потока, схемы и таблицы он возьмет из свойства &lt;b&gt;public PlazaSystemTable Table&lt;/b&gt;, который класс &lt;b&gt;PlazaOptionSessionContentsColumns&lt;/b&gt; унаследовал от &lt;b&gt;PlazaColumns&lt;/b&gt;.  Пользователю ничего никаких названий указывать не надо.  Никаких ini-файлов парсить тоже не надо.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А зачем вообще нужно хранить эти данные? Мое видение: подписались на поток. Поток отдает данные. Данные раздаются подписчикам (например, подписчику, преобразующий поток с опционами в Security). Не могу понять, когда пригодиться использование хранения?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Все понятно.  Тогда от хранения отказываемся вообще.  Данные в Плазе приходят по одной записи (строчке).  Значит таким же методом транслируем данные клиенту?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Мне лично видеться только один единый способ подписки к потоком -&amp;gt; PlazaStreamManager.StartListener(PlazaTable). Его используют все - и PlazaTrader и пользовательский код фактически один и тем же способом: передаем PlazaTable, где указаны системные параметры, и начинаем через callback получать массивы данных... Я что-то упускаю?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Да, все правильно.  Просто в предыдущем посте ты писал:&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Пользователей работает с метаданными. Неявно, когда при старте сканируются ini схемы и восстанавливаются колонки автоматически в PlazaTable.Columns.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Это механизм № 2, и его нет.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;У меня была такая мысль: а что если дать пользователю возможность запускать не все основные потоки, а только те, которые ему нужны.  Например, если я работаю с фьючерсами, зачем мне информация по опционам?  Или это бред чайника[confused]  Тогда PlazaMarketData можно убрать вообще и стартовать основные потоки в конструкторе PlazaTrader или в отдельном методе.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я думаю это точно так же можно проделать через PlazaTable - передавать не все объекты PlazaTable, а только те, что отвечают за опционы.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Тут вот какой вопрос: предположим, что, чтобы замапить объекты Security типа опцион, нужно подписаться на поток &lt;b&gt;FORTS_OPTINFO_REPL\opt_sess_contents&lt;/b&gt;.  Пользователь берет и по какой-то причине передает в PlazaTrader не всю таблицу, а только некий набор колонок (см. кусок кода № 2 выше).  Данные приходят, но не все.  Объекты создаются, но некоторые свойства не мапятся.  Это допустимая ситуация, или мы должны каким-то образом ее предотвратить?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Согласен. Тогда предлагаю пока все что отвечает за метаданные перенести обратно в PlazaSystemTable (названия потоков, таблиц и т.д.). Посмотреть, можно ли обойтись без Records. И уж там поглядеть, что осталось от PlazaTable. Думаю, останеться немного.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Все метаданные по таблице уже живут в PlazaSystemTable.  От Records можно отказаться вообще.  PlazaTable нужен.  Чем еще он удобен: через него приходят данные клиенту.  Вот, например, вот так данные с двух потоков приходят в разные обработчики событий:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var optSessionTable = new PlazaTable(PlazaColumnRegistry.OptionSessionContents);&lt;br /&gt;optSessionTable.DataInserted += optSessionTable_DataInserted;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;var rtsIndexTable = new PlazaTable(PlazaColumnRegistry.RtsIndex);&lt;br /&gt;rtsIndexTable.DataInserted += rtsIndexTable_DataInserted;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если его убрать, получается, что данные будут приходить в PlazaStreamManager, который будет передавать их в PlazaTrader, котрый будет уже отдавать клиенту.  Но тогда данные со всех потоков будут приходить через одно событие, а это 1) возможное узкое место в коде и 2) усложнение кода, потому что внутри события PlazaTrader будет гигантский switch statement&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6870/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Насчет фильтрации, я думаю надо делать это в PlazaStream. Или вынести это в отдельный класс PlazaStreamFilter.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Фильтрацию тоже нужно делать в PlazaTable.  Он же получает данные из потоков и передает их клиенту.&lt;br /&gt;&lt;br /&gt;Попытаюсь сжато описать разграничение полномочий среди моих хитросплетений.  &lt;br /&gt;&lt;ol&gt;&lt;li&gt;За метаданные отвечают PlazaSystemTable и наследники PlazaColumns.&lt;br /&gt;&lt;li&gt;PlazaStream - это работа с конкретным потоком (плазовский класс CP2DataStreamClass): создание ini-файла схемы, (пере)открытие потока, установка номера жизни.&lt;br /&gt;&lt;li&gt;PlazaStreamManager создает подключения к Плазе, а также запускает подписки на потоки через PlazaStream в отдельных потоках.  PlazaStream и PlazaStreamManager после отладки нужно скрыть от клиентского кода.&lt;br /&gt;&lt;li&gt;PlazaTable хранит в себе конфигурацию подписки к конкретному потоку (название потока, схемы, таблицы + нужный набор колоннок).  Он создает PlazaStream и подписывается на события получение данных, чтобы в дальнейшем транслировать их клиенту.  Поскольку он пропускает их через себя, он сможет в дальнейшем их фильтровать.&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Еще раз повторюсь, мне кажется PlazaTable не совсем подходящее название для этого класса.  Может быть PlazaSubscription или PlazaListener?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6870/</id>
    <title type="text">У каждой таблицы в потоке помимо четкого набора полей (колоннок) есть еще три обязательных параметра...</title>
    <published>2011-03-19T06:45:28Z</published>
    <updated>2011-03-19T06:45:28Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;У каждой таблицы в потоке помимо четкого набора полей (колоннок) есть еще три обязательных параметра: название потока, название схемы потока и название таблицы.  Поскольку каждой таблице потоков соответствует свой наследник PlazaColumns, например, таблица rts_index - это класс PlazaIndexColumns, имело смысл в каждом наследнике PlazaColumns прописать эти три параметра.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;На мой взгляд, зря. Это все нужно засовывать в PlazaTable. PlazaColumns - это лишь базовый класс для контейнера колонок. У нас практически во всех таблицах есть 3 служебных поля. Вот ради них я и вынес это в отдельный класс PlazaColumns. Даже не думал, что его как-то по другому начнут использовать.[smile] &lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Мой PlazaTable метаданные не описывает (см. выше).  Это класс своего рода контейнер по типу DataTable.  Он используется для подписки на конкретный поток, получения и хранения данных из этого потока.  Все управление потоками по-прежнему происходит внутри PlazaStreamManager.  В дальнейшем PlazaTable сможет фильтровать данные.&lt;br /&gt;&lt;br /&gt;В этом массиве хранятся данные, которые приходят из потока (см. предыдущий пункт).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А зачем вообще нужно хранить эти данные? Мое видение: подписались на поток. Поток отдает данные. Данные раздаются подписчикам (например, подписчику, преобразующий поток с опционами в Security). Не могу понять, когда пригодиться использование хранения?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Мы прописали все метаданные Плазы.  У нас есть механизм создания ini-файлов на лету (их не нужно парсить, они считываются/парсятся самой Плазой в методе &lt;b&gt;CP2DataStreamClass.TableSet.InitFromIni2()&lt;/b&gt;).  Мы можем использовать этот единый механизм, как для пользовательских подписок, так и для служебных (которые будут потом мапиться в классы).  Если парсить файлы, зачем было прописывать метаданные?  У нас будет два механизма подписки к потокам, а это только усложнит систему, а не упростит.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Мне лично видеться только один единый способ подписки к потоком -&amp;gt; PlazaStreamManager.StartListener(PlazaTable). Его используют все - и PlazaTrader и пользовательский код фактически один и тем же способом: передаем PlazaTable, где указаны системные параметры, и начинаем через callback получать массивы данных... Я что-то упускаю?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;У меня была такая мысль: а что если дать пользователю возможность запускать не все основные потоки, а только те, которые ему нужны.  Например, если я работаю с фьючерсами, зачем мне информация по опционам?  Или это бред чайника[confused]  Тогда PlazaMarketData можно убрать вообще и стартовать основные потоки в конструкторе PlazaTrader или в отдельном методе.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я думаю это точно так же можно проделать через PlazaTable - передавать не все объекты PlazaTable, а только те, что отвечают за опционы.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Легче будет рефакторить и поддерживать в дальнейшем[smile]  Половину функицонала PlazaTable можно засунуть в PlazaStreamManager, но тогда он будет знать очень много.  А после того, как добавится фильтрация данных[omg] &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Согласен. Тогда предлагаю пока все что отвечает за метаданные перенести обратно в PlazaSystemTable (названия потоков, таблиц и т.д.). Посмотреть, можно ли обойтись без Records. И уж там поглядеть, что осталось от PlazaTable. Думаю, останеться немного.&lt;br /&gt;&lt;br /&gt;Насчет фильтрации, я думаю надо делать это в PlazaStream. Или вынести это в отдельный класс PlazaStreamFilter.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/6869/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Подытоживая:  PlazaTable, PlazaSystemTable - схожие названия действительно путают: предлагай свой варианты.  Вместе с этим, считаю, что оба класса имеют право на существование.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6869/</id>
    <title type="text">По порядку: 1. PlazaSystemTable явно лишний. У каждой таблицы в потоке помимо четкого набора полей (...</title>
    <published>2011-03-18T20:48:03Z</published>
    <updated>2011-03-18T20:48:03Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">По порядку:&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;1. PlazaSystemTable явно лишний.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;У каждой таблицы в потоке помимо четкого набора полей (колоннок) есть еще три обязательных параметра: название потока, название схемы потока и название таблицы.  Поскольку каждой таблице потоков соответствует свой наследник PlazaColumns, например, таблица rts_index - это класс PlazaIndexColumns, имело смысл в каждом наследнике PlazaColumns прописать эти три параметра.  Первоначально я сделал это через абстрактные свойства базового класса PlazaColumns: ReplicationStream, ReplicationScheme и Table.  Ты предложил более удобный вариант: через класс PlazaTable, который теперь называется PlazaSystemTable.  Имя я изменил, потому что мне нужно было добавить класс PlazaTable.  Если моему PlazaTable дать другое название (мне вчера вечером с лету ничего в голову не пришло), PlazaSystemTable можно обратно переименовать в PlazaTable.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Зачем-то в PlazaTable идет работа с потоками. Есть же менеджер потоков, есть PlazaTrader. В классе, описывающий метаданные, работа с потоками по идее быть не должно.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Мой PlazaTable метаданные не описывает (см. выше).  Это класс своего рода контейнер по типу DataTable.  Он используется для подписки на конкретный поток, получения и хранения данных из этого потока.  Все управление потоками по-прежнему происходит внутри PlazaStreamManager.  В дальнейшем PlazaTable сможет фильтровать данные.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Зачем нужен Records у PlazaTable?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В этом массиве хранятся данные, которые приходят из потока (см. предыдущий пункт).&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Я думаю надо еще раз проговорить про организацию работы с потоками Плазы.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Мы прописали все метаданные Плазы.  У нас есть механизм создания ini-файлов на лету (их не нужно парсить, они считываются/парсятся самой Плазой в методе &lt;b&gt;CP2DataStreamClass.TableSet.InitFromIni2()&lt;/b&gt;).  Мы можем использовать этот единый механизм, как для пользовательских подписок, так и для служебных (которые будут потом мапиться в классы).  Если парсить файлы, зачем было прописывать метаданные?  У нас будет два механизма подписки к потокам, а это только усложнит систему, а не упростит.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Зачем здесь PlazaMarketData?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;У меня была такая мысль: а что если дать пользователю возможность запускать не все основные потоки, а только те, которые ему нужны.  Например, если я работаю с фьючерсами, зачем мне информация по опционам?  Или это бред чайника[confused]  Тогда PlazaMarketData можно убрать вообще и стартовать основные потоки в конструкторе PlazaTrader или в отдельном методе.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Вообщем, сейчас уже практически не понять, что есть что.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Попробуй в тестовом коде подписаться на пару потоков и отследи, что происходит в дебагере.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/6868/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Вопрос к аспиранту, а именно в чем необходимость данного хитросплетения?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Легче будет рефакторить и поддерживать в дальнейшем[smile]  Половину функицонала PlazaTable можно засунуть в PlazaStreamManager, но тогда он будет знать очень много.  А после того, как добавится фильтрация данных[omg] &lt;br /&gt;&lt;br /&gt;Подытоживая:  PlazaTable, PlazaSystemTable - схожие названия действительно путают: предлагай свой варианты.  Вместе с этим, считаю, что оба класса имеют право на существование.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/6868/</id>
    <title type="text">Вообщем, сейчас уже практически не понять, что есть что. Вопрос к аспиранту, а именно в чем необходи...</title>
    <published>2011-03-18T17:17:44Z</published>
    <updated>2011-03-18T17:17:44Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Вообщем, сейчас уже практически не понять, что есть что. Вопрос к аспиранту, а именно в чем необходимость данного хитросплетения?&lt;br /&gt;&lt;br /&gt;Что я вижу сейчас:&lt;br /&gt;&lt;br /&gt;1. PlazaSystemTable явно лишний.&lt;br /&gt;2. Зачем-то в PlazaTable идет работа с потоками. Есть же менеджер потоков, есть PlazaTrader. В классе, описывающий метаданные, работа с потоками по идее быть не должно.&lt;br /&gt;3. Зачем нужен Records у PlazaTable?&lt;br /&gt;&lt;br /&gt;Я думаю надо еще раз проговорить про организацию работы с потоками Плазы.&lt;br /&gt;&lt;br /&gt;1. Пользователей работает с метаданными. Явно, когда их редактируется через PlazaTable.Columns. Неявно, когда при старте сканируются ini схемы и восстанавливаются колонки автоматически в PlazaTable.Columns.&lt;br /&gt;2. Пользователь запускает экспорт через PlazaTrader.StartExport. Стартуют потоки как основные (которые в QuikTrader мапяться на объекты Security Trade Order и т.д.) так и дополнительные (думаю, маппинг лучше организовать как с Custom tables в QuikTrader). Какие именно нужны потоки - определяется на шаге 1.&lt;br /&gt;&lt;br /&gt;Зачем здесь PlazaSystemTable? И PlazaMarketData?&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>