/// <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; } }
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); }
/// <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); }