⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controltaskserver.cpp

📁 机器人开源项目orocos的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        }        catch (CORBA::Exception &e) {            log(Error) << "CORBA exception raised!" << endlog();            log() << e._info().c_str() << endlog();        }    }    bool ControlTaskServer::InitOrb(int argc, char* argv[] ) {        if ( orb.in() )            return false;        try {            // First initialize the ORB, that will remove some arguments...            orb =                CORBA::ORB_init (argc, argv,                                 "" /* the ORB name, it can be anything! */);            CORBA::Object_var poa_object =                orb->resolve_initial_references ("RootPOA");            rootPOA =                PortableServer::POA::_narrow (poa_object.in ());            PortableServer::POAManager_var poa_manager =                rootPOA->the_POAManager ();            poa_manager->activate ();            return true;        }        catch (CORBA::Exception &e) {            log(Error) << "Orb Init : CORBA exception raised!" << endlog();            log() << e._info().c_str() << endlog();        }        return false;    }    void ControlTaskServer::CleanupServers() {        if ( !CORBA::is_nil(orb) ) {            log(Info) << "Cleaning up ControlTaskServers..."<<endlog();            ServerMap::iterator it = servers.begin();            while ( !servers.empty() ){                delete servers.begin()->second;            }            log() << "Cleanup done."<<endlog();        }    }    void ControlTaskServer::ShutdownOrb(bool wait_for_completion)     {        Logger::In in("ShutdownOrb");        DoShutdownOrb(wait_for_completion);    }    void ControlTaskServer::DoShutdownOrb(bool wait_for_completion)     {        if ( CORBA::is_nil(orb) ) {            log(Error) << "Orb Shutdown...failed! Orb is nil." << endlog();            return;        }        try {            log(Info) << "Orb Shutdown...";            if (wait_for_completion)                log(Info)<<"waiting..."<<endlog();            orb->shutdown( wait_for_completion );            log(Info) << "done." << endlog();        }        catch (CORBA::Exception &e) {            log(Error) << "Orb Shutdown...failed! CORBA exception raised." << endlog();            log() << e._info().c_str() << endlog();            return;        }    }    void ControlTaskServer::RunOrb()    {        if ( CORBA::is_nil(orb) ) {            log(Error) << "RunOrb...failed! Orb is nil." << endlog();            return;        }        try {            log(Info) <<"Entering orb->run()."<<endlog();            orb->run();            log(Info) <<"Breaking out of orb->run()."<<endlog();        }        catch (CORBA::Exception &e) {            log(Error) << "Orb Run : CORBA exception raised!" << endlog();            log() << e._info().c_str() << endlog();        }    }    /**     * Class which runs an orb in an Orocos thread.     */    struct OrbRunner        : public NonPeriodicActivity    {        OrbRunner()            : NonPeriodicActivity(RTT::OS::LowestPriority)        {}        void loop()        {            Logger::In in("OrbRunner");            ControlTaskServer::RunOrb();        }        bool breakLoop()        {            return true;        }        void finalize()        {            Logger::In in("OrbRunner");            log(Info) <<"Safely stopped."<<endlog();        }    };    void ControlTaskServer::ThreadOrb()    {        Logger::In in("ThreadOrb");        if ( CORBA::is_nil(orb) ) {            log(Error) << "ThreadOrb...failed! Orb is nil." << endlog();            return;        }        if (orbrunner != 0) {            log(Error) <<"Orb already running in a thread."<<endlog();        } else {            log(Info) <<"Starting Orb in a thread."<<endlog();            orbrunner = new OrbRunner();            orbrunner->start();        }    }    void ControlTaskServer::DestroyOrb()    {        Logger::In in("DestroyOrb");        if ( CORBA::is_nil(orb) ) {            log(Error) << "DestroyOrb...failed! Orb is nil." << endlog();            return;        }        if (orbrunner) {            orbrunner->stop();            delete orbrunner;            orbrunner = 0;        }        try {            // Destroy the POA, waiting until the destruction terminates            //poa->destroy (1, 1);            CleanupServers();            orb->destroy();            log(Info) <<"Orb destroyed."<<endlog();        }        catch (CORBA::Exception &e) {            log(Error) << "Orb Destroy : CORBA exception raised!" << endlog();            log() << e._info().c_str() << endlog();        }    }    ControlTaskServer* ControlTaskServer::Create(TaskContext* tc, bool use_naming) {        if ( !orb )            return 0;        if ( servers.count(tc) ) {            log(Debug) << "Returning existing ControlTaskServer for "<<tc->getName()<<endlog();            return servers.find(tc)->second;        }        // create new:        log(Info) << "Creating new ControlTaskServer for "<<tc->getName()<<endlog();        ControlTaskServer* cts = new ControlTaskServer(tc, use_naming);        return cts;    }    ControlTask_ptr ControlTaskServer::CreateServer(TaskContext* tc, bool use_naming) {        if ( !orb )            return 0;        if ( servers.count(tc) ) {            log(Debug) << "Returning existing ControlTaskServer for "<<tc->getName()<<endlog();            return servers.find(tc)->second->server();        }        for (ControlTaskProxy::PMap::iterator it = ControlTaskProxy::proxies.begin(); it != ControlTaskProxy::proxies.end(); ++it)            if ( (it->second) == tc ) {                log(Debug) << "Returning server of Proxy for "<<tc->getName()<<endlog();                return ControlTask::_duplicate(it->first);            }        // create new:        log(Info) << "Creating new ControlTaskServer for "<<tc->getName()<<endlog();        ControlTaskServer* cts = new ControlTaskServer(tc, use_naming);        return cts->server();    }    Corba::ControlTask_ptr ControlTaskServer::server() const    {        return Corba::ControlTask::_duplicate(mtask.in());    }}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -