SUMO - Simulation of Urban MObility
TraCIServer Class Reference

TraCI server used to control sumo by a remote TraCI client. More...

#include <TraCIServer.h>

Inheritance diagram for TraCIServer:
Inheritance graph
Collaboration diagram for TraCIServer:
Collaboration graph

Data Structures

class  Subscription
 Representation of a subscription. More...
 

Public Types

typedef bool(* CmdExecutor) (TraCIServer &server, tcpip::Storage &inputStorage, tcpip::Storage &outputStorage)
 Definition of a method to be called for serving an associated commandID. More...
 

Public Member Functions

void collectObjectsInRange (int domain, const PositionVector &shape, SUMOReal range, std::set< std::string > &into)
 
SUMOTime getTargetTime ()
 
const std::map< MSNet::VehicleState, std::vector< std::string > > & getVehicleStateChanges () const
 
void postProcessVTD ()
 
void setVTDControlled (MSVehicle *v, MSLane *l, SUMOReal pos, SUMOReal angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
 
void vehicleStateChanged (const SUMOVehicle *const vehicle, MSNet::VehicleState to)
 Called if a vehicle changes its state. More...
 
void writeResponseWithLength (tcpip::Storage &outputStorage, tcpip::Storage &tempMsg)
 
Writing Status Messages
void writeStatusCmd (int commandId, int status, const std::string &description, tcpip::Storage &outputStorage)
 Writes a status command to the given storage. More...
 
void writeStatusCmd (int commandId, int status, const std::string &description)
 Writes a status command to myOutputStorage. More...
 
bool writeErrorStatusCmd (int commandId, const std::string &description, tcpip::Storage &outputStorage)
 Writes a status command to the given storage with status = RTYPE_ERR. More...
 
Helpers for reading and checking values
bool readTypeCheckingInt (tcpip::Storage &inputStorage, int &into)
 Reads the value type and an int, verifying the type. More...
 
bool readTypeCheckingDouble (tcpip::Storage &inputStorage, double &into)
 Reads the value type and a double, verifying the type. More...
 
bool readTypeCheckingString (tcpip::Storage &inputStorage, std::string &into)
 Reads the value type and a string, verifying the type. More...
 
bool readTypeCheckingStringList (tcpip::Storage &inputStorage, std::vector< std::string > &into)
 Reads the value type and a string list, verifying the type. More...
 
bool readTypeCheckingColor (tcpip::Storage &inputStorage, RGBColor &into)
 Reads the value type and a color, verifying the type. More...
 
bool readTypeCheckingPosition2D (tcpip::Storage &inputStorage, Position &into)
 Reads the value type and a 2D position, verifying the type. More...
 
bool readTypeCheckingBoundary (tcpip::Storage &inputStorage, Boundary &into)
 Reads the value type and a 2D bounding box, verifying the type. More...
 
bool readTypeCheckingByte (tcpip::Storage &inputStorage, int &into)
 Reads the value type and a byte, verifying the type. More...
 
bool readTypeCheckingUnsignedByte (tcpip::Storage &inputStorage, int &into)
 Reads the value type and an unsigned byte, verifying the type. More...
 
bool readTypeCheckingPolygon (tcpip::Storage &inputStorage, PositionVector &into)
 Reads the value type and a polygon, verifying the type. More...
 

Static Public Member Functions

static TraCIServergetInstance ()
 
static void processCommandsUntilSimStep (SUMOTime step)
 process all commands until a simulation step is wanted More...
 
Initialisation and Shutdown
static void openSocket (const std::map< int, CmdExecutor > &execs)
 Initialises the server. More...
 
static void close ()
 request termination of connection More...
 
static bool wasClosed ()
 check whether close was requested More...
 

Private Member Functions

bool addObjectVariableSubscription (const int commandId, const bool hasContext)
 
int dispatchCommand ()
 
bool findObjectShape (int domain, const std::string &id, PositionVector &shape)
 
void initialiseSubscription (const Subscription &s)
 
TraCIServeroperator= (const TraCIServer &s)
 Invalidated assignment operator. More...
 
bool processSingleSubscription (const TraCIServer::Subscription &s, tcpip::Storage &writeInto, std::string &errors)
 
void removeSubscription (int commandId, const std::string &identity, int domain)
 
 TraCIServer (const SUMOTime begin, const int port=0)
 Constructor. More...
 
virtual ~TraCIServer ()
 Destructor. More...
 
Server-internal command handling
bool commandGetVersion ()
 Returns the TraCI-version. More...
 
void postProcessSimulationStep2 ()
 Handles subscriptions to send after a simstep2 command. More...
 

Private Attributes

const bool myAmEmbedded
 Whether the server runs in embedded mode. More...
 
bool myDoingSimStep
 Whether a step is currently done. More...
 
std::map< int, CmdExecutormyExecutors
 Map of commandIds -> their executors; applicable if the executor applies to the method footprint. More...
 
tcpip::Storage myInputStorage
 The storage to read from. More...
 
LANE_RTREE_QUALmyLaneTree
 A storage of lanes. More...
 
std::map< int, NamedRTree * > myObjects
 A storage of objects. More...
 
tcpip::Storage myOutputStorage
 The storage to writeto. More...
 
std::map< int, int > myParameterSizes
 Map of variable ids to the size of the parameter in bytes. More...
 
tcpip::SocketmySocket
 The socket on which server is listening on. More...
 
std::vector< SubscriptionmySubscriptions
 The list of known, still valid subscriptions. More...
 
SUMOTime myTargetTime
 The time step to reach until processing the next commands. More...
 
std::map< MSNet::VehicleState, std::vector< std::string > > myVehicleStateChanges
 Changes in the states of simulated vehicles. More...
 
std::map< std::string, MSVehicle * > myVTDControlledVehicles
 

Static Private Attributes

static bool myDoCloseConnection = false
 Whether the connection was set to be to close. More...
 
static TraCIServermyInstance = 0
 Singleton instance of the server. More...
 

Detailed Description

TraCI server used to control sumo by a remote TraCI client.

Definition at line 73 of file TraCIServer.h.

Member Typedef Documentation

typedef bool(* TraCIServer::CmdExecutor) (TraCIServer &server, tcpip::Storage &inputStorage, tcpip::Storage &outputStorage)

Definition of a method to be called for serving an associated commandID.

Definition at line 76 of file TraCIServer.h.

Constructor & Destructor Documentation

TraCIServer::TraCIServer ( const SUMOTime  begin,
const int  port = 0 
)
private

Constructor.

Parameters
[in]portThe port to listen to (to open)

Definition at line 106 of file TraCIServer.cpp.

References tcpip::Socket::accept(), MSNet::addVehicleStateListener(), CMD_GET_AREAL_DETECTOR_VARIABLE, CMD_GET_EDGE_VARIABLE, CMD_GET_INDUCTIONLOOP_VARIABLE, CMD_GET_JUNCTION_VARIABLE, CMD_GET_LANE_VARIABLE, CMD_GET_MULTI_ENTRY_EXIT_DETECTOR_VARIABLE, CMD_GET_PERSON_VARIABLE, CMD_GET_POI_VARIABLE, CMD_GET_POLYGON_VARIABLE, CMD_GET_ROUTE_VARIABLE, CMD_GET_SIM_VARIABLE, CMD_GET_TL_VARIABLE, CMD_GET_VEHICLE_VARIABLE, CMD_GET_VEHICLETYPE_VARIABLE, CMD_SET_EDGE_VARIABLE, CMD_SET_LANE_VARIABLE, CMD_SET_PERSON_VARIABLE, CMD_SET_POI_VARIABLE, CMD_SET_POLYGON_VARIABLE, CMD_SET_ROUTE_VARIABLE, CMD_SET_SIM_VARIABLE, CMD_SET_TL_VARIABLE, CMD_SET_VEHICLE_VARIABLE, CMD_SET_VEHICLETYPE_VARIABLE, MSNet::getInstance(), MsgHandler::getWarningInstance(), MSGlobals::gUsingInternalLanes, MsgHandler::inform(), myAmEmbedded, myDoCloseConnection, myExecutors, myParameterSizes, mySocket, myVehicleStateChanges, TraCIServerAPI_Edge::processGet(), TraCIServerAPI_InductionLoop::processGet(), TraCIServerAPI_Route::processGet(), TraCIServerAPI_MeMeDetector::processGet(), TraCIServerAPI_POI::processGet(), TraCIServerAPI_Polygon::processGet(), TraCIServerAPI_TLS::processGet(), TraCIServerAPI_Junction::processGet(), TraCIServerAPI_VehicleType::processGet(), TraCIServerAPI_Vehicle::processGet(), TraCIServerAPI_Person::processGet(), TraCIServerAPI_Simulation::processGet(), TraCIServerAPI_ArealDetector::processGet(), TraCIServerAPI_Lane::processGet(), TraCIServerAPI_Edge::processSet(), TraCIServerAPI_Route::processSet(), TraCIServerAPI_POI::processSet(), TraCIServerAPI_Polygon::processSet(), TraCIServerAPI_TLS::processSet(), TraCIServerAPI_Vehicle::processSet(), TraCIServerAPI_Simulation::processSet(), TraCIServerAPI_Person::processSet(), TraCIServerAPI_Lane::processSet(), TraCIServerAPI_VehicleType::processSet(), toString(), VAR_LEADER, MSNet::VEHICLE_STATE_ARRIVED, MSNet::VEHICLE_STATE_BUILT, MSNet::VEHICLE_STATE_DEPARTED, MSNet::VEHICLE_STATE_ENDING_PARKING, MSNet::VEHICLE_STATE_ENDING_STOP, MSNet::VEHICLE_STATE_ENDING_TELEPORT, MSNet::VEHICLE_STATE_NEWROUTE, MSNet::VEHICLE_STATE_STARTING_PARKING, MSNet::VEHICLE_STATE_STARTING_STOP, MSNet::VEHICLE_STATE_STARTING_TELEPORT, tcpip::SocketException::what(), WRITE_MESSAGE, and WRITE_WARNING.

Referenced by getVehicleStateChanges(), openSocket(), and processCommandsUntilSimStep().

TraCIServer::~TraCIServer ( )
privatevirtual

Member Function Documentation

bool TraCIServer::addObjectVariableSubscription ( const int  commandId,
const bool  hasContext 
)
private
void TraCIServer::close ( )
static

request termination of connection

Definition at line 201 of file TraCIServer.cpp.

References CMD_CLOSE, myDoCloseConnection, myInstance, myOutputStorage, mySocket, RTYPE_OK, tcpip::Socket::sendExact(), and writeStatusCmd().

Referenced by MSNet::closeSimulation(), and getInstance().

int TraCIServer::dispatchCommand ( )
private

Definition at line 400 of file TraCIServer.cpp.

References addObjectVariableSubscription(), CMD_CLOSE, CMD_GETVERSION, CMD_SIMSTEP2, CMD_SUBSCRIBE_AREAL_DETECTOR_CONTEXT, CMD_SUBSCRIBE_AREAL_DETECTOR_VARIABLE, CMD_SUBSCRIBE_EDGE_CONTEXT, CMD_SUBSCRIBE_EDGE_VARIABLE, CMD_SUBSCRIBE_GUI_CONTEXT, CMD_SUBSCRIBE_GUI_VARIABLE, CMD_SUBSCRIBE_INDUCTIONLOOP_CONTEXT, CMD_SUBSCRIBE_INDUCTIONLOOP_VARIABLE, CMD_SUBSCRIBE_JUNCTION_CONTEXT, CMD_SUBSCRIBE_JUNCTION_VARIABLE, CMD_SUBSCRIBE_LANE_CONTEXT, CMD_SUBSCRIBE_LANE_VARIABLE, CMD_SUBSCRIBE_MULTI_ENTRY_EXIT_DETECTOR_CONTEXT, CMD_SUBSCRIBE_MULTI_ENTRY_EXIT_DETECTOR_VARIABLE, CMD_SUBSCRIBE_PERSON_CONTEXT, CMD_SUBSCRIBE_PERSON_VARIABLE, CMD_SUBSCRIBE_POI_CONTEXT, CMD_SUBSCRIBE_POI_VARIABLE, CMD_SUBSCRIBE_POLYGON_CONTEXT, CMD_SUBSCRIBE_POLYGON_VARIABLE, CMD_SUBSCRIBE_ROUTE_CONTEXT, CMD_SUBSCRIBE_ROUTE_VARIABLE, CMD_SUBSCRIBE_SIM_CONTEXT, CMD_SUBSCRIBE_SIM_VARIABLE, CMD_SUBSCRIBE_TL_CONTEXT, CMD_SUBSCRIBE_TL_VARIABLE, CMD_SUBSCRIBE_VEHICLE_CONTEXT, CMD_SUBSCRIBE_VEHICLE_VARIABLE, CMD_SUBSCRIBE_VEHICLETYPE_CONTEXT, CMD_SUBSCRIBE_VEHICLETYPE_VARIABLE, commandGetVersion(), DELTA_T, MSNet::getInstance(), myAmEmbedded, myDoCloseConnection, myExecutors, myInputStorage, myInstance, myOutputStorage, myTargetTime, myVehicleStateChanges, tcpip::Storage::position(), postProcessSimulationStep2(), tcpip::Storage::readChar(), tcpip::Storage::readInt(), tcpip::Storage::readUnsignedByte(), RTYPE_ERR, RTYPE_NOTIMPLEMENTED, MSNet::simulationStep(), tcpip::Storage::valid_pos(), and writeStatusCmd().

Referenced by getVehicleStateChanges(), and processCommandsUntilSimStep().

SUMOTime TraCIServer::getTargetTime ( )
inline

Definition at line 79 of file TraCIServer.h.

References myTargetTime.

Referenced by MSNet::simulationStep().

void TraCIServer::openSocket ( const std::map< int, CmdExecutor > &  execs)
static

Initialises the server.

Parameters
[in]execsThe (additional) command executors to use

Definition at line 186 of file TraCIServer.cpp.

References OptionsCont::getOptions(), myDoCloseConnection, myExecutors, myInstance, string2time(), and TraCIServer().

Referenced by getInstance(), load(), and GUILoadThread::run().

TraCIServer& TraCIServer::operator= ( const TraCIServer s)
private

Invalidated assignment operator.

void TraCIServer::postProcessVTD ( )
bool TraCIServer::readTypeCheckingBoundary ( tcpip::Storage inputStorage,
Boundary into 
)

Reads the value type and a 2D bounding box, verifying the type.

Parameters

Definition at line 944 of file TraCIServer.cpp.

References tcpip::Storage::readDouble(), tcpip::Storage::readUnsignedByte(), Boundary::set(), SUMOReal, and TYPE_BOUNDINGBOX.

Referenced by getVehicleStateChanges(), and TraCIServerAPI_GUI::processSet().

bool TraCIServer::readTypeCheckingByte ( tcpip::Storage inputStorage,
int &  into 
)

Reads the value type and a byte, verifying the type.

Parameters

Definition at line 958 of file TraCIServer.cpp.

References tcpip::Storage::readByte(), tcpip::Storage::readUnsignedByte(), and TYPE_BYTE.

Referenced by getVehicleStateChanges(), and TraCIServerAPI_Vehicle::processSet().

bool TraCIServer::readTypeCheckingColor ( tcpip::Storage inputStorage,
RGBColor into 
)
bool TraCIServer::readTypeCheckingDouble ( tcpip::Storage inputStorage,
double &  into 
)
bool TraCIServer::readTypeCheckingPolygon ( tcpip::Storage inputStorage,
PositionVector into 
)

Reads the value type and a polygon, verifying the type.

Parameters

Definition at line 978 of file TraCIServer.cpp.

References tcpip::Storage::readDouble(), tcpip::Storage::readUnsignedByte(), SUMOReal, and TYPE_POLYGON.

Referenced by getVehicleStateChanges(), and TraCIServerAPI_Polygon::processSet().

bool TraCIServer::readTypeCheckingPosition2D ( tcpip::Storage inputStorage,
Position into 
)

Reads the value type and a 2D position, verifying the type.

Parameters

Definition at line 932 of file TraCIServer.cpp.

References POSITION_2D, tcpip::Storage::readDouble(), tcpip::Storage::readUnsignedByte(), Position::set(), and SUMOReal.

Referenced by getVehicleStateChanges(), TraCIServerAPI_POI::processSet(), and TraCIServerAPI_GUI::processSet().

bool TraCIServer::readTypeCheckingStringList ( tcpip::Storage inputStorage,
std::vector< std::string > &  into 
)
bool TraCIServer::readTypeCheckingUnsignedByte ( tcpip::Storage inputStorage,
int &  into 
)

Reads the value type and an unsigned byte, verifying the type.

Parameters

Definition at line 968 of file TraCIServer.cpp.

References tcpip::Storage::readUnsignedByte(), and TYPE_UBYTE.

Referenced by TraCIServerAPI_Simulation::commandPositionConversion(), getVehicleStateChanges(), and TraCIServerAPI_Polygon::processSet().

void TraCIServer::removeSubscription ( int  commandId,
const std::string &  identity,
int  domain 
)
private

Definition at line 598 of file TraCIServer.cpp.

References mySubscriptions, RTYPE_OK, and writeStatusCmd().

Referenced by addObjectVariableSubscription().

void TraCIServer::setVTDControlled ( MSVehicle v,
MSLane l,
SUMOReal  pos,
SUMOReal  angle,
int  edgeOffset,
ConstMSEdgeVector  route,
SUMOTime  t 
)
void TraCIServer::vehicleStateChanged ( const SUMOVehicle *const  vehicle,
MSNet::VehicleState  to 
)
virtual

Called if a vehicle changes its state.

Parameters
[in]vehicleThe vehicle which changed its state
[in]toThe state the vehicle has changed to

Implements MSNet::VehicleStateListener.

Definition at line 246 of file TraCIServer.cpp.

References SUMOVehicle::getID(), myDoCloseConnection, and myVehicleStateChanges.

Referenced by getInstance().

bool TraCIServer::wasClosed ( )
static

check whether close was requested

Returns
Whether the connection was closed

Definition at line 216 of file TraCIServer.cpp.

References myDoCloseConnection.

Referenced by getInstance(), GUIRunThread::makeStep(), MSNet::simulate(), and MSNet::simulationState().

bool TraCIServer::writeErrorStatusCmd ( int  commandId,
const std::string &  description,
tcpip::Storage outputStorage 
)
void TraCIServer::writeStatusCmd ( int  commandId,
int  status,
const std::string &  description,
tcpip::Storage outputStorage 
)

Writes a status command to the given storage.

Parameters
[in]commandIdThe id of the command to respond to
[in]statusThe status to send
[in]descriptionThe status description (error message, for example)

Definition at line 559 of file TraCIServer.cpp.

References RTYPE_ERR, RTYPE_NOTIMPLEMENTED, toHex(), WRITE_ERROR, tcpip::Storage::writeString(), and tcpip::Storage::writeUnsignedByte().

Referenced by close(), TraCIServerAPI_Simulation::commandDistanceRequest(), commandGetVersion(), TraCIServerAPI_Simulation::commandPositionConversion(), dispatchCommand(), getInstance(), initialiseSubscription(), postProcessSimulationStep2(), TraCIServerAPI_Edge::processGet(), TraCIServerAPI_InductionLoop::processGet(), TraCIServerAPI_TLS::processGet(), TraCIServerAPI_Junction::processGet(), TraCIServerAPI_VehicleType::processGet(), TraCIServerAPI_MeMeDetector::processGet(), TraCIServerAPI_POI::processGet(), TraCIServerAPI_Polygon::processGet(), TraCIServerAPI_Route::processGet(), TraCIServerAPI_Vehicle::processGet(), TraCIServerAPI_GUI::processGet(), TraCIServerAPI_Person::processGet(), TraCIServerAPI_Simulation::processGet(), TraCIServerAPI_ArealDetector::processGet(), TraCIServerAPI_Lane::processGet(), TraCIServerAPI_Edge::processSet(), TraCIServerAPI_TLS::processSet(), TraCIServerAPI_Route::processSet(), TraCIServerAPI_Polygon::processSet(), TraCIServerAPI_POI::processSet(), TraCIServerAPI_Vehicle::processSet(), TraCIServerAPI_GUI::processSet(), TraCIServerAPI_Simulation::processSet(), TraCIServerAPI_Person::processSet(), TraCIServerAPI_Lane::processSet(), TraCIServerAPI_VehicleType::processSet(), processSingleSubscription(), removeSubscription(), writeErrorStatusCmd(), and writeStatusCmd().

void TraCIServer::writeStatusCmd ( int  commandId,
int  status,
const std::string &  description 
)

Writes a status command to myOutputStorage.

Parameters
[in]commandIdThe id of the command to respond to
[in]statusThe status to send
[in]descriptionThe status description (error message, for example)

Definition at line 553 of file TraCIServer.cpp.

References myOutputStorage, and writeStatusCmd().

Field Documentation

const bool TraCIServer::myAmEmbedded
private

Whether the server runs in embedded mode.

Definition at line 316 of file TraCIServer.h.

Referenced by dispatchCommand(), processCommandsUntilSimStep(), and TraCIServer().

bool TraCIServer::myDoCloseConnection = false
staticprivate

Whether the connection was set to be to close.

Definition at line 297 of file TraCIServer.h.

Referenced by close(), dispatchCommand(), openSocket(), processCommandsUntilSimStep(), TraCIServer(), vehicleStateChanged(), and wasClosed().

bool TraCIServer::myDoingSimStep
private

Whether a step is currently done.

Todo:
: What is this for?

Definition at line 313 of file TraCIServer.h.

Referenced by processCommandsUntilSimStep().

std::map<int, CmdExecutor> TraCIServer::myExecutors
private

Map of commandIds -> their executors; applicable if the executor applies to the method footprint.

Definition at line 319 of file TraCIServer.h.

Referenced by dispatchCommand(), openSocket(), processSingleSubscription(), and TraCIServer().

tcpip::Storage TraCIServer::myInputStorage
private

The storage to read from.

Definition at line 306 of file TraCIServer.h.

Referenced by addObjectVariableSubscription(), dispatchCommand(), and processCommandsUntilSimStep().

TraCIServer * TraCIServer::myInstance = 0
staticprivate

Singleton instance of the server.

Definition at line 294 of file TraCIServer.h.

Referenced by close(), dispatchCommand(), getInstance(), openSocket(), and processCommandsUntilSimStep().

LANE_RTREE_QUAL* TraCIServer::myLaneTree
private

A storage of lanes.

Definition at line 379 of file TraCIServer.h.

Referenced by collectObjectsInRange(), and ~TraCIServer().

std::map<int, NamedRTree*> TraCIServer::myObjects
private

A storage of objects.

Definition at line 376 of file TraCIServer.h.

Referenced by collectObjectsInRange(), and ~TraCIServer().

tcpip::Storage TraCIServer::myOutputStorage
private
std::map<int, int> TraCIServer::myParameterSizes
private

Map of variable ids to the size of the parameter in bytes.

Definition at line 322 of file TraCIServer.h.

Referenced by addObjectVariableSubscription(), and TraCIServer().

tcpip::Socket* TraCIServer::mySocket
private

The socket on which server is listening on.

Definition at line 300 of file TraCIServer.h.

Referenced by close(), processCommandsUntilSimStep(), TraCIServer(), and ~TraCIServer().

std::vector<Subscription> TraCIServer::mySubscriptions
private

The list of known, still valid subscriptions.

Definition at line 370 of file TraCIServer.h.

Referenced by initialiseSubscription(), postProcessSimulationStep2(), and removeSubscription().

SUMOTime TraCIServer::myTargetTime
private

The time step to reach until processing the next commands.

Definition at line 303 of file TraCIServer.h.

Referenced by dispatchCommand(), getTargetTime(), and processCommandsUntilSimStep().

std::map<MSNet::VehicleState, std::vector<std::string> > TraCIServer::myVehicleStateChanges
private

Changes in the states of simulated vehicles.

Definition at line 373 of file TraCIServer.h.

Referenced by dispatchCommand(), getVehicleStateChanges(), postProcessSimulationStep2(), processCommandsUntilSimStep(), TraCIServer(), and vehicleStateChanged().

std::map<std::string, MSVehicle*> TraCIServer::myVTDControlledVehicles
private

Definition at line 324 of file TraCIServer.h.

Referenced by postProcessVTD(), and setVTDControlled().


The documentation for this class was generated from the following files: