Проекты

Timers Plugin

Хранилище разнообразных таймеров для сервисной инфраструктуры. В сервисной инфраструктуре без таймеров — восе никуда, поэтому это практически обязательный плагин для старта.

Плагин настраивается через Plugin.Configuration и можно через Plugin.ConfigurationHttp, но никакой дружественности у интерфейса не будет и настраивать придётся через Json.

Настройки

  • Description: — Описание таймера (Для лёгкого поиска)
  • Timer Name: — Наименование таймера для использующего кода
  • Interval: 00:01:00 — Интервал срабатывания таймера
  • Sleep Hours: Empty — Интервал врененной остановки (По умолчанию - выключено)
    1. StartTimeSpan: 00:00:00 — Интервал начала остановки
    2. EndTimeSpan: 23:59:59 — Интервал окончания остановки
  • Start Interval (sec): 00:00:01 — Интервал запуска таймера после запуска основного приложения
  • Work Days: 127 — Дни недели работы таймера
  • Work Hours: Empty — Интервал работы таймера (По умолчанию - включено)
    1. StartTimeSpan: 00:00:00 — Интервал начала работы
    2. EndTimeSpan: 23:59:59 — Интервал окончания работы
  • Single Instance: False — Таймер может быть запущен только в одном экземпляре. (С таймером запускается IPC)
  • Timer Type: TimersTimer — Тип используемого нативного таймера (Возможные таймеры: System.Timers.Timer, System.Threading.Timer, System.Windows.Forms.Timer)
  • Default — Настройки таймера по умолчанию. Если использующий плагин инициирует таймер с неизвестным Timer Name, то будет создан новый таймер, для которого будут взяты настройки из Default таймера.

Методы

/// <summary>Ссылка на описание плагина компиляции</summary>
public IPluginDescription PluginInstance
{
	get { return this._pluginTimer ?? (this._pluginTimer = this.Plugin.Host.Plugins["69c79417-c168-434a-a597-4e224237a527"]); }
}

/// <summary>Запуск таймера через плагин</summary>
/// <param name="key">Ключ таймера, используется как уникальный индекс</param>
/// <param name="timerName">Наименование ключа настроек таймера, которые используются для выбора настроек таймера</param>
/// <param name="callback">Событие обратного вызова, которое используется для вызова при срабатывании таймера</param>
/// <param name="state">Данные, которые передаются в метод обратного вызова при срабатывании таймера</param>
public void RegisterTimer(String key, String timerName, EventHandler<EventArgs> callback, Object state)
{
	IPluginDescription pluginTimer = this.PluginInstance;
	if(pluginTimer == null)
		throw new ArgumentNullException("Plugin ID=69c79417-c168-434a-a597-4e224237a527 not installed");

	pluginTimer.Type.GetMember<IPluginMethodInfo>("RegisterTimer")
		.Invoke(key, timerName, callback, state);
}

/// <summary>Остановка таймера через плагин</summary>
/// <param name="key">Ключ таймера, используется как уникальный индекс</param>
/// <returns>Результат отключения таймера</returns>
public Boolean UnregisterTimer(String key)
{
	IPluginDescription pluginTimer = this.PluginInstance;
	if(pluginTimer == null)
		throw new ArgumentNullException("Plugin ID=69c79417-c168-434a-a597-4e224237a527 not installed");

	return (Boolean)pluginTimer.Type.GetMember<IPluginMethodInfo>("UnregisterTimer")
		.Invoke(key);
}

/// <summary>Выполнить запущенный таймер по ключу</summary>
/// <param name="key">Ключ таймера для выполнения</param>
public void InvokeTimer(String key)
{
	IPluginDescription pluginTimer = this.PluginInstance;
	if(pluginTimer == null)
		throw new ArgumentNullException("Plugin ID=69c79417-c168-434a-a597-4e224237a527 not installed");

	pluginTimer.Type.GetMember<IPluginMethodInfo>("InvokeTimer")
		.Invoke(key);
}

/// <summary>Получить наименования всех созданных таймеров</summary>
/// <returns>Список наименований созданных таймеров</returns>
public String[] GetTimersName()
{
	IPluginDescription pluginTimer = this.PluginInstance;
	if(pluginTimer == null)
		return null;

	return (String[])pluginTimer.Type.GetMember<IPluginMethodInfo>("GetTimersName")
		.Invoke();
}

/// <summary>Проверка на существование таймера по наименоваию таймера</summary>
/// <param name="timerName">Наименование таймера на проверку существования</param>
/// <returns>Таймер с таким наименованием - существует</returns>
public Boolean IsTimerExists(String timerName)
{
	IPluginDescription pluginTimer = this.PluginInstance;
	if(pluginTimer == null)
		return false;

	return (Boolean)pluginTimer.Type.GetMember<IPluginMethodInfo>("IsTimerExists")
		.Invoke(timerName);
}
Теги:

Скачать

Ссылки

Родительские файлы

Дочерние файлы