feat(net): CDCLIENT_RELOAD master message

Appended at the end of MessageType::Master (46); the pin test is updated.
With names it tells a server which fdb copy and CDServer.sqlite to switch
to; without them it asks master to check the client's fdb now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-29 23:19:55 -05:00
parent 27a4564fec
commit b05b84ff30
4 changed files with 82 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
#include "MasterPackets.h"
#include "master/CDClientReload.h"
#include "master/DashboardMessages.h"
#include "master/DataChanged.h"
#include "master/InstanceMigration.h"
@@ -522,3 +523,27 @@ TEST(MasterPacketsTests, UgcModelsMadeBytes) {
truncated.Write<LWOOBJID>(1);
EXPECT_FALSE(read.Deserialize(truncated));
}
TEST(MasterPacketsTests, CDClientReload) {
CDClientReload reload;
reload.fdb = "cdclient-0123456789abcdef.fdb";
reload.sqlite = "CDServer-0123456789abcdef.sqlite";
ExpectHeaderThenSerialize(reload, MessageType::Master::CDCLIENT_RELOAD);
EXPECT_FALSE(reload.IsRequest());
CDClientReload request;
request.requesterId = 42;
ExpectHeaderThenSerialize(request, MessageType::Master::CDCLIENT_RELOAD);
EXPECT_TRUE(request.IsRequest());
// A name that leaves resServer, or only one of the two names, is refused
for (const auto& [fdb, sqlite] : std::vector<std::pair<std::string, std::string>>{ { "../cdclient.fdb", "CDServer.sqlite" }, { "cdclient-1.fdb", "" } }) {
CDClientReload bad;
bad.fdb = fdb;
bad.sqlite = sqlite;
RakNet::BitStream stream;
bad.Serialize(stream);
CDClientReload read;
EXPECT_FALSE(read.Deserialize(stream)) << fdb;
}
}