Инструкция создания модулей

В Pyrite есть возможность добавлять два вида модулей: модули проверки и модули действия.

 

Модули проверки — это части сценария, которые добавляются в условия циклов ПОКА и условия ЕСЛИ. Встроенными модулями проверки являются «Дата между», «Месяц между», «Всегда», «Никогда» и т. д. Для того, чтобы создать собственный модуль проверки, нужно создать проект C#, добавить в References библиотеку PyriteClientInterfaces, затем создать непосредственно класс проверки, унаследовать его от интерфейса IСustomChecker, который находится в сборке PyriteClientInterfaces. Также следует пометить класс атрибутом Serializable.

Описание методов и свойств:

public string Name – возвращает наименование модуля проверки (всегда помечается атрибутом XmIgnore);

public bool AllowUserSettings – возвращает значение, указывающее, можно ли редактировать параметры экземпляра текущего класса (всегда помечается атрибутом XmIgnore);

public bool IsCanDoNow – возвращает значение, определяющее верно ли сейчас целевое выражение. Собственно — это то свойство, ради которого создается весь класс. Всегда помечается атрибутом XmIgnore;

public bool BeginUserSettings() - метод инициализации текущего экземпляра. Обычно эта функция вызывает окошко настройки экземпляра.

public void Refresh() - метод, который вызывается сразу после десереализации экземпляра. Обычно в нем применяются настройки.

Все собственные свойства (которые не перечислены в списке), которые необходимо «запоминать» программе, следует делать public, иначе они не будут сохраняться в экземпляре. Также все собственные свойства можно помечать атрибутом HumanFriendlyName, в конструктор которого добавлять дружественное пользователю название свойства.

 

Пример модуля проверки (проверка на время суток):

using PyriteClientIntefaces;
using System;
using System.Xml.Serialization;
 
namespace ModsExample
{
    /// <summary>
    /// Всегда помечается Serializable
    /// </summary>
    [Serializable]
    public class TimeOfDayChecker : ICustomChecker
    {
        /// <summary>
        /// Возвращать true, если можно изменять свойства из UI. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public bool AllowUserSettings
        {
            get
            {
                return true;
            }
        }
 
        /// <summary>
        /// Кастомное свойство
        /// </summary>
        [HumanFriendlyName("Время суток")]
        public TimeOfDay TimeOfDay { getset; }
 
        /// <summary>
        /// Указывает, верно ли целевое утверждение сейчас. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public bool IsCanDoNow
        {
            get
            {
                if (DateTime.Now.Hour >= 12 && DateTime.Now.Hour < 18 && TimeOfDay == TimeOfDay.Day)
                    return true;
                if (DateTime.Now.Hour >= 18 && DateTime.Now.Hour < 24 && TimeOfDay == TimeOfDay.Evening)
                    return true;
                if (DateTime.Now.Hour >= 0 && DateTime.Now.Hour < 6 && TimeOfDay == TimeOfDay.Night)
                    return true;
                if (DateTime.Now.Hour >= 6 && DateTime.Now.Hour < 12 && TimeOfDay == TimeOfDay.Morning)
                    return true;
 
                return false;
            }
        }
 
        /// <summary>
        /// Возвращает имя, которое будет использоваться в UI. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public string Name
        {
            get
            {
                return "Время дня";
            }
        }
 
        /// <summary>
        /// Вызывает диалог настройки экземпляра
        /// </summary>
        /// <returns></returns>
        public bool BeginUserSettings()
        {
            throw new NotImplementedException();
        }
 
        /// <summary>
        /// В ядре метод вызывается после метода BeginUserSettings
        /// </summary>
        public void Refresh()
        {
            // do nothing
        }
    }
 
    public enum TimeOfDay
    {
        Morning = 0,
        Day = 1,
        Evening = 2,
        Night = 4
    }
}

 

