/* * 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; }
/* * ML_Restart * Restart map list stuff */ void ML_Restart( qboolean forcemaps ) { ML_Shutdown(); if( forcemaps ) FS_RemoveFile( MLIST_CACHE ); FS_Rescan(); ML_Init(); }
/* * 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(); }
/* ==================== 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++; }
/* * 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 ); }