bool NetworkManager::update()
{
	if(!mIsStarted)
		return true;

	RakNet::Packet *packet;	
	for (packet = mRakPeer->Receive(); packet; 
		mRakPeer->DeallocatePacket(packet), packet = mRakPeer->Receive())
	{
		switch (packet->data[0])
		{
		case ID_CONNECTION_ATTEMPT_FAILED:
			Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
				"ID_CONNECTION_ATTEMPT_FAILED", Ogre::LML_CRITICAL );
			upAndRunning = false;
			mConnectAtemp = false;
			return false;
			break;
		case ID_NO_FREE_INCOMING_CONNECTIONS:
			Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
				"ID_NO_FREE_INCOMING_CONNECTIONS", Ogre::LML_CRITICAL);
			upAndRunning = false;
			mConnectAtemp = false;
			return false;
			break;
		case ID_CONNECTION_REQUEST_ACCEPTED:
			Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
				"ID_CONNECTION_REQUEST_ACCEPTED" );
			if(!mServer)
			{
				////this is a client, get the client external address relative to server
				//mNetworkID = mRakPeer->GetExternalID(packet->systemAddress);
				mConnectAtemp = false;
			}
			upAndRunning = true;
			return false;
			break;
		case ID_NEW_INCOMING_CONNECTION:
			{
				Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
					"ID_NEW_INCOMING_CONNECTION from " + packet->systemAddress.ToString() ); 
				//send current map name
				RakNet::BitStream bStream;
				RakNet::RakString mapName(GameLoadSaveManager::getSingletonPtr()->GetMapName().c_str());
				RakNet::RakString mapVersion(GameLoadSaveManager::getSingletonPtr()->GetMapVersion().c_str());
								
				
				bStream.Write((RakNet::MessageID)CUSTOMID_MAP_NAME);
				bStream.Write(mapName);
				bStream.Write(mapVersion);
				mRakPeer->Send(&bStream, LOW_PRIORITY, RELIABLE, 0, packet->systemAddress, false);
				break;
			}
		case ID_DISCONNECTION_NOTIFICATION:
			if(mServer)
			{
				Ogre::String id = packet->systemAddress.ToString();
				Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
					"ID_DISCONNECTION_NOTIFICATION from client " + id );
				mAirplaneManager->destroyAirplane(packet->guid);
					
			}
			else
			{
				mConnectAtemp = false;
				Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
					"ID_DISCONNECTION_NOTIFICATION from server " + packet->systemAddress.ToString() 
					, Ogre::LML_CRITICAL);
				upAndRunning = false;
				return false;
			}
			break;
		case ID_CONNECTION_LOST:
			if(mServer)
			{
				Ogre::String id = packet->systemAddress.ToString();
				Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
					"ID_CONNECTION_LOST from client " + id,
					Ogre::LML_CRITICAL);
				mAirplaneManager->destroyAirplane(packet->guid);
			}
			else
			{
				mConnectAtemp = false;
				Ogre::LogManager::getSingletonPtr()->logMessage(RealToys::logMessagePrefix +
					"ID_CONNECTION_LOST from server " + packet->systemAddress.ToString(), 
					Ogre::LML_CRITICAL);
				upAndRunning = false;
				return false;
			}
			break;
		case ID_UNCONNECTED_PONG:
			// Found the server
			if(!upAndRunning && mWaitForPong)			
			{
				mWaitForPong = false;
				if(!mRakPeer->Connect(packet->systemAddress.ToString(false),packet->systemAddress.GetPort(),0,0,0))
				{
					Ogre::LogManager::getSingletonPtr()
						->logMessage(RealToys::logMessagePrefix + "Client peer connect failed");
					mConnectAtemp = false;				
					upAndRunning = false;
					return false;
				}
				mConnectAtemp = true;				
			}
			break;
		default:
			recieveCustomPacket(packet);
			break;
		}
	}
	
	return upAndRunning;
}
void QGeoTiledMapData::updateMapVersion()
{
    Q_D(QGeoTiledMapData);
    d->changeMapVersion(mapVersion());
}