События и Агенты

В языке Friend событиями называются следующие ситуации:

  1.  Настала запланированные  дата и\или время.
  2.  Произошло входящее обращение из сети Интернет.
  3.  Произошла нештатная ситуация (ошибка),
  4.  Выполнилось абстрактное условие описанное в строже.

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

Сторожа можно создать методом его текстового описания, или программно.

Второй способ чуть более трудоемок, но позволяет алгоритму создавать и настраивать новых сторожей в процессе работы.

Абстрактные сторожа (Report)

Report является абстрактным видом данных любого допустимого в Friend типа, который сохраняется в  гдБЗ и не зависит от задачи. По средствам Report задачи (целевые агенты) могут обмениваться сообщениями, и между  активностью сохранять в них временные данные.

К Report можно присоединить любое количество сторожей (Guard).

Каждый  Guard состоит из простого или сложного условия, и выполняемой инструкции (цель сторожа).

Цель сторожа может содержать любую программу, которая будет выполнена в отдельной задаче, или список файлов-задач, которые нужно активировать.

В условии Guard допустимо использовать все операции арифметики и логики, числовые и строчные константы, переменную it содержащую значение  Report,  значения других Report, обозначенных следующим образом:

Report[‘имя’]

Присоединение сторожей  к Report не обязательно, если он используется только для хранения сообщений между  агентами.

Создание нового Report

Report.Add(‘Имя’, начальное значение)

Изменение значения Report

Report[‘Имя’].Set(Значение)

Удаление Report

Report.Remome(‘Имя’)

Получение значения Report

Report[‘Имя’].Value

Добавление сторожа к Report

Report[‘Имя’].Add(Сторож)

Удаление сторожа из Report

Report[‘Имя’].Remove(‘Имя_Сторожа’)

Получение списка всех сторожей Report

Report[‘Имя’].List

 

Создание сторожа с присвоением в переменную:

Guard Имя(Условие) {цель_сторожа} -> Var

Создание сторожа непосредственно вместе с Report

Report[‘Имя’].Add( Guard Имя(Условие) {цель_сторожа} )

Пример:

Report.Add(‘X’,1)                                       // создаем рапорт Х и назначаем ему сторожа
Report[‘X’].Add(Guard Proba(it=12){Speek(‘Привет!’)})
Report[‘X’].Set(12)                                  // активируем сторожа

Пример запуска через сторожа сразу трех задач сохраненных в файлах:

Пример:

Report.Add(‘X’,1)                                       // создаем рапорт Х и назначаем ему сторожа
Report[‘X’].Add(Guard Proba(it>12){‘Call‘  ‘file1.frd’  ‘file2.frnd’ ‘file3.frd’})
Report[‘X’].Set(14)                                  // активируем сторожа

 

Сторожа можно программно удалить методом Close.

 

Сторожа даты \ времени

Friend позволяет создавать большое число сторожей настроенных на разные события времени и даты отнесенные от текущего момента в диапазоне минут- лет, с дискретностью срабатывания  1 минута.

Используемый алгоритм 6-и  ступенчатой  сортировки позволяет в тысячи раз снизить нагрузку на процессор.

Однако нужно следить чтобы количество событий ближнего плана (минуты) не было слишком велико, иначе система может быть перегружена проверками. Конкретное количество событий ближнего плана зависит от мощности вашего процессора и начинается от 10-15 заряженных сторожей.

Посекундное совпадение срабатывания сторожей с началом или концом минутного цикла не гарантируется.

Целью таймера может быть любой алгоритм или файлы записанных ранее задач.

 

Создание таймера (вариант 1):

Timer.Add(time  Имя (‘время\дата ‘) {Цель_таймера} )

Создание таймера (вариант 2):

time  Имя (‘время\дата ‘) {Цель_таймера} -> X

Timer.Add(X)

Удаление таймера:

Timer.Remove(‘Имя’)

Получить список таймеров:

Timer.list

 

Дополнительные операции с таймером

Получение текущей даты и времени

Timer.Now

Получение текущей даты

Timer.Date

Получение текущего времени

Timer.Time

Получение номера дня

Timer.Day