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.
|
* 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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@ -59,6 +59,11 @@ QString errorCodeToText(Message::ErrorCode ec)
|
|||||||
text = "Unknown class id";
|
text = "Unknown class id";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ErrorCode::LogMessageException:
|
||||||
|
assert(false);
|
||||||
|
text = "LogMessageException";
|
||||||
|
break;
|
||||||
|
|
||||||
case ErrorCode::Other:
|
case ErrorCode::Other:
|
||||||
assert(false);
|
assert(false);
|
||||||
text = "Other";
|
text = "Other";
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
#include "../core/objectproperty.tpp"
|
#include "../core/objectproperty.tpp"
|
||||||
#include "../core/tablemodel.hpp"
|
#include "../core/tablemodel.hpp"
|
||||||
#include "../log/log.hpp"
|
#include "../log/log.hpp"
|
||||||
|
#include "../log/logmessageexception.hpp"
|
||||||
#include "../log/memorylogger.hpp"
|
#include "../log/memorylogger.hpp"
|
||||||
#include "../board/board.hpp"
|
#include "../board/board.hpp"
|
||||||
#include "../board/tile/tiles.hpp"
|
#include "../board/tile/tiles.hpp"
|
||||||
@ -385,6 +386,26 @@ bool Session::processMessage(const Message& message)
|
|||||||
return true;
|
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)
|
catch(const std::exception& e)
|
||||||
{
|
{
|
||||||
if(message.isRequest())
|
if(message.isRequest())
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
#include "../../core/attributes.hpp"
|
#include "../../core/attributes.hpp"
|
||||||
#include "../../core/method.tpp"
|
#include "../../core/method.tpp"
|
||||||
#include "../../utils/displayname.hpp"
|
#include "../../utils/displayname.hpp"
|
||||||
|
#include "../../log/logmessageexception.hpp"
|
||||||
|
|
||||||
RailVehicleList::RailVehicleList(Object& _parent, std::string_view parentPropertyName) :
|
RailVehicleList::RailVehicleList(Object& _parent, std::string_view parentPropertyName) :
|
||||||
ObjectList<RailVehicle>(_parent, parentPropertyName),
|
ObjectList<RailVehicle>(_parent, parentPropertyName),
|
||||||
@ -36,7 +37,15 @@ RailVehicleList::RailVehicleList(Object& _parent, std::string_view parentPropert
|
|||||||
auto& world = getWorld(parent());
|
auto& world = getWorld(parent());
|
||||||
return RailVehicles::create(world, railVehicleClassId, world.getUniqueId("vehicle"));
|
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);
|
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,
|
E2022_SOCKET_CREATE_FAILED_X = LogMessageOffset::error + 2022,
|
||||||
E2023_SOCKET_IOCTL_FAILED_X = LogMessageOffset::error + 2023,
|
E2023_SOCKET_IOCTL_FAILED_X = LogMessageOffset::error + 2023,
|
||||||
E2024_UNKNOWN_LOCOMOTIVE_MFX_UID_X = LogMessageOffset::error + 2024,
|
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,
|
E9001_X_DURING_EXECUTION_OF_X_EVENT_HANDLER = LogMessageOffset::error + 9001,
|
||||||
E9999_X = LogMessageOffset::error + 9999,
|
E9999_X = LogMessageOffset::error + 9999,
|
||||||
|
|
||||||
|
|||||||
@ -115,6 +115,7 @@ class Message
|
|||||||
InvalidProperty = 3,
|
InvalidProperty = 3,
|
||||||
InvalidValue = 4,
|
InvalidValue = 4,
|
||||||
*/
|
*/
|
||||||
|
LogMessageException = 61,
|
||||||
Other = 62,
|
Other = 62,
|
||||||
Unknown = 63
|
Unknown = 63
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4314,5 +4314,9 @@
|
|||||||
{
|
{
|
||||||
"term": "message:W9001",
|
"term": "message:W9001",
|
||||||
"definition": "Execution took %1 us"
|
"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