Инструкция
создания модулей
В
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 { get; set; }
/// <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
{
get; set;
}
/// <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 { get; set; }
/// <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
}
}
}