Пак стъпка по стъпка:
Scheduled Tasks
1. Scheduler-а се интересува да има направена команда update:resources
2. Командата се интересува да има създадена таблица resources_per_min
Процес на работа:
1. Schduler-а се изпълнява всяка минута, проверява дали има задачи за изпълнение и ако има ги изпълнява. В случая ти имаш.
2. Командата се изпълнява, взима текущите данни от
resources_per_min и ъпдейтва съответно стойностите в
resources. Край.
3. Връщаме се на т1.
Добавка: Scheduler-а винаги се изпълнява щом му дойде времето(в твоя случай всяка минута). В твоя случай, той не следи дали има построена дадена мина. Него го интересува само данните да са налични, за да не праска грешки. Дали всички стойности ще са 0, не го интересува, той ще си се изпълнява.
Важно: Тази команда има за задача да ъпдейтва на всички потребители ресурсите. За тази цел в командата трябва да завърташ цикъл с всички потребители.
Queue Jobs обяснени за твоята задача
1. Queue Jobs(в твоя случай UpdateResourcesPerMinJob) се интересува от данните на потребителя и данните на сградата, която строиш.
1.1. Данните на потребителя ти трябват, за да знаеш на кой точно потребител трябва да ъпдейтнеш данните в resources_per_min
1.2. Данните за сградата ти трябват, за да знаеш коя колона да промениш. Ако строиш каменна мина, да промениш стойността на кеманната мина. Съответно и за другите.
Съвет: Изпращай обект Building(за пример), от който ще можеш да взимаш името на сградата, нивото, ресурсите след всяко ниво, които трябва да получаваш(това е най-важно всъщност) и т.н.
2. Да имаш queue worker пуснат.
Информация: Да, винаги трябва да е отворена или както ти казаха, да пуснеш процеса в бекграунд. Но това са подробности, които не ти трябват, ако го правиш само с научна цел.
Процес на работа
1. Имаш контролер, който управлява строенето на всички сгради.
1.1. Контролера не се интересува каква ще е сградата, стига да е сграда.
2. При извикване на съответния метод, който в случая се вика при кликане на бутон за строене на сграда, има за цел да регистрира задачата - UpdateResourcesPerMinJob::dispatch(array params)
3. Ако не зададеш delay, то задачата ще се изпълни веднага, но ни не искаме това.
4. Закачаш на dispatch() един delay(), който трябва да е времето за строене на сградата, за да може чак след като строежа приключи, задачата да се изпълни.
5. Сградата е построена, изпълнява се задачата, ъпдейтва resources_per_min и приключва.
Информация: Задачата трябва да се регистрира само и единствено, когато е натиснат бутон за строене на сграда или респективно, когато се извика съответния action в контролера, И трябва да се изпълнява винаги след като сградата се построи или иначе казано със закъснение(delay)
Надявам се вече да е малко по-ясно какво се случва, че се уморих.