// this just wraps ALL the code in total catch block int Kernel::run(int argc, char const * argv[], const std::string& appName) { m_appName = appName; ProgramArgs args; try { doSwitches(argc, argv, args); } catch (const pdal_error& e) { Utils::printError(e.what()); return 1; } if (m_showHelp) { outputHelp(args); return 0; } int startup_status = doStartup(); if (startup_status) return startup_status; int execution_status = doExecution(args); // note we will try to shutdown cleanly even if we got an error condition // in the execution phase int shutdown_status = doShutdown(); if (execution_status) return execution_status; return shutdown_status; }
void QueueThread::run() { coreprintln("@run begin"); while(!m_shutDown) { if (m_inStartup) { m_shutDown = !doStartup(); } else { // Else read from m_guiChannel and send to Nav2APIImpl nav2Reply //::sleep(4); WFAPISync sync(&m_guiMonitor); isab::Buffer buf; m_guiChannel->readData(&buf, &m_guiMonitor); if (buf.getLength() != 0) { #if 1 m_nav2API->nav2Reply(buf); #else while (buf.remaining() > 4) { nav2log << "QueueThread calling nav2Reply bytes left " << buf.remaining() << endl; m_nav2API->nav2Reply(buf); buf.alignReadPos32bit(); } #endif } else { // Wait for data m_guiMonitor.wait(); } } } // By deleting Nav2 it starts shutting down and waits until // it is shut down. So this is a blocking call. coreprintln("thread loop finished, deleting Nav2.."); m_nav2API->deleteNav2(); coreprintln("@run end"); }
bool NetworkManager::start(bool isServer, Ogre::ushort serverPort, Ogre::String serverIP) { mServer = isServer; RakNet::Time waitTime = 10000; RakNet::Time prevTime = 0; if(isServer) { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Starting network as " + "server on port " + Ogre::StringConverter::toString(serverPort) ); } else { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Starting network as " + "client to server " + serverIP + " on port " + Ogre::StringConverter::toString(serverPort) ); } mAirplaneManager = AirplaneManager::getSingletonPtr(); upAndRunning = false; mConnectAtemp = false; mWaitForPong = false; RakNet::SocketDescriptor sd; mRakPeer = RakNet::RakPeerInterface::GetInstance(); if(isServer) { sd.port = serverPort; mReplicaManager = RT_ReplicaManager(mSceneMgr, mWorld); } else { sd.port = 0; mReplicaManager = RT_ReplicaManager(mSceneMgr); } mReplicaManager.SetDefaultPacketReliability(UNRELIABLE_SEQUENCED); mReplicaManager.SetDefaultPacketPriority(HIGH_PRIORITY); // The network ID authority is the system that creates the common numerical identifier used to lookup pointers (the server here). //mNetworkIdManager.SetIsNetworkIDAuthority(isServer); // ObjectMemberRPC, AutoRPC for objects, and ReplicaManager3 require that you call SetNetworkIDManager() mReplicaManager.SetNetworkIDManager(&mNetworkIdManager); // Setup RPC3 system and classes //mRPCIdManager.SetIsNetworkIDAuthority(true); mRPC3Inst.SetNetworkIDManager(&mRPCIdManager); this->SetNetworkIDManager(&mRPCIdManager); RakNet::NetworkID id0 = 0; this->SetNetworkID(id0); RPC3_REGISTER_FUNCTION(&mRPC3Inst, &NetworkManager::createAirplane); RPC3_REGISTER_FUNCTION(&mRPC3Inst, &NetworkManager::processAirplaneInput); // Start RakNet, up to 32 connections if the server if(!doStartup(isServer, sd)) { return false; } mRakPeer->AttachPlugin(&mReplicaManager); mRakPeer->AttachPlugin(&mRPC3Inst); mNetworkID = mRakPeer->GetGuidFromSystemAddress(RakNet::UNASSIGNED_SYSTEM_ADDRESS); // The server should allow systems to connect. Clients do not need to unless we want to transmit messages directly between systems or to use RakVoice if (isServer) { // mRakPeer->SetMaximumIncomingConnections(RealToys::maxClients-1); mRakPeer->SetMaximumIncomingConnections(0); //will not accept connections until setCurrentMap is called //mNetworkID = RealToys::serverPlayerID; } else { if(serverIP == "255.255.255.255") { if(mRakPeer->Ping( serverIP.c_str(), serverPort, true, 0 ) ) { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Client will try to search for servers on LAN"); mWaitForPong = true; } else { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Client PING failed"); return false; } } else { if(!doConnect(serverIP, serverPort)) { return false; } } } mIsStarted = true; if(isServer) { upAndRunning = true; } else { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Trying to connect to server" ); //"update" until receives a package saying if it was a successful connection or not prevTime = RakNet::GetTime(); while(!upAndRunning && (mConnectAtemp || mWaitForPong) && waitTime > 0) { update(); waitTime-=(RakNet::GetTime()-prevTime); prevTime = RakNet::GetTime(); } } if(upAndRunning) { mAirplaneManager->setPlayerID(mNetworkID); ScoresManager::getSingletonPtr()->setLocalSysAddress(mNetworkID); Ogre::String addrs( mNetworkID.ToString() ); if(mServer) addrs += " (server)"; Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Network started " + addrs); } else { Ogre::LogManager::getSingletonPtr() ->logMessage(RealToys::logMessagePrefix + "Network failed to start" ); } return upAndRunning; }