void Connection::HandleConnect(const boost::system::error_code & error)
{
	if (error || HasError() || m_hive->HasStopped()) {
		StartError(error);
	} 
	else {
		if (m_socket.is_open()) {
			OnConnect(m_socket.remote_endpoint().address().to_string(), m_socket.remote_endpoint().port());
		}
		else {
			StartError(error);
		}
	}
}
void NetworkConnection::HandleRecv(const boost::system::error_code & error, int32_t actual_bytes)
{
	if (error || HasError() || m_service->HasStopped())
	{
        if (m_socket.is_open())
        {
            if (error == boost::asio::error::eof) //we got disconnected on the client side
            {
                OnError(error);
                //Disconnect();
            }
            else
                StartError(error);
        }
	}
	else
	{
		m_recv_buffer.resize(actual_bytes);
		OnRecv(m_recv_buffer);
		m_pending_recvs.pop_front();
		if (!m_pending_recvs.empty())
		{
			StartRecv(m_pending_recvs.front());
		}
	}
}
Exemple #3
0
void Acceptor::HandleTimer( const boost::system::error_code & error )
{
	if( error || HasError() || m_hive->HasStopped() )
	{
		StartError( error );
	}
	else
	{
		OnTimer( boost::posix_time::microsec_clock::local_time() - m_last_time );
		StartTimer();
	}
}
Exemple #4
0
void Connection::HandleSend( const boost::system::error_code &  error, std::list< std::vector< uint8_t > >::iterator itr )
{
	if( error || HasError() || m_hive->HasStopped() )
	{
		StartError( error );
	}
	else
	{
		OnSend( *itr );
		m_pending_sends.erase( itr );
		StartSend();
	}
}
void NetworkConnection::HandleDisconnect(const boost::system::error_code & error)
{
	if (error == boost::asio::error::connection_reset)
	{
		StartDisconnect();
		OnDisconnect();

	}
	else
	{
		StartError(error);
	}
}
Exemple #6
0
void Connection::HandleRecv( const boost::system::error_code & error, int32_t actual_bytes )
{
	if( error || HasError() || m_hive->HasStopped() )
	{
		StartError( error );
	}
	else
	{
		m_recv_buffer.resize( actual_bytes );
		OnRecv( m_recv_buffer );
		m_pending_recvs.pop_front();
		if( !m_pending_recvs.empty() )
		{
			StartRecv( m_pending_recvs.front() );
		}
	}
}
void NetworkConnection::HandleTimer(const boost::system::error_code & error)
{
    if (!m_socket.is_open()) //socket disconnected
    {
		if (!m_disconnect_callback.empty())
			m_disconnect_callback();
        return;
    }

	if (error || HasError() || m_service->HasStopped())
	{
        if (error != boost::asio::error::operation_aborted)
            StartError(error);
	}
	else
	{
		OnTimer(boost::posix_time::microsec_clock::local_time() - m_last_time);
		StartTimer();
	}
}
Exemple #8
0
void Acceptor::HandleAccept( const boost::system::error_code & error, boost::shared_ptr< Connection > connection )
{
	if( error || HasError() || m_hive->HasStopped() )
	{
		connection->StartError( error );
	}
	else
	{
		if( connection->GetSocket().is_open() )
		{
			connection->StartTimer();
			if( OnAccept( connection,  connection->GetSocket().remote_endpoint().address().to_string(),  connection->GetSocket().remote_endpoint().port() ) )
			{
				connection->OnAccept(  m_acceptor.local_endpoint().address().to_string(),  m_acceptor.local_endpoint().port() );
			}
		}
		else
		{
			StartError( error );
		}
	}
}