diff options
Diffstat (limited to 'ACE/TAO/docs/tutorials/Quoter/RT_Event_Service/Stock_Factory_i.cpp')
-rw-r--r-- | ACE/TAO/docs/tutorials/Quoter/RT_Event_Service/Stock_Factory_i.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/ACE/TAO/docs/tutorials/Quoter/RT_Event_Service/Stock_Factory_i.cpp b/ACE/TAO/docs/tutorials/Quoter/RT_Event_Service/Stock_Factory_i.cpp new file mode 100644 index 00000000000..b542c9fbe98 --- /dev/null +++ b/ACE/TAO/docs/tutorials/Quoter/RT_Event_Service/Stock_Factory_i.cpp @@ -0,0 +1,89 @@ +// +// $Id$ +// + +#include "Stock_Factory_i.h" +#include "Stock_i.h" +#include "ace/streams.h" + +Quoter_Stock_Factory_i::Quoter_Stock_Factory_i () +{ +} + +Quoter::Stock_ptr +Quoter_Stock_Factory_i::get_stock (const char *symbol) +{ + PortableServer::ObjectId_var oid = + PortableServer::string_to_ObjectId (symbol); + + try { + CORBA::Object_var tmp = + this->stock_factory_poa_->id_to_reference (oid.in ()); + return Quoter::Stock::_narrow (tmp.in ()); + } + catch (PortableServer::POA::ObjectNotActive &) { + throw Quoter::Invalid_Stock_Symbol (); + } +} + +void +Quoter_Stock_Factory_i::destroy_stock_objects () +{ + if (!CORBA::is_nil (this->stock_factory_poa_.in ())) + return; + + this->stock_factory_poa_->destroy (1, 1); + this->stock_factory_poa_ = PortableServer::POA::_nil (); +} + +void +Quoter_Stock_Factory_i::load_stock_objects ( + PortableServer::POA_ptr poa, + PortableServer::POAManager_ptr poa_manager, + RtecEventChannelAdmin::SupplierAdmin_ptr supplier_admin) +{ + if (!CORBA::is_nil (this->stock_factory_poa_.in ())) + return; + + CORBA::PolicyList policies (2); + policies.length (2); + + policies[0] = + poa->create_id_assignment_policy (PortableServer::USER_ID); + policies[1] = + poa->create_implicit_activation_policy (PortableServer::NO_IMPLICIT_ACTIVATION); + + this->stock_factory_poa_ = + poa->create_POA ("Stock_Factory_POA", + poa_manager, + policies); + + for (CORBA::ULong i = 0; i != policies.length (); ++i) { + policies[i]->destroy (); + } + + while (!cin.eof () && cin.peek () != EOF) { + const int max_symbol_length = 8; + char symbol[max_symbol_length]; + const int max_full_name_length = 64; + char full_name[max_full_name_length]; + double price; + + cin.getline (symbol, max_symbol_length, '\n'); + cin.getline (full_name, max_full_name_length, '\n'); + cin >> price; + cin.ignore (1, '\n'); + + Quoter_Stock_i *stock = + new Quoter_Stock_i (symbol, full_name, price); + + PortableServer::ServantBase_var servant = stock; + + PortableServer::ObjectId_var oid = + PortableServer::string_to_ObjectId (symbol); + + this->stock_factory_poa_->activate_object_with_id (oid.in (), + servant.in ()); + stock->connect (supplier_admin); + } +} |