Фильтрация сообщений по содержимому

Часто бывает нужно реализовать проверку содержимого поступающих в порт сообщений и организовать фильтрацию сообщений по их содержимому – т.е., принимать только те сообщения, которые удовлетворяют заданным условиям, и отбрасывать остальные.

В AnyLogic вы можете легко реализовать любую проверку содержимого сообщений с помощью поля порта Действие при получении. Здесь вы можете ввести код проверки содержимого сообщения и игнорировать прибывающие сообщения или же принимать их в зависимости от результат проверки, написав соответственно return false; или return true;

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

  1. Пусть, например, у мы моделируем клиент-серверную систему, в которой сервер обрабатывает запросы от клиентов, содержащие имя и адрес клиента. (Запрос задан в модели с помощью Java класса Request с полями name и address типа String). Мы хотим игнорировать сообщения с незаполненными полями.  
  2. Выделите на диаграмме порт, чьи входящие сообщения мы хотим фильтровать. 
  3. В секции Специфические выберите тип Request в поле порта Тип входящего сообщения
  4. Задайте операции проверки содержимого сообщения в поле порта Действие при получении в секции свойств Действия обработки сообщений. В нашем случае ваш код должен выглядеть так:

    if ( msg.name == null || msg.address == null ),
      return false;
    else {
      // обрабатываем полученный запрос
      return true;
    }

Обратите внимание, что возвращая false мы запрещаем обработку прибывшего сообщения, принятую по умолчанию. И поэтому сообщения, полученые этим портом, не будут перенаправляться дальше согласно правилам пересылки сообщений