Пример #1
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;
            }
        }
Пример #2
0
        public void SetSingleTrafficLightState(string trafficLightId, string signalgroup, char singlestate)
        {
            var command = new TraCICommand {
                Identifier = TraCIConstants.CMD_SET_TL_VARIABLE
            };
            var bytes = new List <byte> {
                TraCIConstants.TL_RED_YELLOW_GREEN_SINGLESTATE
            };

            bytes.AddRange(TraCIDataConverter.GetTraCIBytesFromASCIIString(trafficLightId));
            bytes.Add(TraCIConstants.TYPE_STRING);
            bytes.AddRange(BitConverter.GetBytes((signalgroup + ' ' + singlestate).Length).Reverse());
            bytes.AddRange(Encoding.ASCII.GetBytes(signalgroup + ' ' + singlestate));

            command.Contents = bytes.ToArray();
            // ReSharper disable once UnusedVariable
            var response = SendMessage(command);
        }
Пример #3
0
        /// <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);
        }