SUMO - Simulation of Urban MObility
sumo_main.cpp
Go to the documentation of this file.
1 /****************************************************************************/
11 // Main for SUMO
12 /****************************************************************************/
13 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
14 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
15 /****************************************************************************/
16 //
17 // This file is part of SUMO.
18 // SUMO is free software: you can redistribute it and/or modify
19 // it under the terms of the GNU General Public License as published by
20 // the Free Software Foundation, either version 3 of the License, or
21 // (at your option) any later version.
22 //
23 /****************************************************************************/
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #ifdef HAVE_VERSION_H
36 #include <version.h>
37 #endif
38 
39 #include <ctime>
40 #include <string>
41 #include <iostream>
42 #include <microsim/MSGlobals.h>
43 #include <microsim/MSNet.h>
44 #include <microsim/MSRoute.h>
46 #include <netload/NLBuilder.h>
47 #include <netload/NLHandler.h>
59 #include <utils/common/ToString.h>
60 #include <utils/xml/XMLSubSys.h>
61 #include <microsim/MSFrame.h>
64 
66 
67 #ifndef NO_TRACI
69 #endif
70 
71 
72 #ifdef CHECK_MEMORY_LEAKS
73 #include <foreign/nvwa/debug_new.h>
74 #endif
75 
76 // ===========================================================================
77 // functions
78 // ===========================================================================
79 /* -------------------------------------------------------------------------
80  * data processing methods
81  * ----------------------------------------------------------------------- */
85 MSNet*
88  MSVehicleControl* vc = 0;
90  vc = new MEVehicleControl();
91  } else {
92  vc = new MSVehicleControl();
93  }
94  MSNet* net = new MSNet(vc, new MSEventControl(),
95  new MSEventControl(), new MSEventControl());
96 #ifndef NO_TRACI
97  // need to init TraCI-Server before loading routes to catch VEHICLE_STATE_BUILT
98  TraCIServer::openSocket(std::map<int, TraCIServer::CmdExecutor>());
99 #endif
100 
102  NLDetectorBuilder db(*net);
103  NLJunctionControlBuilder jb(*net, db);
104  NLTriggerBuilder tb;
105  NLHandler handler("", *net, db, tb, eb, jb);
106  tb.setHandler(&handler);
107  NLBuilder builder(oc, *net, eb, jb, db, handler);
108  if (!builder.build()) {
109  delete net;
110  throw ProcessError();
111  }
112  return net;
113 }
114 
115 
116 /* -------------------------------------------------------------------------
117  * main
118  * ----------------------------------------------------------------------- */
119 int
120 main(int argc, char** argv) {
122  // give some application descriptions
123  oc.setApplicationDescription("A microscopic road traffic simulation.");
124  oc.setApplicationName("sumo", "SUMO Version " VERSION_STRING);
125  int ret = 0;
126  MSNet* net = 0;
127  try {
128  // initialise subsystems
129  XMLSubSys::init();
131  OptionsIO::setArgs(argc, argv);
133  if (oc.processMetaOptions(argc < 2)) {
135  return 0;
136  }
137  XMLSubSys::setValidation(oc.getString("xml-validation"), oc.getString("xml-validation.net"));
138  if (!MSFrame::checkOptions()) {
139  throw ProcessError();
140  }
144  // load the net
145  net = load(oc);
146  if (net != 0) {
147  ret = net->simulate(string2time(oc.getString("begin")), string2time(oc.getString("end")));
148  }
149  } catch (const ProcessError& e) {
150  if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
151  WRITE_ERROR(e.what());
152  }
153  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
154  ret = 1;
155 #ifndef _DEBUG
156  } catch (const std::exception& e) {
157  if (std::string(e.what()) != std::string("")) {
158  WRITE_ERROR(e.what());
159  }
160  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
161  ret = 1;
162  } catch (...) {
163  MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false);
164  ret = 1;
165 #endif
166  }
167  delete net;
169  return ret;
170 }
171 
172 
173 /****************************************************************************/
void setHandler(NLHandler *handler)
Sets the parent handler to use for nested parsing.
static void init()
Initialises the xml-subsystem.
Definition: XMLSubSys.cpp:58
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
Definition: MsgHandler.cpp:80
Builds detectors for microsim.
static void getOptions(const bool commandLineOnly=false)
Parses the command line arguments and loads the configuration.
Definition: OptionsIO.cpp:72
The main interface for loading a microsim.
Definition: NLBuilder.h:68
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme)
Enables or disables validation.
Definition: XMLSubSys.cpp:69
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
static MTRand * getParsingRNG()
int simulate(SUMOTime start, SUMOTime stop)
Simulates from timestep start to stop.
Definition: MSNet.cpp:306
static void close()
Closes all of an applications subsystems.
int main(int argc, char **argv)
Definition: sumo_main.cpp:120
The simulated network and simulation perfomer.
Definition: MSNet.h:93
static void setArgs(int argc, char **argv)
Stores the command line arguments for later parsing.
Definition: OptionsIO.cpp:65
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:69
static void initRandGlobal(MTRand *which=0)
Reads the given random number options and initialises the random number generator in accordance...
Definition: RandHelper.cpp:68
static void fillOptions()
Inserts options used by the simulation into the OptionsCont-singleton.
Definition: MSFrame.cpp:69
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
Builder of microsim-junctions and tls.
bool processMetaOptions(bool missingOptions)
Checks for help and configuration output, returns whether we should exit.
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:46
The class responsible for building and deletion of vehicles (gui-version)
#define VERSION_STRING
Definition: config.h:225
The XML-Handler for network loading.
Definition: NLHandler.h:84
static bool checkOptions()
Checks the set options.
Definition: MSFrame.cpp:445
virtual bool build()
Builds and initialises the simulation.
Definition: NLBuilder.cpp:122
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
static void openSocket(const std::map< int, CmdExecutor > &execs)
Initialises the server.
void inform(std::string msg, bool addType=true)
adds a new error to the list
Definition: MsgHandler.cpp:89
A storage for options typed value containers)
Definition: OptionsCont.h:99
static void setMSGlobals(OptionsCont &oc)
Sets the global microsim-options.
Definition: MSFrame.cpp:520
The class responsible for building and deletion of vehicles.
MSNet * load(OptionsCont &oc)
Definition: sumo_main.cpp:86
Builds trigger objects for microsim.
static void initOutputOptions()
Definition: MsgHandler.cpp:197
static bool gUseMesoSim
Definition: MSGlobals.h:90
Stores time-dependant events and executes them at the proper time.
Interface for building edges.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.