Remove all gamepak FileSystem<->Async[Client|Server] code

This commit is contained in:
dhewg 2012-07-03 23:52:35 +02:00
parent b049ea78e9
commit cac32559e7
6 changed files with 23 additions and 59 deletions

View file

@ -7,7 +7,6 @@ cmake_minimum_required(VERSION 2.6)
# osx: -weak_framework ? # osx: -weak_framework ?
# maybe add these as options: # maybe add these as options:
# BUILD_GAMEPAK
# TARGET_MONO # TARGET_MONO
# SETUP # SETUP
# SDK -D_D3SDK # SDK -D_D3SDK

View file

@ -359,9 +359,9 @@ public:
virtual void CreateOSPath( const char *OSPath ); virtual void CreateOSPath( const char *OSPath );
virtual bool FileIsInPAK( const char *relativePath ); virtual bool FileIsInPAK( const char *relativePath );
virtual void UpdatePureServerChecksums( void ); virtual void UpdatePureServerChecksums( void );
virtual fsPureReply_t SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int gamePakChecksum, int missingChecksums[ MAX_PURE_PAKS ], int *missingGamePakChecksum ); virtual fsPureReply_t SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int missingChecksums[ MAX_PURE_PAKS ] );
virtual void GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ], int OS, int *gamePakChecksum ); virtual void GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ] );
virtual void SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int gamePakChecksum ); virtual void SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ] );
virtual void ClearPureChecksums( void ); virtual void ClearPureChecksums( void );
virtual int GetOSMask( void ); virtual int GetOSMask( void );
virtual int ReadFile( const char *relativePath, void **buffer, ID_TIME_T *timestamp ); virtual int ReadFile( const char *relativePath, void **buffer, ID_TIME_T *timestamp );
@ -385,7 +385,7 @@ public:
virtual bool HasD3XP( void ); virtual bool HasD3XP( void );
virtual bool RunningD3XP( void ); virtual bool RunningD3XP( void );
virtual void CopyFile( const char *fromOSPath, const char *toOSPath ); virtual void CopyFile( const char *fromOSPath, const char *toOSPath );
virtual int ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ], bool isBinary ); virtual int ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ] );
virtual idFile * MakeTemporaryFile( void ); virtual idFile * MakeTemporaryFile( void );
virtual int AddZipFile( const char *path ); virtual int AddZipFile( const char *path );
virtual findFile_t FindFile( const char *path, bool scheduleAddons ); virtual findFile_t FindFile( const char *path, bool scheduleAddons );
@ -435,9 +435,6 @@ private:
bool loadedFileFromDir; // set to true once a file was loaded from a directory - can't switch to pure anymore bool loadedFileFromDir; // set to true once a file was loaded from a directory - can't switch to pure anymore
idList<int> restartChecksums; // used during a restart to set things in right order idList<int> restartChecksums; // used during a restart to set things in right order
idList<int> addonChecksums; // list of checksums that should go to the search list directly ( for restarts ) idList<int> addonChecksums; // list of checksums that should go to the search list directly ( for restarts )
int restartGamePakChecksum;
int gameDLLChecksum; // the checksum of the last loaded game DLL
int gamePakChecksum; // the checksum of the pak holding the loaded game DLL
int gamePakForOS[ MAX_GAME_OS ]; int gamePakForOS[ MAX_GAME_OS ];
@ -515,7 +512,6 @@ idFileSystemLocal::idFileSystemLocal( void ) {
dir_cache_count = 0; dir_cache_count = 0;
d3xp = 0; d3xp = 0;
loadedFileFromDir = false; loadedFileFromDir = false;
restartGamePakChecksum = 0;
memset( &backgroundThread, 0, sizeof( backgroundThread ) ); memset( &backgroundThread, 0, sizeof( backgroundThread ) );
backgroundThread_exit = false; backgroundThread_exit = false;
addonPaks = NULL; addonPaks = NULL;
@ -2390,9 +2386,6 @@ void idFileSystemLocal::Startup( void ) {
} }
common->FatalError( "Failed to restart with pure mode restrictions for server connect" ); common->FatalError( "Failed to restart with pure mode restrictions for server connect" );
} }
// also the game pak checksum
// we could check if the game pak is actually present, but we would not be restarting if there wasn't one @ first pure check
gamePakChecksum = restartGamePakChecksum;
} }
// add our commands // add our commands
@ -2477,12 +2470,11 @@ pack_t* idFileSystemLocal::GetPackForChecksum( int checksum, bool searchAddons )
idFileSystemLocal::ValidateDownloadPakForChecksum idFileSystemLocal::ValidateDownloadPakForChecksum
=============== ===============
*/ */
int idFileSystemLocal::ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ], bool isBinary ) { int idFileSystemLocal::ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ] ) {
int i; int i;
idStrList testList; idStrList testList;
idStr name; idStr name;
idStr relativePath; idStr relativePath;
bool pakBinary;
pack_t *pak = GetPackForChecksum( checksum ); pack_t *pak = GetPackForChecksum( checksum );
if ( !pak ) { if ( !pak ) {
@ -2497,14 +2489,6 @@ int idFileSystemLocal::ValidateDownloadPakForChecksum( int checksum, char path[
common->DPrintf( "%s is not a donwloadable pak\n", pak->pakFilename.c_str() ); common->DPrintf( "%s is not a donwloadable pak\n", pak->pakFilename.c_str() );
return 0; return 0;
} }
// check the binary
// a pure server sets the binary flag when starting the game
assert( pak->binary != BINARY_UNKNOWN );
pakBinary = ( pak->binary == BINARY_YES ) ? true : false;
if ( isBinary != pakBinary ) {
common->DPrintf( "%s binary flag mismatch\n", pak->pakFilename.c_str() );
return 0;
}
// extract a path that includes the fs_game: != OSPathToRelativePath // extract a path that includes the fs_game: != OSPathToRelativePath
testList.Append( fs_savepath.GetString() ); testList.Append( fs_savepath.GetString() );
@ -2550,7 +2534,7 @@ DLL:
the checksum of the pak containing the DLL is maintained seperately, the server can send different replies by OS the checksum of the pak containing the DLL is maintained seperately, the server can send different replies by OS
===================== =====================
*/ */
fsPureReply_t idFileSystemLocal::SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int _gamePakChecksum, int missingChecksums[ MAX_PURE_PAKS ], int *missingGamePakChecksum ) { fsPureReply_t idFileSystemLocal::SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int missingChecksums[ MAX_PURE_PAKS ] ) {
pack_t *pack; pack_t *pack;
int i, j, imissing; int i, j, imissing;
bool success = true; bool success = true;
@ -2558,8 +2542,6 @@ fsPureReply_t idFileSystemLocal::SetPureServerChecksums( const int pureChecksums
imissing = 0; imissing = 0;
missingChecksums[ 0 ] = 0; missingChecksums[ 0 ] = 0;
assert( missingGamePakChecksum );
*missingGamePakChecksum = 0;
if ( pureChecksums[ 0 ] == 0 ) { if ( pureChecksums[ 0 ] == 0 ) {
ClearPureChecksums(); ClearPureChecksums();
@ -2653,20 +2635,13 @@ fsPureReply_t idFileSystemLocal::SetPureServerChecksums( const int pureChecksums
idFileSystemLocal::GetPureServerChecksums idFileSystemLocal::GetPureServerChecksums
===================== =====================
*/ */
void idFileSystemLocal::GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ], int OS, int *_gamePakChecksum ) { void idFileSystemLocal::GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ] ) {
int i; int i;
for ( i = 0; i < serverPaks.Num(); i++ ) { for ( i = 0; i < serverPaks.Num(); i++ ) {
checksums[ i ] = serverPaks[ i ]->checksum; checksums[ i ] = serverPaks[ i ]->checksum;
} }
checksums[ i ] = 0; checksums[ i ] = 0;
if ( _gamePakChecksum ) {
if ( OS >= 0 ) {
*_gamePakChecksum = gamePakForOS[ OS ];
} else {
*_gamePakChecksum = gamePakChecksum;
}
}
} }
/* /*
@ -2674,7 +2649,7 @@ void idFileSystemLocal::GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ],
idFileSystemLocal::SetRestartChecksums idFileSystemLocal::SetRestartChecksums
===================== =====================
*/ */
void idFileSystemLocal::SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int gamePakChecksum ) { void idFileSystemLocal::SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ] ) {
int i; int i;
pack_t *pack; pack_t *pack;
@ -2692,7 +2667,6 @@ void idFileSystemLocal::SetRestartChecksums( const int pureChecksums[ MAX_PURE_P
restartChecksums.Append( pureChecksums[ i ] ); restartChecksums.Append( pureChecksums[ i ] );
i++; i++;
} }
restartGamePakChecksum = gamePakChecksum;
} }
/* /*
@ -2794,8 +2768,6 @@ void idFileSystemLocal::Shutdown( bool reloading ) {
addonChecksums.Clear(); addonChecksums.Clear();
} }
loadedFileFromDir = false; loadedFileFromDir = false;
gameDLLChecksum = 0;
gamePakChecksum = 0;
ClearDirCache(); ClearDirCache();

View file

@ -201,13 +201,13 @@ public:
// the function tries to configure pure mode from the paks already referenced and this new list // the function tries to configure pure mode from the paks already referenced and this new list
// it returns wether the switch was successfull, and sets the missing checksums // it returns wether the switch was successfull, and sets the missing checksums
// the process is verbosive when fs_debug 1 // the process is verbosive when fs_debug 1
virtual fsPureReply_t SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int gamePakChecksum, int missingChecksums[ MAX_PURE_PAKS ], int *missingGamePakChecksum ) = 0; virtual fsPureReply_t SetPureServerChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int missingChecksums[ MAX_PURE_PAKS ] ) = 0;
// fills a 0-terminated list of pak checksums for a client // fills a 0-terminated list of pak checksums for a client
// if OS is -1, give the current game pak checksum. if >= 0, lookup the game pak table (server only) // if OS is -1, give the current game pak checksum. if >= 0, lookup the game pak table (server only)
virtual void GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ], int OS, int *gamePakChecksum ) = 0; virtual void GetPureServerChecksums( int checksums[ MAX_PURE_PAKS ] ) = 0;
// before doing a restart, force the pure list and the search order // before doing a restart, force the pure list and the search order
// if the given checksum list can't be completely processed and set, will error out // if the given checksum list can't be completely processed and set, will error out
virtual void SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ], int gamePakChecksum ) = 0; virtual void SetRestartChecksums( const int pureChecksums[ MAX_PURE_PAKS ] ) = 0;
// equivalent to calling SetPureServerChecksums with an empty list // equivalent to calling SetPureServerChecksums with an empty list
virtual void ClearPureChecksums( void ) = 0; virtual void ClearPureChecksums( void ) = 0;
// get a mask of supported OSes. if not pure, returns -1 // get a mask of supported OSes. if not pure, returns -1
@ -265,7 +265,7 @@ public:
virtual void CopyFile( const char *fromOSPath, const char *toOSPath ) = 0; virtual void CopyFile( const char *fromOSPath, const char *toOSPath ) = 0;
// lookup a relative path, return the size or 0 if not found // lookup a relative path, return the size or 0 if not found
virtual int ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ], bool isGamePak ) = 0; virtual int ValidateDownloadPakForChecksum( int checksum, char path[ MAX_STRING_CHARS ] ) = 0;
virtual idFile * MakeTemporaryFile( void ) = 0; virtual idFile * MakeTemporaryFile( void ) = 0;

View file

@ -881,7 +881,6 @@ void idAsyncClient::ProcessReliableMessagePure( const idBitMsg &msg ) {
byte msgBuf[ MAX_MESSAGE_SIZE ]; byte msgBuf[ MAX_MESSAGE_SIZE ];
int inChecksums[ MAX_PURE_PAKS ]; int inChecksums[ MAX_PURE_PAKS ];
int i; int i;
int gamePakChecksum;
int serverGameInitId; int serverGameInitId;
session->SetGUI( NULL, NULL ); session->SetGUI( NULL, NULL );
@ -906,7 +905,7 @@ void idAsyncClient::ProcessReliableMessagePure( const idBitMsg &msg ) {
sessLocal.ExecuteMapChange( true ); sessLocal.ExecuteMapChange( true );
// upon receiving our pure list, the server will send us SCS_INGAME and we'll start getting snapshots // upon receiving our pure list, the server will send us SCS_INGAME and we'll start getting snapshots
fileSystem->GetPureServerChecksums( inChecksums, -1, &gamePakChecksum ); fileSystem->GetPureServerChecksums( inChecksums );
outMsg.Init( msgBuf, sizeof( msgBuf ) ); outMsg.Init( msgBuf, sizeof( msgBuf ) );
outMsg.WriteByte( CLIENT_RELIABLE_MESSAGE_PURE ); outMsg.WriteByte( CLIENT_RELIABLE_MESSAGE_PURE );
@ -1382,9 +1381,7 @@ idAsyncClient::ValidatePureServerChecksums
bool idAsyncClient::ValidatePureServerChecksums( const netadr_t from, const idBitMsg &msg ) { bool idAsyncClient::ValidatePureServerChecksums( const netadr_t from, const idBitMsg &msg ) {
int i, numChecksums, numMissingChecksums; int i, numChecksums, numMissingChecksums;
int inChecksums[ MAX_PURE_PAKS ]; int inChecksums[ MAX_PURE_PAKS ];
int inGamePakChecksum = 0;
int missingChecksums[ MAX_PURE_PAKS ]; int missingChecksums[ MAX_PURE_PAKS ];
int missingGamePakChecksum;
idBitMsg dlmsg; idBitMsg dlmsg;
byte msgBuf[MAX_MESSAGE_SIZE]; byte msgBuf[MAX_MESSAGE_SIZE];
@ -1402,14 +1399,14 @@ bool idAsyncClient::ValidatePureServerChecksums( const netadr_t from, const idBi
} while ( i ); } while ( i );
inChecksums[ numChecksums ] = 0; inChecksums[ numChecksums ] = 0;
fsPureReply_t reply = fileSystem->SetPureServerChecksums( inChecksums, inGamePakChecksum, missingChecksums, &missingGamePakChecksum ); fsPureReply_t reply = fileSystem->SetPureServerChecksums( inChecksums, missingChecksums );
switch ( reply ) { switch ( reply ) {
case PURE_RESTART: case PURE_RESTART:
// need to restart the filesystem with a different pure configuration // need to restart the filesystem with a different pure configuration
cmdSystem->BufferCommandText( CMD_EXEC_NOW, "disconnect" ); cmdSystem->BufferCommandText( CMD_EXEC_NOW, "disconnect" );
// restart with the right FS configuration and get back to the server // restart with the right FS configuration and get back to the server
clientState = CS_PURERESTART; clientState = CS_PURERESTART;
fileSystem->SetRestartChecksums( inChecksums, inGamePakChecksum ); fileSystem->SetRestartChecksums( inChecksums );
cmdSystem->BufferCommandText( CMD_EXEC_NOW, "reloadEngine" ); cmdSystem->BufferCommandText( CMD_EXEC_NOW, "reloadEngine" );
return false; return false;
case PURE_MISSING: { case PURE_MISSING: {
@ -1442,7 +1439,7 @@ bool idAsyncClient::ValidatePureServerChecksums( const netadr_t from, const idBi
// ask the server to send back download info // ask the server to send back download info
common->DPrintf( "missing %d paks: %s\n", numMissingChecksums, checksums.c_str() ); common->DPrintf( "missing %d paks: %s\n", numMissingChecksums, checksums.c_str() );
// store the requested downloads // store the requested downloads
GetDownloadRequest( missingChecksums, numMissingChecksums, missingGamePakChecksum ); GetDownloadRequest( missingChecksums, numMissingChecksums );
// build the download request message // build the download request message
// NOTE: in a specific function? // NOTE: in a specific function?
dlmsg.Init( msgBuf, sizeof( msgBuf ) ); dlmsg.Init( msgBuf, sizeof( msgBuf ) );
@ -1481,7 +1478,6 @@ void idAsyncClient::ProcessPureMessage( const netadr_t from, const idBitMsg &msg
byte msgBuf[ MAX_MESSAGE_SIZE ]; byte msgBuf[ MAX_MESSAGE_SIZE ];
int i; int i;
int inChecksums[ MAX_PURE_PAKS ]; int inChecksums[ MAX_PURE_PAKS ];
int gamePakChecksum;
if ( clientState != CS_CONNECTING ) { if ( clientState != CS_CONNECTING ) {
common->Printf( "clientState != CS_CONNECTING, pure msg ignored\n" ); common->Printf( "clientState != CS_CONNECTING, pure msg ignored\n" );
@ -1492,7 +1488,7 @@ void idAsyncClient::ProcessPureMessage( const netadr_t from, const idBitMsg &msg
return; return;
} }
fileSystem->GetPureServerChecksums( inChecksums, -1, &gamePakChecksum ); fileSystem->GetPureServerChecksums( inChecksums );
outMsg.Init( msgBuf, sizeof( msgBuf ) ); outMsg.Init( msgBuf, sizeof( msgBuf ) );
outMsg.WriteShort( CONNECTIONLESS_MESSAGE_ID ); outMsg.WriteShort( CONNECTIONLESS_MESSAGE_ID );
outMsg.WriteString( "pureClient" ); outMsg.WriteString( "pureClient" );
@ -2306,7 +2302,7 @@ void idAsyncClient::ProcessDownloadInfoMessage( const netadr_t from, const idBit
idAsyncClient::GetDownloadRequest idAsyncClient::GetDownloadRequest
=============== ===============
*/ */
int idAsyncClient::GetDownloadRequest( const int checksums[ MAX_PURE_PAKS ], int count, int gamePakChecksum ) { int idAsyncClient::GetDownloadRequest( const int checksums[ MAX_PURE_PAKS ], int count ) {
assert( !checksums[ count ] ); // 0-terminated assert( !checksums[ count ] ); // 0-terminated
if ( memcmp( dlChecksums, checksums, sizeof( int ) * count ) ) { if ( memcmp( dlChecksums, checksums, sizeof( int ) * count ) ) {
idRandom newreq; idRandom newreq;

View file

@ -218,7 +218,7 @@ private:
void ReadLocalizedServerString( const idBitMsg &msg, char* out, int maxLen ); void ReadLocalizedServerString( const idBitMsg &msg, char* out, int maxLen );
bool CheckTimeout( void ); bool CheckTimeout( void );
void ProcessDownloadInfoMessage( const netadr_t from, const idBitMsg &msg ); void ProcessDownloadInfoMessage( const netadr_t from, const idBitMsg &msg );
int GetDownloadRequest( const int checksums[ MAX_PURE_PAKS ], int count, int gamePakChecksum ); int GetDownloadRequest( const int checksums[ MAX_PURE_PAKS ], int count );
}; };
#endif /* !__ASYNCCLIENT_H__ */ #endif /* !__ASYNCCLIENT_H__ */

View file

@ -1551,10 +1551,9 @@ bool idAsyncServer::SendPureServerMessage( const netadr_t to, int OS ) {
idBitMsg outMsg; idBitMsg outMsg;
byte msgBuf[ MAX_MESSAGE_SIZE ]; byte msgBuf[ MAX_MESSAGE_SIZE ];
int serverChecksums[ MAX_PURE_PAKS ]; int serverChecksums[ MAX_PURE_PAKS ];
int gamePakChecksum;
int i; int i;
fileSystem->GetPureServerChecksums( serverChecksums, OS, &gamePakChecksum ); fileSystem->GetPureServerChecksums( serverChecksums );
if ( !serverChecksums[ 0 ] ) { if ( !serverChecksums[ 0 ] ) {
// happens if you run fully expanded assets with si_pure 1 // happens if you run fully expanded assets with si_pure 1
common->Warning( "pure server has no pak files referenced" ); common->Warning( "pure server has no pak files referenced" );
@ -1587,9 +1586,8 @@ bool idAsyncServer::SendReliablePureToClient( int clientNum ) {
byte msgBuf[ MAX_MESSAGE_SIZE ]; byte msgBuf[ MAX_MESSAGE_SIZE ];
int serverChecksums[ MAX_PURE_PAKS ]; int serverChecksums[ MAX_PURE_PAKS ];
int i; int i;
int gamePakChecksum;
fileSystem->GetPureServerChecksums( serverChecksums, clients[ clientNum ].OS, &gamePakChecksum ); fileSystem->GetPureServerChecksums( serverChecksums );
if ( !serverChecksums[ 0 ] ) { if ( !serverChecksums[ 0 ] ) {
// happens if you run fully expanded assets with si_pure 1 // happens if you run fully expanded assets with si_pure 1
common->Warning( "pure server has no pak files referenced" ); common->Warning( "pure server has no pak files referenced" );
@ -1872,7 +1870,6 @@ bool idAsyncServer::VerifyChecksumMessage( int clientNum, const netadr_t *from,
int i, numChecksums; int i, numChecksums;
int checksums[ MAX_PURE_PAKS ]; int checksums[ MAX_PURE_PAKS ];
int serverChecksums[ MAX_PURE_PAKS ]; int serverChecksums[ MAX_PURE_PAKS ];
int serverGamePakChecksum;
// pak checksums, in a 0-terminated list // pak checksums, in a 0-terminated list
numChecksums = 0; numChecksums = 0;
@ -1888,7 +1885,7 @@ bool idAsyncServer::VerifyChecksumMessage( int clientNum, const netadr_t *from,
} while ( i ); } while ( i );
numChecksums--; numChecksums--;
fileSystem->GetPureServerChecksums( serverChecksums, OS, &serverGamePakChecksum ); fileSystem->GetPureServerChecksums( serverChecksums );
assert( serverChecksums[ 0 ] ); assert( serverChecksums[ 0 ] );
for ( i = 0; serverChecksums[ i ] != 0; i++ ) { for ( i = 0; serverChecksums[ i ] != 0; i++ ) {
@ -2680,7 +2677,7 @@ void idAsyncServer::ProcessDownloadRequestMessage( const netadr_t from, const id
// read the checksums, build path names and pass that to the game code // read the checksums, build path names and pass that to the game code
dlPakChecksum = msg.ReadInt(); dlPakChecksum = msg.ReadInt();
while ( dlPakChecksum ) { while ( dlPakChecksum ) {
if ( !( dlSize[ numPaks ] = fileSystem->ValidateDownloadPakForChecksum( dlPakChecksum, pakbuf, false ) ) ) { if ( !( dlSize[ numPaks ] = fileSystem->ValidateDownloadPakForChecksum( dlPakChecksum, pakbuf ) ) ) {
// we pass an empty token to the game so our list doesn't get offset // we pass an empty token to the game so our list doesn't get offset
common->Warning( "client requested an unknown pak 0x%x", dlPakChecksum ); common->Warning( "client requested an unknown pak 0x%x", dlPakChecksum );
pakbuf[ 0 ] = '\0'; pakbuf[ 0 ] = '\0';