Пример #1
0
 /// <summary>
 /// You must call this when you are finished with this object so the files can be fully written and properly closed
 /// </summary>
 public void FinishAndClose()
 {
     if (Finished)
     {
         return;
     }
     BeginNewTimeStep();
     Ts0Writer.Close();
     TsiWriter.Close();
     Finished = true;
 }
Пример #2
0
        /// <summary>
        /// Begins a new timestep and terminates the current timestep. It is optional to call this method prior to the first time step, but you MUST call this method to begin every subsequent time step after the first time step.
        /// </summary>
        /// <returns>The new timestep in seconds</returns>
        public uint BeginNewTimeStep()
        {
            if (Finished)
            {
                return(CurrentTimeStep);
            }
            if (vehicles.Count == 0 && signals == null)
            {
                return(CurrentTimeStep);
            }
            uint TsiVehicleIndex = (uint)Ts0Writer.BaseStream.Position; // Save the index of the first vehicle message

            TsiWriter.Write((uint)0);                                   // Write out the ts0 file number (which will always be zero for us)
            if (vehicles.Count == 0)                                    // Write out the index of the first vehicle record
            {
                TsiWriter.Write((uint)0);
            }
            else
            {
                TsiWriter.Write(TsiVehicleIndex);
                foreach (Vehicles Vehicle in vehicles)
                {
                    Vehicle.WriteToTs0File(Ts0Writer, CurrentTimeStep);
                }
                // Write out the "complete" message
                Ts0Writer.Write((uint)MessageNames.LG_Complete_GP);
                Ts0Writer.Write((uint)8); // Message length
                Ts0Writer.Write(CurrentTimeStep);
                Ts0Writer.Write((uint)RequestTypes.DR_TS_VEHICLE);
                Ts0Writer.Write((uint)1); // Request handle
            }
            if (signals == null)          // Write out the index of the signal record
            {
                TsiWriter.Write((uint)0);
            }
            else
            {
                TsiWriter.Write((uint)Ts0Writer.BaseStream.Position);
                signals.WriteToTs0File(Ts0Writer, CurrentTimeStep);
                // Write out the "complete" message
                Ts0Writer.Write((uint)MessageNames.LG_Complete_GP);
                Ts0Writer.Write((uint)8); // Message length
                Ts0Writer.Write(CurrentTimeStep);
                Ts0Writer.Write((uint)RequestTypes.DR_TS_SIGNAL);
                Ts0Writer.Write((uint)1); // Request handle
            }
            vehicles.Clear();
            signals = null;
            return(++CurrentTimeStep);
        }