Skip to content

Commit a0de962

Browse files
Synchronize changes from 1.6 master branch [ci skip]
cb90339 Make server resource file checksumming code memory-efficient (PR #3924) e0ce8b6 Update client en_US pot
2 parents 10010fa + cb90339 commit a0de962

File tree

4 files changed

+14
-16
lines changed

4 files changed

+14
-16
lines changed

Client/mods/deathmatch/logic/CResource.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,10 +317,7 @@ void CResource::Load()
317317
else if (pResourceFile->IsAutoDownload())
318318
{
319319
// Check the file contents
320-
if (CChecksum::GenerateChecksumFromFileUnsafe(pResourceFile->GetName()) == pResourceFile->GetServerChecksum())
321-
{
322-
}
323-
else
320+
if (CChecksum::GenerateChecksumFromFileUnsafe(pResourceFile->GetName()) != pResourceFile->GetServerChecksum())
324321
{
325322
HandleDownloadedFileTrouble(pResourceFile, false);
326323
}

Server/mods/deathmatch/logic/CResource.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -510,13 +510,14 @@ std::future<SString> CResource::GenerateChecksumForFile(CResourceFile* pResource
510510
if (!GetFilePath(pResourceFile->GetName(), strPath))
511511
return SString();
512512

513-
std::vector<char> buffer;
514-
FileLoad(strPath, buffer);
515-
uint uiFileSize = buffer.size();
516-
const char* pFileContents = uiFileSize ? buffer.data() : "";
517-
CChecksum Checksum = CChecksum::GenerateChecksumFromBuffer(pFileContents, uiFileSize);
518-
pResourceFile->SetLastChecksum(Checksum);
519-
pResourceFile->SetLastFileSize(uiFileSize);
513+
auto checksumOrError = CChecksum::GenerateChecksumFromFile(strPath);
514+
if (std::holds_alternative<std::string>(checksumOrError))
515+
{
516+
return SString(std::get<std::string>(checksumOrError));
517+
}
518+
519+
pResourceFile->SetLastChecksum(std::get<CChecksum>(checksumOrError));
520+
pResourceFile->SetLastFileSizeHint(FileSize(strPath));
520521

521522
// Check if file is blocked
522523
char szHashResult[33];
@@ -547,7 +548,7 @@ std::future<SString> CResource::GenerateChecksumForFile(CResourceFile* pResource
547548

548549
if (pResourceFile->GetLastChecksum() != cachedChecksum)
549550
{
550-
if (!FileSave(strCachedFilePath, pFileContents, uiFileSize))
551+
if (!FileCopy(strPath, strCachedFilePath))
551552
{
552553
return SString("Could not copy '%s' to '%s'\n", *strPath, *strCachedFilePath);
553554
}

Server/mods/deathmatch/logic/CResourceFile.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class CResourceFile
4545
eResourceType m_type;
4646
class CLuaMain* m_pVM;
4747
CChecksum m_checksum; // Checksum last time this was loaded, generated by GenerateChecksum()
48-
uint m_uiFileSize;
48+
uint m_uiFileSizeHint;
4949
map<string, string> m_attributeMap; // Map of attributes from the meta.xml file
5050

5151
public:
@@ -65,9 +65,9 @@ class CResourceFile
6565

6666
CChecksum GetLastChecksum() { return m_checksum; }
6767
void SetLastChecksum(CChecksum checksum) { m_checksum = checksum; }
68-
void SetLastFileSize(uint uiFileSize) { m_uiFileSize = uiFileSize; }
68+
void SetLastFileSizeHint(uint uiFileSizeHint) { m_uiFileSizeHint = uiFileSizeHint; }
6969

70-
double GetApproxSize() { return m_uiFileSize; } // Only used by download counters
70+
uint GetSizeHint() { return m_uiFileSizeHint; } // Only used by download counters
7171
string GetMetaFileAttribute(const string& key) { return m_attributeMap[key]; }
7272
SString GetCachedPathFilename(bool bForceClientCachePath = false);
7373
};

Server/mods/deathmatch/logic/packets/CResourceStartPacket.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ bool CResourceStartPacket::Write(NetBitStreamInterface& BitStream) const
115115
CChecksum checksum = (*iter)->GetLastChecksum();
116116
BitStream.Write(checksum.ulCRC);
117117
BitStream.Write((const char*)checksum.md5.data, sizeof(checksum.md5.data));
118-
BitStream.Write((*iter)->GetApproxSize());
118+
BitStream.Write((double)(*iter)->GetSizeHint()); // Has to be double for bitstream format compatibility
119119
if ((*iter)->GetType() == CResourceScriptItem::RESOURCE_FILE_TYPE_CLIENT_FILE)
120120
{
121121
CResourceClientFileItem* pRCFItem = reinterpret_cast<CResourceClientFileItem*>(*iter);

0 commit comments

Comments
 (0)