fix: don't allow delete of rail vehicle when in active train
Dieser Commit ist enthalten in:
Ursprung
38b76e93c8
Commit
cfb1fba8a5
@ -3,7 +3,7 @@
|
||||
*
|
||||
* This file is part of the traintastic source code.
|
||||
*
|
||||
* Copyright (C) 2019-2020 Reinder Feenstra
|
||||
* Copyright (C) 2019-2020,2023 Reinder Feenstra
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@ -59,6 +59,11 @@ QString errorCodeToText(Message::ErrorCode ec)
|
||||
text = "Unknown class id";
|
||||
break;
|
||||
|
||||
case ErrorCode::LogMessageException:
|
||||
assert(false);
|
||||
text = "LogMessageException";
|
||||
break;
|
||||
|
||||
case ErrorCode::Other:
|
||||
assert(false);
|
||||
text = "Other";
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "../core/objectproperty.tpp"
|
||||
#include "../core/tablemodel.hpp"
|
||||
#include "../log/log.hpp"
|
||||
#include "../log/logmessageexception.hpp"
|
||||
#include "../log/memorylogger.hpp"
|
||||
#include "../board/board.hpp"
|
||||
#include "../board/tile/tiles.hpp"
|
||||
@ -385,6 +386,26 @@ bool Session::processMessage(const Message& message)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch(const LogMessageException& e)
|
||||
{
|
||||
if(message.isRequest())
|
||||
{
|
||||
auto response = Message::newErrorResponse(message.command(), message.requestId(), Message::ErrorCode::LogMessageException);
|
||||
response->write(static_cast<uint32_t>(e.message()));
|
||||
response->write(e.args().size());
|
||||
for(const auto& arg : e.args())
|
||||
{
|
||||
response->write(arg);
|
||||
}
|
||||
m_connection->sendMessage(std::move(response));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// we can't report it back to the caller, so just log it.
|
||||
Log::log(*object, e.message(), e.args());
|
||||
}
|
||||
}
|
||||
catch(const std::exception& e)
|
||||
{
|
||||
if(message.isRequest())
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
#include "../../core/attributes.hpp"
|
||||
#include "../../core/method.tpp"
|
||||
#include "../../utils/displayname.hpp"
|
||||
#include "../../log/logmessageexception.hpp"
|
||||
|
||||
RailVehicleList::RailVehicleList(Object& _parent, std::string_view parentPropertyName) :
|
||||
ObjectList<RailVehicle>(_parent, parentPropertyName),
|
||||
@ -36,7 +37,15 @@ RailVehicleList::RailVehicleList(Object& _parent, std::string_view parentPropert
|
||||
auto& world = getWorld(parent());
|
||||
return RailVehicles::create(world, railVehicleClassId, world.getUniqueId("vehicle"));
|
||||
}}
|
||||
, delete_{*this, "delete", std::bind(&RailVehicleList::deleteMethodHandler, this, std::placeholders::_1)}
|
||||
, delete_{*this, "delete",
|
||||
[this](const std::shared_ptr<RailVehicle>& railVehicle)
|
||||
{
|
||||
if(railVehicle->activeTrain.value())
|
||||
{
|
||||
throw LogMessageException(LogMessage::E3001_CANT_DELETE_RAIL_VEHICLE_WHEN_IN_ACTIVE_TRAIN);
|
||||
}
|
||||
RailVehicleList::deleteMethodHandler(railVehicle);
|
||||
}}
|
||||
{
|
||||
const bool editable = contains(getWorld(parent()).state.value(), WorldState::Edit);
|
||||
|
||||
|
||||
@ -177,6 +177,7 @@ enum class LogMessage : uint32_t
|
||||
E2022_SOCKET_CREATE_FAILED_X = LogMessageOffset::error + 2022,
|
||||
E2023_SOCKET_IOCTL_FAILED_X = LogMessageOffset::error + 2023,
|
||||
E2024_UNKNOWN_LOCOMOTIVE_MFX_UID_X = LogMessageOffset::error + 2024,
|
||||
E3001_CANT_DELETE_RAIL_VEHICLE_WHEN_IN_ACTIVE_TRAIN = LogMessageOffset::error + 3001,
|
||||
E9001_X_DURING_EXECUTION_OF_X_EVENT_HANDLER = LogMessageOffset::error + 9001,
|
||||
E9999_X = LogMessageOffset::error + 9999,
|
||||
|
||||
|
||||
@ -115,6 +115,7 @@ class Message
|
||||
InvalidProperty = 3,
|
||||
InvalidValue = 4,
|
||||
*/
|
||||
LogMessageException = 61,
|
||||
Other = 62,
|
||||
Unknown = 63
|
||||
};
|
||||
|
||||
@ -4314,5 +4314,9 @@
|
||||
{
|
||||
"term": "message:W9001",
|
||||
"definition": "Execution took %1 us"
|
||||
},
|
||||
{
|
||||
"term": "message:E3001",
|
||||
"definition": "Can't delete rail vehicle when in active train"
|
||||
}
|
||||
]
|
||||
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren