/// <summary> /// Вызвать ближайшее событие модели /// </summary> /// <param name="model_event">вызванное событие модели</param> /// <returns>Если обработчик EventCaused задаст в e.StopModel значение false, функция возвратит false. true, если событие существует. В случае, если ни одно событие не запланировано, кидается исключение</returns> /// Пример использования: /// @code /// SmplModel model = new SmplModel(); /// model.CreateDevice("device1"); /// model.Devices["device1"].Reserve(); /// model.Schedule(0,30); /// SmplEvent e; /// bool res = model.Cause(e); /// @endcode public bool Cause(out SmplEvent model_event) { if (futureEvents.Count > 0) { model_event = futureEvents[0]; futureEvents.RemoveAt(0); Time = model_event.TimeCaused; IsStopped = OnEventCaused(new EventCausedEventArgs(model_event)); return !IsStopped; } else throw new Exception("Not possible events!"); }
/// <summary> /// Запланировать событие /// </summary> /// <param name="event_id">идентификатор типа события</param> /// <param name="wait_time">время, через которе событие вызовется</param> /// <param name="param">параметр, передаваемый событию</param> /// Пример использования: /// @code /// SmplModel model = new SmplModel(); /// model.CreateDevice("device1"); /// model.Devices["device1"].Reserve(); /// model.Schedule(0,30); /// @endcode public void Schedule(int event_id, int wait_time, object param = null) { var e = new SmplEvent(event_id, Time, wait_time, param); for (int i = futureEvents.Count - 1; i >= 0; i--) { if (futureEvents[i].TimeCaused <= e.TimeCaused) { futureEvents.Insert(i + 1, e); return; } } // Else make it first futureEvents.Insert(0, e); }
// Конструктор: // event_id - идентификатор события модели // param - параметр события /// <summary> /// Конструктор /// </summary> /// <param name="model_event">Событие</param> /// @code /// /// @endcode public EventCausedEventArgs(SmplEvent model_event) { Event = model_event; StopModel = false; }