Exemple #1
0
 /// <summary>
 /// Instruct SUMO to execute a single simulation step
 /// Note: the size of the step is set via the relevant .sumcfg file
 /// </summary>
 /// <param name="targetTime">If this is not 0, SUMO will run until target time is reached</param>
 public void SimStep(int targetTime = 0)
 {
     var command = new TraCICommand
     {
         Identifier = TraCIConstants.CMD_SIMSTEP,
         Contents   = TraCIDataConverter.GetTraCIBytesFromInt32(targetTime)
     };
     // ReSharper disable once UnusedVariable
     var response = Client.SendMessage(command);
     // TODO: handle response
 }
Exemple #2
0
        /// <summary>
        /// Inserts a completely new program.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="program"></param>
        /// <returns></returns>
        public TraCIResponse <object> SetCompleteRedYellowGreenDefinition(string id, TrafficLightProgram program)
        {
            // TODO: move this to TraCICommandHelper.ExecuteSetCommand

            var bytes = new List <byte> {
                TraCIConstants.TL_COMPLETE_PROGRAM_RYG
            };                                                                     //messageType (0x2c)

            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromASCIIString(id));
            bytes.Add(TraCIConstants.TYPE_COMPOUND);                                                   //value type compound
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(5 + (program.Phases.Count * 4))); //item number
            bytes.Add(TraCIConstants.TYPE_STRING);                                                     //value type string
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromASCIIString(program.ProgramId));        //program ID
            bytes.Add(TraCIConstants.TYPE_INTEGER);                                                    //value type integer
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(0));                              //Type (always 0)
            bytes.Add(TraCIConstants.TYPE_COMPOUND);                                                   //value type compound
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(0));                              //Compound Length (always 0!)
            bytes.Add(TraCIConstants.TYPE_INTEGER);                                                    //value type integer
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(program.PhaseIndex));             //Phase Index
            bytes.Add(TraCIConstants.TYPE_INTEGER);                                                    //value type integer
            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(program.Phases.Count));           //Phase Number

            foreach (var p in program.Phases)                                                          //Phases
            {
                bytes.Add(TraCIConstants.TYPE_DOUBLE);                                                 //value type integer
                bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromDouble(p.Duration));                //Duration[ms]
                bytes.Add(TraCIConstants.TYPE_DOUBLE);                                                 //value type integer
                bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromDouble(0));                         //unused
                bytes.Add(TraCIConstants.TYPE_DOUBLE);                                                 //value type integer
                bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromDouble(0));                         //unused
                bytes.Add(TraCIConstants.TYPE_STRING);                                                 //value type string
                bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromASCIIString(p.Definition));         //State (light/priority-tuple)
            }

            var command = new TraCICommand
            {
                Identifier = TraCIConstants.CMD_SET_TL_VARIABLE,
                Contents   = bytes.ToArray()
            };

            var response = Client.SendMessage(command);

#warning is the try catch necessary?
            try
            {
                return(TraCIDataConverter.ExtractDataFromResponse <object>(response, TraCIConstants.CMD_SET_TL_VARIABLE, TraCIConstants.TL_COMPLETE_PROGRAM_RYG));
            }
            catch
            {
                throw;
            }
        }
        /// <summary>
        /// Tells TraCI to reload the simulation with the given options
        /// <remarks>Loading does not work when using multiple clients, currently</remarks>
        /// </summary>
        /// <param name="options">List of options to pass to SUMO</param>
        public void Load(List <string> options)
        {
            var command = new TraCICommand
            {
                Identifier = TraCIConstants.CMD_LOAD
            };
            var n = new List <byte>();

            n.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(options.Count));
            foreach (var opt in options)
            {
                n.AddRange(TraCIDataConverter.GetTraCIBytesFromInt32(opt.Length));
                n.AddRange(TraCIDataConverter.GetTraCIBytesFromASCIIString(opt));
            }
            command.Contents = n.ToArray();
            // ReSharper disable once UnusedVariable
            var response = Client.SendMessage(command);
        }