Example #1
0
/*
* ML_Update
*/
bool ML_Update( void )
{
	int i, len, total, newpaks;
	size_t size;
	char *map, *maps, *filename;

	newpaks = FS_Rescan();
	if( !newpaks )
		return false;

	total = FS_GetFileListExt( "maps", ".bsp", NULL, &size, 0, 0 );
	if( size )
	{
		maps = ( char* )Mem_TempMalloc( size );
		FS_GetFileList( "maps", ".bsp", maps, size, 0, 0 );
		for( i = 0, len = 0; i < total; i++ )
		{
			map = maps + len;
			len += strlen( map ) + 1;

			filename = ( char * )COM_FileBase( map );
			COM_StripExtension( filename );

			// don't check for existance of each file itself, as we've just got the fresh list
			if( !ML_FilenameExistsExt( filename, true ) )
				ML_AddMap( filename, MLIST_UNKNOWN_MAPNAME );
		}
		Mem_TempFree( maps );
	}

	return true;
}
Example #2
0
/*
* ML_Restart
* Restart map list stuff
*/
void ML_Restart( qboolean forcemaps )
{
    ML_Shutdown();
    if( forcemaps )
        FS_RemoveFile( MLIST_CACHE );
    FS_Rescan();
    ML_Init();
}
Example #3
0
/*
* ML_Restart
* Restart map list stuff
*/
void ML_Restart( bool forcemaps )
{
	ML_Shutdown();
	if( forcemaps )
	{
		int filenum;
		if( FS_FOpenFile( MLIST_CACHE, &filenum, FS_WRITE|FS_CACHE ) != -1 )
			FS_FCloseFile( filenum );
	}
	FS_Rescan();
	ML_Init();
}
Example #4
0
/*
====================
CL_ProcessFile

A file has been received via the fragmentation/reassembly layer, put it in the right spot and
 see if we have finished downloading files.
====================
*/
void CL_ProcessFile( qboolean successfully_received, const char *filename )
{
	if( successfully_received)
		MsgDev( D_INFO, "Received %s\n", filename );
	else
		MsgDev( D_WARN, "Failed to download %s\n", filename );

	if( cls.downloadfileid == cls.downloadcount - 1 )
	{
		MsgDev( D_INFO, "Download completed, resuming connection\n" );
		FS_Rescan();
		BF_WriteByte( &cls.netchan.message, clc_stringcmd );
		BF_WriteString( &cls.netchan.message, "continueloading" );
		cls.downloadfileid = 0;
		cls.downloadcount = 0;
		return;
	}

	cls.downloadfileid++;
}
Example #5
0
/*
* TV_Upstream_ParseServerMessage
*/
void TV_Upstream_ParseServerMessage( upstream_t *upstream, msg_t *msg )
{
	int cmd;

	assert( upstream && upstream->state >= CA_HANDSHAKE );
	assert( msg );

	// parse the message
	while( upstream->state >= CA_HANDSHAKE )
	{
		if( msg->readcount > msg->cursize )
			TV_Upstream_Error( upstream, "Bad server message" );

		cmd = MSG_ReadByte( msg );

		if( cmd == -1 )
			break;

		// other commands
		switch( cmd )
		{
		default:
			TV_Upstream_Error( upstream, "Illegible server message" );

		case svc_nop:
			break;

		case svc_servercmd:
			if( !upstream->reliable )
			{
				int cmdNum = MSG_ReadLong( msg );
				if( cmdNum < 0 )
					TV_Upstream_Error( upstream, "Invalid cmdNum value" );
				if( cmdNum <= upstream->lastExecutedServerCommand )
				{
					MSG_ReadString( msg ); // read but ignore
					break;
				}
				upstream->lastExecutedServerCommand = cmdNum;
			}
			// fall trough
		case svc_servercs: // configstrings from demo files. they don't have acknowledge
			TV_Upstream_ParseServerCommand( upstream, msg );
			break;

		case svc_serverdata:
			if( upstream->state == CA_HANDSHAKE )
			{
				Cbuf_Execute(); // make sure any stuffed commands are done

				FS_Rescan();	// FIXME?

				TV_Upstream_ParseServerData( upstream, msg );
			}
			else
			{
				return; // ignore rest of the packet (serverdata is always sent alone)
			}
			break;

		case svc_spawnbaseline:
			TV_Upstream_ParseBaseline( upstream, msg );
			break;

		case svc_download:
			//CL_ParseDownload( msg );
			break;

		case svc_clcack:
			if( upstream->reliable )
				TV_Upstream_Error( upstream, "clack message while reliable" );
			upstream->reliableAcknowledge = (unsigned)MSG_ReadLong( msg );
			MSG_ReadLong( msg ); // ucmdAcknowledged
			break;

		case svc_frame:
			TV_Upstream_ParseFrame( upstream, msg );
			break;

		case svc_demoinfo:
			{
				int length;

				assert( upstream->demo.playing );

				length = MSG_ReadLong( msg );
				MSG_SkipData( msg, length );
			}
			break;

		case svc_playerinfo:
		case svc_packetentities:
		case svc_match:
			TV_Upstream_Error( upstream, "Out of place frame data" );
			break;

		case svc_extension:
			if( 1 )
			{
				int len;

				MSG_ReadByte( msg );			// extension id
				MSG_ReadByte( msg );			// version number
				len = MSG_ReadShort( msg );		// command length
				MSG_SkipData( msg, len );		// command data
			}
			break;
		}
	}

	// if recording demos, copy the message out
	if( upstream->demo.recording && !upstream->demo.waiting )
		TV_Upstream_WriteDemoMessage( upstream, msg );
}