Задачка №10: Команда ddo - отложенное исполнение команд[old]

Разработка новых функций.

Модератор: 4epT

Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Задачка №10: Команда ddo - отложенное исполнение команд[old]

Сообщение piroJOKE »

piroJOKE:
Идея: "Выполнить указанную команду через N секунд" ("delay-do").

Синтаксис:

ddo (время) (командная строка)
и вспомогательные:
ddo stop (ddo s)- очистить очередь отложенных команд;
ddo list (ddo l) - показать список команд в очереди;

(опционально, как идея: префикс "!" - выполнить, даже если отключено AI)


Примеры:

ddo 20 macro checkMap
ddo 12 tele
ddo 5 c Какого х.......?!
ddo stop
ddo 600 quit

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

Как частность, это позволило бы обойти главную бяку макросов - невозможность "параллельного"
исполнения нескольких сценариев (даже если они не противоречат друг другу!).

Вторая частность - разнообразные таймаут-тесты. То есть, мы начинаем какое-то действие, но
через некоторое время проверяем, например макросом, - всё ли в порядке, исполнено ли то, что было нужно?
all:
(...дальше всё выкинуто, т.к. толком так ни к чему и не пришли...)
* * *

Опционально, вариант синтаксиса:
ddo задержка команда
  • пример:
    ddo 30 relog 120
ddo время команда
  • пример:
    ddo 17:59:05 c ой... так, мне пора, всем пока!;;e pif;;quit
(т.е., если встречается в 1м аргументе символ :, то обрабатывать аргумент как абсолютное время, а если нет - как задержку, "относительное" время.

* * *

Вот полная спецификация команд этого плагина:
плагин 'ddo' - исполнение команд через некоторе время

общий синтаксис:

ddo [метка] [время] [команда|опция]

подробности:

ddo [label] [[!][*]time] [command_string]
ddo [label|#] [stop]
ddo [?]

префиксы времени:
! выполнить, даже если отключен AI
* повторять выполнение команды (иначе задача удаляется из списка после 1го выполнения)

вот какие частные случаи может описать это множество:

ddo petia 30 c hello;;e heh
создать задачу 'petia' и выполнить ее через 30 секунд; сама задача - сказать фигню и пустить эмоцию.

ddo petia e pif
создать задачу petia, сама задача - эмоция. однако, посколько "время опущено", то эта задача никогда не выполнится сама.
така задача будет висеть в списке задач вечно, пока не будет удалена или запущена на исполнение вручную.

ddo petia stop
убрать задачу petia из списка

ddo *30 e pif
создать безымянную (нет метки) задачу, и выполнять ее каждые ('*') тридцать секунд, задача - эмоция.

ddo maxpain !20 quit
создать задачу "макспейн" (сама задача - выход из OpenKore), и выполнить ее через 20 секунд, даже если будет отключен AI (опция '!').

ddo maxpain
выполнить задачу "макспейн" немедленно и удалить ее из списка задач.

ddo
показать список задач и упоминание об опции ?

ddo ?
показать этот текст ;)

ddo 3
выполнить задачу №3 и удалить её;
так можно запускать вручную безымянные задачи из списка, например, для отладки.
примечание - задачи с опцией '*' (циклическое повторение) не удаляются из списка после их вызова вручную.

ddo mustdie 30
эта команда не делает ничего, т.к. "задача" просто отсутствует

ddo 2 stop
удалить именованную или безымянную задачу №2 из списка задач

ddo 30 ddo 10 e pif
эта извращенная задача является функциональным аналогом задачи:
ddo 40 e pif

ddo 15 15 e pif
эта безымянная задача через 15 секунд заявит об... ошибке!
ее афтар наивно полагал, что шедулер разберёт эту строку вот так:
ddo 15 15 e pif
...но нет! тут ошибка - метка не может быть цифрой. А вот так бы всё сработало как нужно:
ddo 15w 15 e pif

ddo shithappens !* e pif
и/или
ddo gavgav * e !
я не придумал реакцию на эту извращенную задачу, очевидно, лучше всего сообщить пользователю об ошибке.
или, как вариант, считать ее аналогом ddo petia e pif, с той лишь разницей, что после ручного запуска задача не удаляется из списка.

ddo *1 ddo *1 ddo *1
подобная рекурсивная фигня наверное сожрет всю память и завесит ОК
лучше так не делать. однако, вот такой вариант:
ddo omg *1 ddo omg *1 ddo omg *1
...вероятно окажется безопасным, потому что он не будет создавать новые задачи, а каждый раз будет перезаписывать одну и ту же задачу с меткой omg.

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

ddo stop
удалить все задачи

___ всё! дальше пошел опциональный синтаксис шедулера, который вероятно никто делать не будет ____

тут описаны ':'-выражения, запуск задач в определенное время.
вместо этого лучше применить кронтаб, над которым работают люди.

ddo sunshine 12:00 c nice...
создать задачу 'sunshine' и выполнить ее в полдень. сама задача - сказать ерунду.

ddo ??:55 e pif
эта безымянная задача каждый час, за пять минут до наступления нового часа пускает эмоцию.

ddo midnight *00:00 c booo
эта задача каждую полночь говорит "бу!"
Последний раз редактировалось piroJOKE Сб ноя 10, 2007 6:10 pm, всего редактировалось 10 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

kLabMouse писал(а):Бяка. Моно зделать небольшой плаг для етого. но Макросам он не поможет.
Еще как поможет. Макрос может быть в таком случае лишь спусковым крючком для него; т.е. макрос загружает всю последовательность команд и отключается.

С другой стороны, это нужно только с случае сложных условий запуска. Ведь мы имеем ныне возможность запускать несколько команд в одной строке - через разделитель; поэтому можно просто обойтись doCommand'ом.
Последний раз редактировалось piroJOKE Пт ноя 09, 2007 7:38 pm, всего редактировалось 2 раза.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

тут было что-то вроде "используй таймауты в блоках doCommand!"
Мне таймауты в дуКомманд нафиг не нужны; это ерунда. (Я уже с этим пробовал играться, на-до-е-ло!). Ровно как и трах с менянием его "на ходу".
Кратко говоря, нужен нормальный, прозрачно работающий шедулер. А не очередной изврат! %)

ЗЫ: Не, ну настоящий шедулер - то отдельный разговор... Хотя... Хм... А чего бы нам не выполнить какую-то команду в 12:35, к примеру? Хм...

* * *

Дополнение: а с тех пор, как мы поставили эксперимент про "таймаут, собаку бешенную" (не могу чо-то найти эту тему), оказалось, что шутка с doCommand-ом... вообще не сработает!
Последний раз редактировалось piroJOKE Пт ноя 09, 2007 7:44 pm, всего редактировалось 2 раза.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Ой, что-то стёр лишнее...

В общем, тема очищена от флуда.

Случайно были стёрты две ценные мысли КлабМауса:
а) использовать таск-систему как шедулер;
б) использовать с минимальными переделками блок смены конфига по времени.

Добавлено спустя 1 час 25 минут 10 секунд:

Еще вариант синтаксиса (типо идея):
ddo ??:05 команда - выполнять команду каждый час, в 05 минут.

и/или

ddo *40 команда - выполнять команду каждые 40 секунд.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

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

Добавлено спустя 17 минут 15 секунд:

Перенесено в "идеи".
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Ответить