boost::shared_ptr<Packet> packet ( m_networkManager->getPackets() );
if( packet.get() )
{
switch( packet->data[0] )
{
case ID_REMOTE_DISCONNECTION_NOTIFICATION:
// Client disconnected
logger.write( "Client disconnected" );
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
logger.write( "We have connected" );
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
logger.write( "Server is full" );
break;
case ID_REMOTE_CONNECTION_LOST:
// Client lost connection
logger.write( "Client lost connection" );
break;
case ID_REMOTE_NEW_INCOMING_CONNECTION:
// New client connected
logger.write( "Client Connected" );
break;
default:
// Unhandled Packet
logger.write( boost::format( "Unhandled Packet" ) );
break;
}
m_networkManager->deletePacket( packet );
}
NetworkManager::NetworkManager()
{
logger.write( "Initializing the network manager..." );
boost::shared_ptr<RakPeerInterface> peer( RakNetworkFactory::GetRakPeerInterface() );
m_peer = peer;
}
NetworkManager::~NetworkManager()
{
}
bool NetworkManager::startConnection( const std::string& ip, int port )
{
m_peer->Startup( 1, 30, &SocketDescriptor(), 1 );
m_peer->Connect( ip.c_str(), port, 0, 0 );
if( m_peer->IsActive() )
logger.write( "Connected to server" );
return true;
}
void NetworkManager::endConnection()
{
RakNetworkFactory::DestroyRakPeerInterface( m_peer.get() );
}
boost::shared_ptr<Packet> NetworkManager::getPackets()
{
boost::shared_ptr<Packet> packet( m_peer->Receive() );
return packet;
}
void NetworkManager::deletePacket( boost::shared_ptr<Packet> packet )
{
m_peer->DeallocatePacket( packet.get() );
}