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:
MSNet::VehicleStateListener

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, int edgeOffset, MSEdgeVector route)
 
void vehicleStateChanged (const SUMOVehicle *const vehicle, MSNet::VehicleState to)
 Called if a vehicle changes its state. More...
 
bool vtdDebug () const
 
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...
 
bool commandCloseConnection ()
 Indicates the connection as being closed. 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, intmyParameterSizes
 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 74 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 77 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_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_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_VehicleType::processGet(), TraCIServerAPI_InductionLoop::processGet(), TraCIServerAPI_Route::processGet(), TraCIServerAPI_ArealDetector::processGet(), TraCIServerAPI_MeMeDetector::processGet(), TraCIServerAPI_POI::processGet(), TraCIServerAPI_Polygon::processGet(), TraCIServerAPI_TLS::processGet(), TraCIServerAPI_Junction::processGet(), TraCIServerAPI_Vehicle::processGet(), TraCIServerAPI_Simulation::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_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 openSocket().

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 198 of file TraCIServer.cpp.

References myDoCloseConnection, and myInstance.

Referenced by MSNet::closeSimulation().

bool TraCIServer::commandCloseConnection ( )
private

Indicates the connection as being closed.

Returns
Always true

Definition at line 510 of file TraCIServer.cpp.

References CMD_CLOSE, myDoCloseConnection, RTYPE_OK, and writeStatusCmd().

Referenced by dispatchCommand().

bool TraCIServer::commandGetVersion ( )
private
int TraCIServer::dispatchCommand ( )
private
static TraCIServer* TraCIServer::getInstance ( void  )
inlinestatic

Definition at line 83 of file TraCIServer.h.

References myInstance.

Referenced by MSNet::simulationStep().

SUMOTime TraCIServer::getTargetTime ( )
inline

Definition at line 80 of file TraCIServer.h.

References myTargetTime.

Referenced by MSNet::simulationStep().

const std::map<MSNet::VehicleState, std::vector<std::string> >& TraCIServer::getVehicleStateChanges ( ) const
inline
void TraCIServer::openSocket ( const std::map< int, CmdExecutor > &  execs)
static

Initialises the server.

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

Definition at line 184 of file TraCIServer.cpp.

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

Referenced by 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 943 of file TraCIServer.cpp.

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

Referenced by 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 957 of file TraCIServer.cpp.

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

Referenced by 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 977 of file TraCIServer.cpp.

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

Referenced by 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 931 of file TraCIServer.cpp.

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

Referenced by 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 967 of file TraCIServer.cpp.

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

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

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

Definition at line 603 of file TraCIServer.cpp.

References mySubscriptions, RTYPE_OK, and writeStatusCmd().

Referenced by addObjectVariableSubscription().

void TraCIServer::setVTDControlled ( MSVehicle v,
MSLane l,
SUMOReal  pos,
int  edgeOffset,
MSEdgeVector  route 
)
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 242 of file TraCIServer.cpp.

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

bool TraCIServer::vtdDebug ( ) const

Definition at line 233 of file TraCIServer.cpp.

Referenced by TraCIServerAPI_Vehicle::processSet().

bool TraCIServer::wasClosed ( )
static

check whether close was requested

Returns
Whether the connection was closed

Definition at line 208 of file TraCIServer.cpp.

References myDoCloseConnection.

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

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 564 of file TraCIServer.cpp.

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

Referenced by commandCloseConnection(), TraCIServerAPI_Simulation::commandDistanceRequest(), commandGetVersion(), TraCIServerAPI_Simulation::commandPositionConversion(), dispatchCommand(), initialiseSubscription(), postProcessSimulationStep2(), TraCIServerAPI_Edge::processGet(), TraCIServerAPI_Junction::processGet(), TraCIServerAPI_VehicleType::processGet(), TraCIServerAPI_MeMeDetector::processGet(), TraCIServerAPI_POI::processGet(), TraCIServerAPI_ArealDetector::processGet(), TraCIServerAPI_Polygon::processGet(), TraCIServerAPI_Route::processGet(), TraCIServerAPI_InductionLoop::processGet(), TraCIServerAPI_TLS::processGet(), TraCIServerAPI_Vehicle::processGet(), TraCIServerAPI_Simulation::processGet(), TraCIServerAPI_Lane::processGet(), TraCIServerAPI_GUI::processGet(), TraCIServerAPI_Edge::processSet(), TraCIServerAPI_Polygon::processSet(), TraCIServerAPI_POI::processSet(), TraCIServerAPI_Route::processSet(), TraCIServerAPI_TLS::processSet(), TraCIServerAPI_Vehicle::processSet(), TraCIServerAPI_Simulation::processSet(), TraCIServerAPI_Lane::processSet(), TraCIServerAPI_GUI::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 558 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 323 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 304 of file TraCIServer.h.

Referenced by close(), commandCloseConnection(), 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 320 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 326 of file TraCIServer.h.

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

tcpip::Storage TraCIServer::myInputStorage
private

The storage to read from.

Definition at line 313 of file TraCIServer.h.

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

TraCIServer * TraCIServer::myInstance = 0
staticprivate

Singleton instance of the server.

Definition at line 301 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 386 of file TraCIServer.h.

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

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

A storage of objects.

Definition at line 383 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 329 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 307 of file TraCIServer.h.

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

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

The list of known, still valid subscriptions.

Definition at line 377 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 310 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 380 of file TraCIServer.h.

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

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

Definition at line 331 of file TraCIServer.h.

Referenced by postProcessVTD(), and setVTDControlled().


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