Хранилище разнообразных таймеров для сервисной инфраструктуры. В сервисной инфраструктуре без таймеров — восе никуда, поэтому это практически обязательный плагин для старта.
Плагин настраивается через Plugin.Configuration
и можно через Plugin.ConfigurationHttp
, но никакой дружественности у интерфейса не будет и настраивать придётся через Json.
Description
: — Описание таймера (Для лёгкого поиска)Timer Name
: — Наименование таймера для использующего кодаInterval
: 00:01:00 — Интервал срабатывания таймераSleep Hours
: Empty — Интервал врененной остановки (По умолчанию - выключено)
StartTimeSpan
: 00:00:00 — Интервал начала остановкиEndTimeSpan
: 23:59:59 — Интервал окончания остановкиStart Interval (sec)
: 00:00:01 — Интервал запуска таймера после запуска основного приложенияWork Days
: 127 — Дни недели работы таймераWork Hours
: Empty — Интервал работы таймера (По умолчанию - включено)
StartTimeSpan
: 00:00:00 — Интервал начала работы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); }