bool iTask::initialize_configuration() { using namespace adportable; if ( status_current_ >= ControlServer::eConfigured ) return true; adportable::timer x; Logging(L"iTask::initialize_configuration...", ::EventLog::pri_DEBUG ); SignalObserver::Observer_var masterObserver = getObserver(); if ( CORBA::is_nil( masterObserver.in() ) ) { assert(0); throw std::runtime_error( "iTask::initialize_configuration - can't get master observer servant" ); } int objid = 0; for ( Configuration& item: config_ ) { ++objid; // initialize instrument proxy std::shared_ptr<iProxy> pProxy( new iProxy( *this ) ); if ( pProxy ) { adportable::timer timer; pProxy->objId( objid ); if ( ! pProxy->initialConfiguration( item ) ) { Logging(L"iTask::initialize_configuration -- instrument initialization failed for \"%1%\"" , ::EventLog::pri_WARNING ) % item.name(); continue; //return false; } std::lock_guard< std::mutex > lock( mutex_ ); iproxies_.push_back( pProxy ); Logging(L"iTask::initialize_configuration -- instrument \"%1%\" successfully initialized as objId %2% took %3% us" , ::EventLog::pri_INFO ) % item.name() % objid % timer.elapsed(); } // initialize observer proxy Instrument::Session_var iSession = pProxy->getSession(); if ( ! CORBA::is_nil( iSession.in() ) ) { std::shared_ptr<oProxy> poProxy( new oProxy( *this ) ); if ( poProxy ) { adportable::timer timer; poProxy->objId( objid ); poProxy->setConfiguration( item ); if ( poProxy->setInstrumentSession( iSession ) ) { // assign objid to source objects size_t n = poProxy->populateObservers( objid ); Logging(L"iTask::initialize_configuration -- \"%1%\" has %2% signal observers %3% us" , ::EventLog::pri_INFO ) % item.name() % n % timer.elapsed(); objid += int(n); } std::lock_guard< std::mutex > lock( mutex_ ); oproxies_.push_back( poProxy ); // add source into the Cache (1st layer siblings) masterObserver->addSibling( poProxy->getObject() ); } } } // fire connect using adcontroller::iProxy; using adcontroller::oProxy; std::for_each( iproxies_.begin(), iproxies_.end(), boost::bind( &iProxy::connect, _1, "adcontroller.iTask(i)" ) ); std::for_each( oproxies_.begin(), oproxies_.end(), boost::bind( &oProxy::connect, _1, "adcontroller.iTask(o)" ) ); status_current_ = status_being_ = ControlServer::eConfigured; // relevant modules are able to access. Logging(L"iTask::initialize_configuration completed. %1% us", ::EventLog::pri_INFO ) % x.elapsed(); return true; }