Skip to content

Commit b68e731

Browse files
committed
Store received savegames in save folder
1 parent 37e4166 commit b68e731

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

libs/s25main/network/GameClient.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,10 @@ bool GameClient::OnGameMessage(const GameMessage_Map_Info& msg)
928928
OnError(ClientError::InvalidMap);
929929
return true;
930930
}
931-
mapinfo.filepath = RTTRCONFIG.ExpandPath(s25::folders::mapsPlayed) / portFilename;
931+
const auto targetPath =
932+
RTTRCONFIG.ExpandPath((msg.mt == MapType::Savegame) ? s25::folders::save : s25::folders::mapsPlayed);
933+
bfs::create_directories(targetPath);
934+
mapinfo.filepath = targetPath / portFilename;
932935
mapinfo.type = msg.mt;
933936

934937
// lua script file path

tests/s25Main/network/testGameClient.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,36 @@ BOOST_DATA_TEST_CASE(ClientFollowsConnectProtocol, usesLuaScriptValues, usesLuaS
244244
}
245245
}
246246

247+
BOOST_AUTO_TEST_CASE(ClientStoresReceivedSavegamesInSaveFolder)
248+
{
249+
rttr::test::TmpFolder testUserData;
250+
rttr::test::ConfigOverride userDataOverride("USERDATA", testUserData);
251+
252+
GameClient client;
253+
GameMessageInterface& clientMsgInterface = client;
254+
TestServer server;
255+
const auto serverPort = server.tryListen();
256+
BOOST_TEST_REQUIRE(serverPort >= 0);
257+
258+
BOOST_TEST_REQUIRE(client.Connect("localhost", rttr::test::randString(10), rttr::test::randomEnum<ServerType>(),
259+
serverPort, false, false));
260+
clientMsgInterface.OnGameMessage(GameMessage_Player_Id(1));
261+
client.GetMainPlayer().sendQueue.clear();
262+
clientMsgInterface.OnGameMessage(GameMessage_Server_TypeOK(GameMessage_Server_TypeOK::StatusCode::Ok, ""));
263+
client.GetMainPlayer().sendQueue.clear();
264+
clientMsgInterface.OnGameMessage(GameMessage_Server_Password("true"));
265+
client.GetMainPlayer().sendQueue.clear();
266+
267+
const auto expectedSavePath = RTTRCONFIG.ExpandPath(s25::folders::save) / "received.sav";
268+
269+
clientMsgInterface.OnGameMessage(GameMessage_Map_Info("received.sav", MapType::Savegame, 1, 1, 0, 0));
270+
const auto msg = boost::dynamic_pointer_cast<GameMessage_MapRequest>(client.GetMainPlayer().sendQueue.pop());
271+
BOOST_TEST_REQUIRE(msg);
272+
BOOST_TEST(!msg->requestInfo);
273+
BOOST_TEST(client.GetMapType() == MapType::Savegame);
274+
BOOST_TEST(client.GetMapPath() == expectedSavePath);
275+
}
276+
247277
BOOST_AUTO_TEST_CASE(ClientDetectsMapBufferOverflow)
248278
{
249279
rttr::test::LogAccessor _suppressLogOutput;

0 commit comments

Comments
 (0)