SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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-sim.org/
14 // Copyright (C) 2001-2014 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/MSNet.h>
43 #include <microsim/MSRoute.h>
45 #include <netload/NLBuilder.h>
46 #include <netload/NLHandler.h>
58 #include <utils/common/ToString.h>
59 #include <utils/xml/XMLSubSys.h>
60 #include <microsim/MSFrame.h>
63 
64 #ifdef HAVE_INTERNAL
65 #include <mesosim/MEVehicleControl.h>
66 #endif
67 
68 #ifndef NO_TRACI
70 #endif
71 
72 
73 #ifdef CHECK_MEMORY_LEAKS
74 #include <foreign/nvwa/debug_new.h>
75 #endif
76 
77 // ===========================================================================
78 // functions
79 // ===========================================================================
80 /* -------------------------------------------------------------------------
81  * data processing methods
82  * ----------------------------------------------------------------------- */
86 MSNet*
89  MSVehicleControl* vc = 0;
90 #ifdef HAVE_INTERNAL
92  vc = new MEVehicleControl();
93  } else {
94 #endif
95  vc = new MSVehicleControl();
96 #ifdef HAVE_INTERNAL
97  }
98 #endif
99  MSNet* net = new MSNet(vc, new MSEventControl(),
100  new MSEventControl(), new MSEventControl());
101 #ifndef NO_TRACI
102  // need to init TraCI-Server before loading routes to catch VEHICLE_STATE_BUILT
103  TraCIServer::openSocket(std::map<int, TraCIServer::CmdExecutor>());
104 #endif
105 
107  NLDetectorBuilder db(*net);
108  NLJunctionControlBuilder jb(*net, db);
109  NLTriggerBuilder tb;
110  NLHandler handler("", *net, db, tb, eb, jb);
111  tb.setHandler(&handler);
112  NLBuilder builder(oc, *net, eb, jb, db, handler);
113  if (!builder.build()) {
114  delete net;
115  throw ProcessError();
116  }
117  return net;
118 }
119 
120 
121 /* -------------------------------------------------------------------------
122  * main
123  * ----------------------------------------------------------------------- */
124 int
125 main(int argc, char** argv) {
127  // give some application descriptions
128  oc.setApplicationDescription("A microscopic road traffic simulation.");
129  oc.setApplicationName("sumo", "SUMO sumo Version " + (std::string)VERSION_STRING);
130  int ret = 0;
131  MSNet* net = 0;
132  try {
133  // initialise subsystems
134  XMLSubSys::init();
136  OptionsIO::getOptions(true, argc, argv);
137  if (oc.processMetaOptions(argc < 2)) {
139  return 0;
140  }
141  XMLSubSys::setValidation(oc.getString("xml-validation"), oc.getString("xml-validation.net"));
143  if (!MSFrame::checkOptions()) {
144  throw ProcessError();
145  }
148  // load the net
149  net = load(oc);
150  if (net != 0) {
151  ret = net->simulate(string2time(oc.getString("begin")), string2time(oc.getString("end")));
152  }
153  } catch (const ProcessError& e) {
154  if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
155  WRITE_ERROR(e.what());
156  }
157  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
158  ret = 1;
159 #ifndef _DEBUG
160  } catch (const std::exception& e) {
161  if (std::string(e.what()) != std::string("")) {
162  WRITE_ERROR(e.what());
163  }
164  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
165  ret = 1;
166  } catch (...) {
167  MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false);
168  ret = 1;
169 #endif
170  }
171  delete net;
173  return ret;
174 }
175 
176 
177 /****************************************************************************/
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(bool loadConfig, int argc=0, char **argv=0)
Parses the command line arguments and loads the configuration optionally.
Definition: OptionsIO.cpp:64
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.
int simulate(SUMOTime start, SUMOTime stop)
Simulates from timestep start to stop.
Definition: MSNet.cpp:269
static void close()
Closes all of an applications subsystems.
int main(int argc, char **argv)
Definition: sumo_main.cpp:125
The simulated network and simulation perfomer.
Definition: MSNet.h:91
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:67
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:70
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:48
static MTRand myVehicleParamsRNG
A random number generator used to choose from vtype/route distributions and computing the speed facto...
#define VERSION_STRING
Definition: config.h:227
The XML-Handler for network loading.
Definition: NLHandler.h:72
static bool checkOptions()
Checks the set options.
Definition: MSFrame.cpp:377
virtual bool build()
Builds and initialises the simulation.
Definition: NLBuilder.cpp:122
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:205
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:108
static const bool gUseMesoSim
Definition: MSGlobals.h:99
static void setMSGlobals(OptionsCont &oc)
Sets the global microsim-options.
Definition: MSFrame.cpp:436
The class responsible for building and deletion of vehicles.
MSNet * load(OptionsCont &oc)
Definition: sumo_main.cpp:87
Builds trigger objects for microsim.
static void initOutputOptions()
Definition: MsgHandler.cpp:197
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.