Переход, срабатывающий при получении сообщения

Такой переход сработает, когда диаграмма состояний получит сообщение (значение примитивного типа Java или объект заданного Java класса, удовлетворяющий заданному дескриптору сообщения). 

Есть три способа передачи сообщений в диаграмму состояний: 

Когда сообщение будет получено в диаграмме состояний:

Вы можете выполнять проверку содержимого сообщения и принимать только те сообщения, которые удовлетворяют заданным критериям проверки:

 Чтобы сделать переход срабатывающим при получении сообщения

  1. Выделите переход в графическом редакторе.
  2. На странице Основные панели Свойства выберите При получении сообщения из выпадающего списка Происходит.
  3. Если Вы хотите выполнять фильтрацию сообщений по типу, то с помощью группы кнопок Тип сообщения нужно будет выбрать, сообщения какого типа будут приниматься (если Вы хотите задать какой-то из неперечисленных здесь Java классов, выберите опцию Другой и введите имя класса в поле Имя класса. В этом случае переход сможет сработать только при получении сообщений заданного здесь Java класса. 
  4. Если же Вы не хотите выполнять такую фильтрацию сообщений, оставьте выбранной опцию Другой и введите Object в поле Имя класса
  5. Теперь можете задать дополнительные условия проверки содержимого сообщения с помощью группы кнопок Осуществлять переход.
  6. Если Вы не хотите задавать никаких условий - просто выберите Безусловно.
  7. Если Вы хотите задать принимать сообщения только с заданным содержимым, выберите опцию Если сообщение равно и задайте дескриптор сообщения в поле справа. Такая проверка будет работать следующим образом: при получении сообщения, AnyLogic вызовет метод equals() дескриптора, передав методу сообщение в качестве параметра. Если метод equals() вернет true, то такое сообщение будет принято. Если false - то это будет означать, что соответствия не найдено, и сообщение будет проигнорировано. Примеры дескрипторов: "STOP!" для сообщения типа String5.0 для сообщения типа Double.
  8. Если же Вы хотите задать сложный механизм просерки содержимого сообщения с помощью логического условия, выберите опцию Если выполняется условие (сообщение доступно как msg). Введите условие в расположенном ниже поле. Только что полученное сообщение доступно здесь как переменная msg.
  9. Введите дополнительное условие, которое должно быть выполнено для того, чтобы было разрешено срабатывание этого перехода, в поле Доп. условие
  10. Введите код, который будет выполняться при срабатывании перехода, в поле Действие

Очередь диаграммы состояний

Иногда Вам может понадобиться добавлять поступающие в диаграмму состояний сообщения в очередь. Очередь нужна для того, чтобы диаграмма состояний могла принимать сообщения, в те моменты, когда она не может их обработать (например, когда выполняется переход диаграммы состояний).

Добавить сообщение в очередь диаграммы состояний можно путем вызова метода диаграммы состояний fireEvent()

Очередь событий обрабатывается диаграммой состояний при происхождении любой активности в этой диаграмме или при вызове метода fireEvent(). При этом происходит последовательная проверка всех сообщений в очереди, начиная с самого "старого" в соответствии со следующим алгоритмом:

Диаграмма состояний может последовательно обработать сразу несколько сообщений из очереди (это занимает нулевое модельное время). 

См. также

 Диаграммы состояний

 Переход

 Срабатывание перехода