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; }