void OwnershipDataPublisher::initPublisher(string pub, DDS::Long strength)
{
  char partition_name[] = "Ownership example";
  mgr.createParticipant(partition_name);
 //create type
  StockTypeSupport_var st = new StockTypeSupport();
  mgr.registerType(st.in());
  //create Topic
  char topic_name[] = "OwnershipStockTracker";
  mgr.createTopic(topic_name);
  //create Publisher
  mgr.createPublisher();

  // create DataWriter
  mgr.createWriter(strength);

  dWriter = mgr.getWriter();
  OwnershipDataDataWriter = StockDataWriter::_narrow(dWriter.in());

  m_instance = new Stock();

  m_instance->ticker = DDS::string_dup("MSFT");
  m_instance->price = 0.0;
  m_instance->publisher = DDS::string_dup(pub.c_str());
  m_instance->strength = strength;
  //cout <<m_instance->ticker<<"/"<<m_instance->price<<"/"<<m_instance->publisher<< endl;
  userHandle = OwnershipDataDataWriter->register_instance(*m_instance);

}
int main(int argc, char *argv[])
{
  os_time delay_100ms = { 0, 100000000 };
  DDSEntityManager *mgr = new DDSEntityManager();

  // create domain participant
  char partition_name[] = "ContentFilteredTopic example";
  mgr->createParticipant(partition_name);

  StockTypeSupport_var st = new StockTypeSupport();
  mgr->registerType(st.in());

  //create Topic
  char topic_name[] = "StockTrackerExclusive";
  mgr->createTopic(topic_name);

  //create Publisher
  mgr->createPublisher();

  // create DataWriter
  mgr->createWriter();
  DataWriter_ptr dWriter = mgr->getWriter();
  StockDataWriter_var ContentFilteredTopicDataWriter = StockDataWriter::_narrow(dWriter);

  Stock geQuote;
  Stock msftQuote;

  geQuote.ticker = CORBA::string_dup("GE");
  geQuote.price = 12.00f;
  msftQuote.ticker = CORBA::string_dup("MSFT");
  msftQuote.price = 25.00f;


  InstanceHandle_t geHandle = ContentFilteredTopicDataWriter->register_instance(geQuote);
  InstanceHandle_t msftHandle = ContentFilteredTopicDataWriter->register_instance(msftQuote);

  // Publish Events
  ReturnCode_t status;
  // update ContentFilteredTopicData price every second
  for (int x = 0; x < 20; x++)
  {
    geQuote.price = geQuote.price + 0.5;
    msftQuote.price = msftQuote.price + 1.5;
    printf("=== [ContentFilteredTopicDataPublisher] sends 2 stockQuotes : (GE, %.1f) (MSFT, %.1f)\n", geQuote.price, msftQuote.price);
    status = ContentFilteredTopicDataWriter->write(geQuote, geHandle);
    checkStatus(status, "StockDataWriter::write");
    status = ContentFilteredTopicDataWriter->write(msftQuote, msftHandle);
    checkStatus(status, "StockDataWriter::write");
    os_nanoSleep(delay_100ms);
  }
  // signal to terminate
  geQuote.price =  - 1;
  msftQuote.price =  - 1;
  ContentFilteredTopicDataWriter->write(geQuote, geHandle);
  ContentFilteredTopicDataWriter->write(msftQuote, msftHandle);
  cout << "Market Closed" << endl;

  /* Unregister the instances */
  ContentFilteredTopicDataWriter->unregister_instance(geQuote, geHandle);
  ContentFilteredTopicDataWriter->unregister_instance(msftQuote, msftHandle);

  /* Remove the DataWriters */
  mgr->deleteWriter(ContentFilteredTopicDataWriter.in ());

  /* Remove the Publisher. */
  mgr->deletePublisher();

  /* Remove the Topics. */
  mgr->deleteTopic();

  /* Remove Participant. */
  mgr->deleteParticipant();

  delete mgr;
  return 0;
}
int main(int argc, char *argv[])
{
  // usage : ContentFilteredTopicDataSubscriber <subscription_string>
  const char *ContentFilteredTopicDataToSubscribe;
  os_time delay_200ms = { 0, 200000000 };

  if (argc > 1)
  {
    ContentFilteredTopicDataToSubscribe = argv[1];
  }
  else
  {
    cerr <<
      "*** [ContentFilteredTopicDataSubscriber] Subscription string not specified" <<
      endl;
    cerr << "*** usage : ContentFilteredTopicDataSubscriber <subscription_string>" <<
      endl;
    return  - 1;
  }

  StockSeq msgList;
  SampleInfoSeq infoSeq;

  DDSEntityManager *mgr = new DDSEntityManager();

  // create domain participant
  char partition_name[] = "ContentFilteredTopic example";
  mgr->createParticipant(partition_name);

  //create type
  StockTypeSupport_var st = new StockTypeSupport();
  mgr->registerType(st.in());

  //create Topic
  char topic_name[] = "StockTrackerExclusive";
  mgr->createTopic(topic_name);

  //create Subscriber
  mgr->createSubscriber();

  char sTopicName[] = "MyStockTopic";
  // create subscription filter
  ostringstream buf;
  buf << "ticker = '" << ContentFilteredTopicDataToSubscribe << "'";
  CORBA::String_var sFilter = CORBA::string_dup(buf.str().c_str());
  // Filter expr
  StringSeq sSeqExpr;
  sSeqExpr.length(0);
  // create topic
  mgr->createContentFilteredTopic(sTopicName, sFilter.in(), sSeqExpr);
  // create Filtered DataReader
  cout << "=== [ContentFilteredTopicDataSubscriber] Subscription filter : " << sFilter
    << endl;
  mgr->createReader(true);

  DataReader_ptr dreader = mgr->getReader();
  StockDataReader_var ContentFilteredTopicDataReader = StockDataReader::_narrow(dreader);
  checkHandle(ContentFilteredTopicDataReader, "StockDataReader::_narrow");

  cout << "=== [ContentFilteredTopicDataSubscriber] Ready ..." << endl;

  bool closed = false;
  ReturnCode_t status =  - 1;
  int count = 0;
  while (!closed && count < 1500) // We dont want the example to run indefinitely
  {
    status = ContentFilteredTopicDataReader->take(msgList, infoSeq, LENGTH_UNLIMITED,
      ANY_SAMPLE_STATE, ANY_VIEW_STATE, ANY_INSTANCE_STATE);
    checkStatus(status, "ContentFilteredTopicDataDataReader::take");
    for (CORBA::ULong i = 0; i < msgList.length(); i++)
    {
		if(infoSeq[i].valid_data)
		{
           if (msgList[i].price ==  - 1.0f)
           {
              closed = true;
              break;
           }
		}
     cout << "=== [ContentFilteredTopicDataSubscriber] receives stockQuote :  ("<< msgList[i].ticker << ", " << msgList[i].price << ')'<< endl;
    }

    status = ContentFilteredTopicDataReader->return_loan(msgList, infoSeq);
    checkStatus(status, "StockDataReader::return_loan");
    os_nanoSleep(delay_200ms);
    ++count;
  }

  cout << "=== [ContentFilteredTopicDataSubscriber] Market Closed" << endl;

  //cleanup
  mgr->deleteReader(ContentFilteredTopicDataReader.in ());
  mgr->deleteSubscriber();
  mgr->deleteFilteredTopic();
  mgr->deleteTopic();
  mgr->deleteParticipant();

  delete mgr;
  return 0;
}
int main(int argc, char *argv[])
{
  os_time delay_2ms = { 0, 2000000 };
  os_time delay_200ms = { 0, 200000000 };
  StockSeq msgList;
  SampleInfoSeq infoSeq;

  DDSEntityManager *mgr = new DDSEntityManager();

  // create domain participant
  char partition_name[] = "Ownership example";
  mgr->createParticipant(partition_name);

  //create type
  StockTypeSupport_var st = new StockTypeSupport();
  mgr->registerType(st.in());

  //create Topic
  char topic_name[] = "StockTrackerExclusive";
  mgr->createTopic(topic_name);

  //create Subscriber
  mgr->createSubscriber();

  // create DataReader
  mgr->createReader();

  DataReader_ptr dreader = mgr->getReader();
  StockDataReader_var OwnershipDataReader = StockDataReader::_narrow(dreader);
  checkHandle(OwnershipDataReader, "StockDataReader::_narrow");
  cout << "===[Subscriber] Ready ..." << endl;
  cout << "   Ticker   Price   Publisher   ownership strength" << endl;
  bool closed = false;
  ReturnCode_t status =  - 1;
  int count = 0;
  while (!closed && count < 1500 )
  {
    status = OwnershipDataReader->take(msgList, infoSeq, LENGTH_UNLIMITED,
      ANY_SAMPLE_STATE, ANY_VIEW_STATE, ANY_INSTANCE_STATE);
    checkStatus(status, "OwnershipDataDataReader::take");
    if (msgList.length() > 0)
    {
      for (CORBA::ULong i = 0; i < msgList.length(); i++)
      {
        if (infoSeq[i].valid_data)
        {
          if (msgList[i].price < - 0.0f)
          {
            closed = true;
            break;
          }
          printf("   %s %8.1f    %s        %d\n", msgList[i].ticker.in(),
            msgList[i].price, msgList[i].publisher.in(), msgList[i].strength);
        }
     }

      status = OwnershipDataReader->return_loan(msgList, infoSeq);
      checkStatus(status, "StockDataReader::return_loan");
      os_nanoSleep(delay_2ms);
    }
    ++count;
    os_nanoSleep(delay_200ms);
  }

  cout << "===[Subscriber] Market Closed" << endl;

  //cleanup
  mgr->deleteReader(OwnershipDataReader.in ());
  mgr->deleteSubscriber();
  mgr->deleteTopic();
  mgr->deleteParticipant();

  delete mgr;
  return 0;
}
int main(int argc, char *argv[])
{
  os_time delay_100ms = { 0, 100000000 };
  DDSEntityManager *mgr = new DDSEntityManager();

  // create domain participant
  char partition_name[] = "QueryCondition example";
  mgr->createParticipant(partition_name);

  StockTypeSupport_var st = new StockTypeSupport();
  mgr->registerType(st.in());

  //create Topic
  char topic_name[] = "StockTrackerExclusive";
  mgr->createTopic(topic_name);

  //create Publisher
  mgr->createPublisher();

  // create DataWriter
  mgr->createWriter();
  DataWriter_ptr dWriter = mgr->getWriter();
  StockDataWriter_var QueryConditionDataWriter = StockDataWriter::_narrow(dWriter);

  Stock *geQuote = new Stock();
  Stock *msftQuote = new Stock();

  geQuote->ticker = CORBA::string_dup("GE");
  geQuote->price = 12.00f;
  msftQuote->ticker = CORBA::string_dup("MSFT");
  msftQuote->price = 25.00f;


  InstanceHandle_t geHandle = QueryConditionDataWriter->register_instance(*geQuote);
  InstanceHandle_t msftHandle = QueryConditionDataWriter->register_instance(*msftQuote);

  // Publish Events
  ReturnCode_t status;
  // update QueryConditionData price every second
  for (int x = 0; x < 20; x++)
  {
    geQuote->price = geQuote->price + 0.5;
    msftQuote->price = msftQuote->price + 1.5;
    status = QueryConditionDataWriter->write(*geQuote, geHandle);
    checkStatus(status, "StockDataWriter::write");
    status = QueryConditionDataWriter->write(*msftQuote, msftHandle);
    checkStatus(status, "StockDataWriter::write");
    os_nanoSleep(delay_100ms);
    printf("GE : %.1f MSFT : %.1f\n", geQuote->price, msftQuote->price);
  }
  // signal to terminate
  geQuote->price =  - 1;
  msftQuote->price =  - 1;
  QueryConditionDataWriter->write(*geQuote, geHandle);
  QueryConditionDataWriter->write(*msftQuote, msftHandle);
  cout << "Market Closed" << endl;

  // clean up
  status = QueryConditionDataWriter->dispose(*geQuote, geHandle);
  checkStatus(status, "dispose");
  status = QueryConditionDataWriter->dispose(*msftQuote, msftHandle);
  checkStatus(status, "dispose");

  status = QueryConditionDataWriter->unregister_instance(*geQuote, geHandle);
  checkStatus(status, "unregister_instance");
  status = QueryConditionDataWriter->unregister_instance(*msftQuote, msftHandle);
  checkStatus(status, "unregister_instance");

  /* Release the data-samples. */
  delete geQuote;
  delete msftQuote;

  /* Remove the DataWriters */
  mgr->deleteWriter(QueryConditionDataWriter.in ());

  /* Remove the Publisher. */
  mgr->deletePublisher();

  /* Remove the Topics. */
  mgr->deleteTopic();

  /* Remove Participant. */
  mgr->deleteParticipant();

  delete mgr;
  return 0;
}
int main(int argc, char *argv[])
{
  // usage : QueryConditionDataQuerySubscriber <query_string>
  const char *QueryConditionDataToSubscribe;
  if (argc > 1)
  {
    QueryConditionDataToSubscribe = argv[1];
  }
  else
  {
    cerr << "*** [QueryConditionDataQuerySubscriber] Query string not specified" <<
      endl;
    cerr << "*** usage : QueryConditionDataQuerySubscriber <query_string>" << endl;
    return  - 1;
  }

  StockSeq msgList;
  SampleInfoSeq infoSeq;
  os_time delay_200ms = { 0, 200000000 };

  DDSEntityManager *mgr = new DDSEntityManager();

  // create domain participant
  char partition_name[] = "QueryCondition example";
  mgr->createParticipant(partition_name);

  //create type
  StockTypeSupport_var st = new StockTypeSupport();
  mgr->registerType(st.in());

  //create Topic
  char topic_name[] = "StockTrackerExclusive";
  mgr->createTopic(topic_name);

  //create Subscriber
  mgr->createSubscriber();

  mgr->createReader(false);

  DataReader_ptr dreader = mgr->getReader();
  StockDataReader_var QueryConditionDataReader = StockDataReader::_narrow(dreader);
  checkHandle(QueryConditionDataReader, "StockDataReader::_narrow");

  // create a query string
  StringSeq queryStr;
  queryStr.length(1);
  queryStr[0] = QueryConditionDataToSubscribe;

  // Create QueryCondition
  cout << "=== [QueryConditionDataQuerySubscriber] Query : ticker = " <<
    QueryConditionDataToSubscribe << endl;
  QueryCondition_var queryCondition = QueryConditionDataReader->create_querycondition(ANY_SAMPLE_STATE,
    ANY_VIEW_STATE, ANY_INSTANCE_STATE, "ticker=%0", queryStr);
  checkHandle(queryCondition.in(), "create_querycondition");

  cout << "=== [QueryConditionDataQuerySubscriber] Ready ..." << endl;

  bool closed = false;
  ReturnCode_t status =  - 1;
  int count = 0;
  while (!closed && count < 1500 )
  {
    status = QueryConditionDataReader->take_w_condition(msgList, infoSeq, LENGTH_UNLIMITED,
      queryCondition);
    checkStatus(status, "QueryConditionDataDataReader::take");
    for (CORBA::ULong i = 0; i < msgList.length(); i++)
    {
      if (msgList[i].price ==  - 1.0f)
      {
        closed = true;
        break;
      }
      cout << msgList[i].ticker << ": " << msgList[i].price << endl;

    }

    status = QueryConditionDataReader->return_loan(msgList, infoSeq);
    checkStatus(status, "StockDataReader::return_loan");
    os_nanoSleep(delay_200ms);
    ++count;
  }

  cout << "=== [QueryConditionDataQuerySubscriber] Market Closed" << endl;

  // cleanup
  // Delete the QueryCondition
  QueryConditionDataReader->delete_readcondition(queryCondition.in());

  mgr->deleteReader(QueryConditionDataReader.in ());
  mgr->deleteSubscriber();
  mgr->deleteTopic();
  mgr->deleteParticipant();

  delete mgr;
  return 0;
}