Модули действия — это части сценария, которые находятся в теле цикла ПОКА или теле оператора ЕСЛИ. Встроенными модулями этого типа являются «Показать сообщение», «Звуковой сигнал», «Убить процесс» и т. д. Для того, чтобы создать собственный модуль действия, нужно создать проект C#, добавить в References библиотеку PyriteClientInterfaces, затем создать непосредственно класс действия, унаследовать его от интерфейса IСustomAction, который находится в сборке PyriteClientInterfaces. Также класс нужно пометить атрибутом Serializable.

Описание методов и свойств:

public string Name – возвращает наименование модуля действия (всегда помечается атрибутом XmIgnore);

public bool AllowUserSettings – возвращает значение, указывающее, можно ли редактировать параметры экземпляра текущего класса (всегда помечается атрибутом XmIgnore);

public bool BeginUserSettings () - метод инициализации текущего экземпляра. Обычно эта функция вызывает окошко настройки экземпляра.

public void Refresh () - метод, который вызывается сразу после десереализации экземпляра. Обычно в нем применяются настройки.

public bool IsBusyNow – Необходимо выставлять true в начале тела метода Do, false-в конце. Всегда помечать атрибутом [XmlIgnore].

public bool State – Возвращает текущий статус задачи, который будет отображаться в UI и передаваться в метод Do. Всегда помечать атрибутом [XmlIgnore].

public string Do(string inputState ) – Метод вызывает целевое действие; в зависимости от inputState следует корректировать действие и возвращаемое значение.

Все собственные свойства (которые не перечислены в списке), которые необходимо «запоминать» программе, следует делать public, иначе они не будут сохраняться в экземпляре. Также все собственные свойства можно помечать атрибутом HumanFriendlyName, в конструктор которого добавлять дружественное пользователю название свойства.

 

Пример модуля действия (действие показать сообщение):

using PyriteClientIntefaces;
using System;
using System.Windows.Forms;
using System.Xml.Serialization;
 
namespace ModsExample
{
    /// <summary>
    /// Всегда помечается Serializable
    /// </summary>
    [Serializable]
    public class ShowMessageAction : ICustomAction
    {
        /// <summary>
        /// Возвращать true, если можно изменять свойства из UI. Всегда помечается [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public bool AllowUserSettings
        {
            get
            {
                return true;
            }
        }
 
        /// <summary>
        /// Необходимо выставлять true в начале тела метода Do, false - в конце. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public bool IsBusyNow
        {
            getset;
        }
 
        /// <summary>
        /// Возвращает имя, которое будет использоваться в UI. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public string Name
        {
            get
            {
                return "Показать сообщение";
            }
        }
 
        /// <summary>
        /// Возвращает текущий статус задачи, который будет отображаться в UI и затем передаваться в метод Do. Всегда помечать атрибутом [XmlIgnore]
        /// </summary>
        [XmlIgnore]
        public string State
        {
            get
            {
                return "Показать сообщение: " + this.Message;
            }
        }
 
        /// <summary>
        /// Вызывает диалог настройки экземпляра
        /// </summary>
        /// <returns></returns>
        public bool BeginUserSettings()
        {
            var settingsForm = new ShowMessageSettingsForm();
            settingsForm.Message = this.Message;
            if (settingsForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.Message = settingsForm.Message;
                return true;
            }
            else
                return false;
        }
 
        /// <summary>
        /// Кастомное свойство
        /// </summary>
        [HumanFriendlyName("Текст сообщения")]
        public string Message { getset; }
 
        /// <summary>
        /// Метод вызывает целевое действие
        /// </summary>
        /// <param name="inputState">
        /// Входящий статус, в зависимости от него следует 
        /// корректировать действие и возвращаемое значение
        /// </param>
        /// <returns></returns>
        public string Do(string inputState)
        {
            IsBusyNow = true;
            MessageBox.Show(this.Message);
            IsBusyNow = false;
            return State;
        }
 
        /// <summary>
        /// В ядре метод вызывается после метода BeginUserSettings
        /// </summary>
        public void Refresh()
        {
            // do nothing
        }
    }
}