Example #1
0
/// Accept handler
void Acceptor::accept( const boost::system::error_code& aError )
{
  LOG_DEBUG("Acceptor::accept()");

  // if the accept had an error, forget it
  if ( aError ) {
    LOG_ERROR("Acceptor : Error occured!");
    return;
  }

  // process the socket
  mConnection->listen();

  LOG_DEBUG("Acceptor : listen returned.");

    // forget the connection, create a new one
    mConnection = mCreator();

  LOG_DEBUG("Acceptor : creator returned.");

    // ... and asynchronously wait for an accept again
    mAcceptor.async_accept( 
        mConnection->getSocket(), 
        boost::bind( &Acceptor::accept, this, boost::asio::placeholders::error ) 
        );

  LOG_DEBUG("Acceptor : async accept returned returned.");
}
Example #2
0
Acceptor::Acceptor( boost::asio::io_service& aIOS, const std::string& aAddress, const std::string& aPort, Creator aCreator )
  : mAcceptor( aIOS ),
    mCreator( aCreator )
{
    // create a resolver, and resolve the address
    boost::asio::ip::tcp::resolver iResolver( aIOS );
    boost::asio::ip::tcp::resolver::query iQuery( aAddress, aPort );
    boost::asio::ip::tcp::endpoint iResult = *iResolver.resolve( iQuery );

    // prepare the acceptor
    mAcceptor.open( iResult.protocol() );
    mAcceptor.set_option( boost::asio::ip::tcp::acceptor::reuse_address(true) );
    mAcceptor.bind( iResult );

    // start listening
    mAcceptor.listen();

    // create first connection
    mConnection = mCreator();

    // asynchronously accept on our first worker, if succeeded, run accept
    mAcceptor.async_accept( 
        mConnection->getSocket(), 
        boost::bind( &Acceptor::accept, this, boost::asio::placeholders::error ) 
        );
    // note that this wont happen yet, because there's no io_service running
}
Example #3
0
Port* DelegateService::bindODPPort(const SpaceObjectReference& sor, PortID port) {
    PortMap* pm = getOrCreatePortMap(sor);

    PortMap::iterator it = pm->find(port);
    if (it != pm->end()) {
        // Already allocated
        return NULL;
    }

    DelegatePort* new_port = mCreator(this, sor, port);
    if (new_port != NULL) {
        (*pm)[port] = new_port;
    }
    return new_port;
}