Exemplo n.º 1
0
/*
==================
idPort::GetPacket
==================
*/
bool idPort::GetPacket( netadr_t &from, void *data, int &size, int maxSize ) {
	udpMsg_t *msg;
	bool ret;

	while( 1 ) {

		ret = Net_GetUDPPacket( netSocket, from, (char *)data, size, maxSize );
		if ( !ret ) {
			break;
		}

		if ( net_forceDrop.GetInteger() > 0 ) {
			if ( rand() < net_forceDrop.GetInteger() * RAND_MAX / 100 ) {
				continue;
			}
		}

		packetsRead++;
		bytesRead += size;

		if ( net_forceLatency.GetInteger() > 0 ) {

			assert( size <= MAX_UDP_MSG_SIZE );
			msg = udpPorts[ bound_to.port ]->udpMsgAllocator.Alloc();
			memcpy( msg->data, data, size );
			msg->size = size;
			msg->address = from;
			msg->time = Sys_Milliseconds();
			msg->next = NULL;
			if ( udpPorts[ bound_to.port ]->recieveLast ) {
				udpPorts[ bound_to.port ]->recieveLast->next = msg;
			} else {
				udpPorts[ bound_to.port ]->recieveFirst = msg;
			}
			udpPorts[ bound_to.port ]->recieveLast = msg;
		} else {
			break;
		}
	}

	if ( net_forceLatency.GetInteger() > 0 || ( udpPorts[ bound_to.port] && udpPorts[ bound_to.port ]->recieveFirst ) ) {

		msg = udpPorts[ bound_to.port ]->recieveFirst;
		if ( msg && msg->time <= Sys_Milliseconds() - net_forceLatency.GetInteger() ) {
			memcpy( data, msg->data, msg->size );
			size = msg->size;
			from = msg->address;
			udpPorts[ bound_to.port ]->recieveFirst = udpPorts[ bound_to.port ]->recieveFirst->next;
			if ( !udpPorts[ bound_to.port ]->recieveFirst ) {
				udpPorts[ bound_to.port ]->recieveLast = NULL;
			}
			udpPorts[ bound_to.port ]->udpMsgAllocator.Free( msg );
			return true;
		}
		return false;

	} else {
		return ret;
	}
}
/*
========================
idUDP::GetPacket
========================
*/
bool idUDP::GetPacket( netadr_t& from, void* data, int& size, int maxSize )
{
	// DG: this fake while(1) loop pissed me off so I replaced it.. no functional change.
	if( ! Net_GetUDPPacket( netSocket, from, ( char* )data, size, maxSize ) )
	{
		return false;
	}
	
	packetsRead++;
	bytesRead += size;
	
	return true;
	// DG end
}
Exemplo n.º 3
0
/*
========================
idUDP::GetPacket
========================
*/
bool idUDP::GetPacket( netadr_t& from, void* data, int& size, int maxSize )
{
	bool ret;
	
	while( 1 )
	{
	
		ret = Net_GetUDPPacket( netSocket, from, ( char* )data, size, maxSize );
		if( !ret )
		{
			break;
		}
		
		packetsRead++;
		bytesRead += size;
		
		break;
	}
	
	return ret;
}