/** * distrio manager implementation * * - instances a manager object * - registers the manager object at the NamingService * * @author Manuel Traut * @licence GPLv2 */ #include "distrio_manager.h" #include #include // Implementation skeleton constructor Distrio_Manager_i::Distrio_Manager_i (void) { } // Implementation skeleton destructor Distrio_Manager_i::~Distrio_Manager_i (void) { } ::Distrio::Error * Distrio_Manager_i::digital ( ::Distrio::Digital_list_out io_list) { io_list = &digital_list; } ::Distrio::Error * Distrio_Manager_i::analog ( ::Distrio::Analog_list_out io_list) { io_list = &analog_list; } ::Distrio::Error * Distrio_Manager_i::device ( ::Distrio::Device_list_out dev_list) { dev_list = &device_list; } /* TODO: think about locking!!! */ ::Distrio::Error * Distrio_Manager_i::register_io_digital ( ::Distrio::Digital_ptr & io_digi) { io_digi->id (new_id ()); digital_list.length (digital_list.length () + 1); digital_list [digital_list.length () - 1] = io_digi; } ::Distrio::Error * Distrio_Manager_i::register_io_analog ( ::Distrio::Analog_ptr & io_ana) { io_ana->id (new_id ()); analog_list.length (digital_list.length () + 1); analog_list [analog_list.length () - 1] = io_ana; } ::Distrio::Error * Distrio_Manager_i::register_io_device ( ::Distrio::Device_ptr & io_dev) { io_dev->id (new_id ()); device_list.length (device_list.length () + 1); device_list [device_list.length () - 1] = io_dev; } ::Distrio::Error * Distrio_Manager_i::unregister_io_digital ( ::Distrio::Digital_ptr io_dig) { // Add your implementation here } ::Distrio::Error * Distrio_Manager_i::unregister_io_analog ( ::Distrio::Analog_ptr io_ana) { // Add your implementation here } ::Distrio::Error * Distrio_Manager_i::unregister_io_device ( ::Distrio::Device_ptr io_dev) { // Add your implementation here } void Distrio_Manager_i::log_error ( const ::Distrio::Error & error) { // Add your implementation here } ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { std::cout << __FILE__ << " build " << __DATE__ << " " << __TIME__ <resolve_initial_references ("RootPOA"); poa = PortableServer::POA::_narrow (root_poa.in ()); distrio_manager_oid = poa->activate_object (distrio_manager); distrio_manager_obj = distrio_manager->_this (); std::cout << "get context of NameService" << std::endl; naming_service = orb->resolve_initial_references ("NameService"); if (CORBA::is_nil (naming_service)) { std::cerr << "can't resolve NameService" << std::endl; ret = -EINVAL; goto out; } nc = CosNaming::NamingContext::_narrow (naming_service.in ()); if (CORBA::is_nil (nc)) { std::cerr << "resolved invalid NameService object" << std::endl; ret = -EINVAL; goto out; } std::cout << "bind manager object at NameService" << std::endl; /* TODO: find out how to build a tree @ the nameservice "distrio/manager" */ name.length (1); name[0].id = CORBA::string_dup ("distrio_manager"); nc->rebind (name, distrio_manager_obj.in ()); std::cout << "activate POA Manager" << std::endl; poa_mgr = poa->the_POAManager (); poa_mgr->activate (); std::cout << "distrio_manager ready" << std::endl; orb->run (); orb->destroy (); } catch (CORBA::SystemException &e) { std::cerr << "CORBA initialization failed: " << e << std::endl; ret = -EINVAL; goto out; } catch(CORBA::Exception &e) { std::cerr << "CORBA initialization failed: " << e << std::endl; ret = -EINVAL; goto out; } out: free (distrio_manager); return ret; }