/// <summary>
 /// Starts a new monitors for the specified state.
 /// </summary>
 /// <returns>The monitored state.</returns>
 /// <param name="ms">The monitored state.</param>
 CachedHashMonitoredState CreateNewMonitors(CachedHashMonitoredState ms)
 {
     try {
         monitor.StartNew(ms.StateHash, ms);
     } catch (Exception e) {
         logger.Error($"Fail to update monitor ({e.Message})");
     }
     return(ms);
 }
 /// <summary>
 /// Updates the monitors for the specified state.
 /// </summary>
 /// <returns>The monitored state.</returns>
 /// <param name="ms">The monitored state.</param>
 CachedHashMonitoredState UpdateMonitors(CachedHashMonitoredState ms)
 {
     try {
         monitor.Step(ms);
     } catch (Exception e) {
         logger.Error($"Fail to update monitor ({e.Message})");
     }
     return(ms);
 }
        /// <summary>
        /// Adds the monitored state to the processing pipeline.
        /// </summary>
        /// <param name="currentState">The monitored state.</param>
        public void MonitorStep(MonitoredState currentState, DateTime now)
        {
            var cachedMs = new CachedHashMonitoredState(currentState, now, projection);

            //if (this is ObstacleMonitor om && om.Obstacle.Identifier == "a3_stopped_in_traffic_monitored")
            //{
            //	Console.WriteLine("MonitorStep: " + cachedMs.StateHash + " " + string.Join(",", projection));
            //}
            buffer.Post(cachedMs);
        }