Path: blob/main/src/traci-server/TraCIServerAPI_VariableSpeedSign.cpp
169665 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file TraCIServerAPI_VariableSpeedSign.cpp14/// @author Jakob Erdmann15/// @date 16.03.202016///17// APIs for getting/setting variable speed sign values via TraCI18/****************************************************************************/19#include <config.h>2021#include <microsim/MSNet.h>22#include <microsim/MSEdge.h>23#include <microsim/MSStoppingPlace.h>24#include <libsumo/VariableSpeedSign.h>25#include <libsumo/TraCIConstants.h>26#include "TraCIServerAPI_VariableSpeedSign.h"272829// ===========================================================================30// method definitions31// ===========================================================================32bool33TraCIServerAPI_VariableSpeedSign::processGet(TraCIServer& server, tcpip::Storage& inputStorage,34tcpip::Storage& outputStorage) {35const int variable = inputStorage.readUnsignedByte();36const std::string id = inputStorage.readString();37server.initWrapper(libsumo::RESPONSE_GET_VARIABLESPEEDSIGN_VARIABLE, variable, id);38try {39if (!libsumo::VariableSpeedSign::handleVariable(id, variable, &server, &inputStorage)) {40return server.writeErrorStatusCmd(libsumo::CMD_GET_VARIABLESPEEDSIGN_VARIABLE, "Get VariableSpeedSign Variable: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);41}42} catch (libsumo::TraCIException& e) {43return server.writeErrorStatusCmd(libsumo::CMD_GET_VARIABLESPEEDSIGN_VARIABLE, e.what(), outputStorage);44}45server.writeStatusCmd(libsumo::CMD_GET_VARIABLESPEEDSIGN_VARIABLE, libsumo::RTYPE_OK, "", outputStorage);46server.writeResponseWithLength(outputStorage, server.getWrapperStorage());47return true;48}495051bool52TraCIServerAPI_VariableSpeedSign::processSet(TraCIServer& server, tcpip::Storage& inputStorage,53tcpip::Storage& outputStorage) {54std::string warning = ""; // additional description for response55// variable56int variable = inputStorage.readUnsignedByte();57if (variable != libsumo::VAR_PARAMETER) {58return server.writeErrorStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, "Change VariableSpeedSign State: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);59}60// id61std::string id = inputStorage.readString();6263try {64// process65switch (variable) {66case libsumo::VAR_PARAMETER: {67if (inputStorage.readUnsignedByte() != libsumo::TYPE_COMPOUND) {68return server.writeErrorStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, "A compound object is needed for setting a parameter.", outputStorage);69}70//read itemNo71inputStorage.readInt();72std::string name;73if (!server.readTypeCheckingString(inputStorage, name)) {74return server.writeErrorStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, "The name of the parameter must be given as a string.", outputStorage);75}76std::string value;77if (!server.readTypeCheckingString(inputStorage, value)) {78return server.writeErrorStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, "The value of the parameter must be given as a string.", outputStorage);79}80libsumo::VariableSpeedSign::setParameter(id, name, value);81}82break;83default:84break;85}86} catch (libsumo::TraCIException& e) {87return server.writeErrorStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, e.what(), outputStorage);88}89server.writeStatusCmd(libsumo::CMD_SET_VARIABLESPEEDSIGN_VARIABLE, libsumo::RTYPE_OK, warning, outputStorage);90return true;91}929394/****************************************************************************/959697