Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4 : // This program and the accompanying materials are made available under the
5 : // terms of the Eclipse Public License 2.0 which is available at
6 : // https://www.eclipse.org/legal/epl-2.0/
7 : // This Source Code may also be made available under the following Secondary
8 : // Licenses when the conditions for such availability set forth in the Eclipse
9 : // Public License 2.0 are satisfied: GNU General Public License, version 2
10 : // or later which is available at
11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 : /****************************************************************************/
14 : /// @file TraCIServerAPI_Route.cpp
15 : /// @author Daniel Krajzewicz
16 : /// @author Laura Bieker
17 : /// @author Michael Behrisch
18 : /// @date 07.05.2009
19 : ///
20 : // APIs for getting/setting route values via TraCI
21 : /****************************************************************************/
22 : #include <config.h>
23 :
24 : #include <microsim/MSNet.h>
25 : #include <microsim/MSRoute.h>
26 : #include <microsim/MSEdge.h>
27 : #include <libsumo/Route.h>
28 : #include <libsumo/StorageHelper.h>
29 : #include <libsumo/TraCIConstants.h>
30 : #include "TraCIServerAPI_Route.h"
31 :
32 :
33 : // ===========================================================================
34 : // method definitions
35 : // ===========================================================================
36 : bool
37 187 : TraCIServerAPI_Route::processSet(TraCIServer& server, tcpip::Storage& inputStorage,
38 : tcpip::Storage& outputStorage) {
39 187 : std::string warning = ""; // additional description for response
40 : // variable
41 187 : int variable = inputStorage.readUnsignedByte();
42 187 : if (variable != libsumo::ADD && variable != libsumo::REMOVE && variable != libsumo::VAR_PARAMETER) {
43 0 : return server.writeErrorStatusCmd(libsumo::CMD_SET_ROUTE_VARIABLE, "Change Route State: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
44 : }
45 : // id
46 187 : std::string id = inputStorage.readString();
47 :
48 : try {
49 : // process
50 187 : switch (variable) {
51 : case libsumo::ADD:
52 122 : libsumo::Route::add(id, StoHelp::readTypedStringList(inputStorage, "A string list is needed for adding a new route."));
53 116 : break;
54 3 : case libsumo::REMOVE: {
55 3 : libsumo::Route::remove(id);
56 : }
57 : break;
58 : case libsumo::VAR_PARAMETER: {
59 62 : StoHelp::readCompound(inputStorage, 2, "A compound object of size 2 is needed for setting a parameter.");
60 62 : const std::string name = StoHelp::readTypedString(inputStorage, "The name of the parameter must be given as a string.");
61 62 : const std::string value = StoHelp::readTypedString(inputStorage, "The value of the parameter must be given as a string.");
62 62 : libsumo::Route::setParameter(id, name, value);
63 : }
64 62 : break;
65 : default:
66 : break;
67 : }
68 6 : } catch (libsumo::TraCIException& e) {
69 6 : return server.writeErrorStatusCmd(libsumo::CMD_SET_ROUTE_VARIABLE, e.what(), outputStorage);
70 6 : }
71 181 : server.writeStatusCmd(libsumo::CMD_SET_ROUTE_VARIABLE, libsumo::RTYPE_OK, warning, outputStorage);
72 : return true;
73 : }
74 :
75 :
76 : /****************************************************************************/
|