arena_duel.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // package arena_duel -- арена дуэли за топливо
  2. package arena_duel
  3. import (
  4. "time"
  5. . "wartank/app/lev0/types"
  6. "wartank/app/lev2/arena"
  7. "wartank/app/lev2/arena_duel/battle_register"
  8. "wartank/app/lev2/arena_duel/battle_wait"
  9. "wartank/app/lev2/arena_duel/battle_worker"
  10. )
  11. // АренаДуэль -- арена дуэли за топливо
  12. type АренаДуэль struct {
  13. ИАрена
  14. бот ИБот
  15. клиент ИХттпВоркер
  16. регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
  17. ожидание *battle_wait.СхваткаОжидание // Ожидатель начала сражения
  18. действие *battle_worker.СхваткаИсполнитель // Исполнитель сражения
  19. }
  20. // НовСражение -- возвращает новую арену дуэли
  21. func НовАренаДуэль(конт ИБотКонтекст, бот ИБот) *АренаДуэль {
  22. сам := &АренаДуэль{
  23. бот: бот,
  24. клиент: бот.Сеть().ВебВоркер(),
  25. }
  26. аренаКонфиг := arena.АренаКонфиг{
  27. Бот_: бот,
  28. АренаИмя_: "Арена дуэли",
  29. СтрКонтроль_: "<span>до начала ",
  30. ФнПуск_: сам.пуск,
  31. СтрУрл_: "https://wartank.ru/battle",
  32. }
  33. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  34. сам.регистрация = battle_register.НовСражениеРегистрация(конт, бот)
  35. сам.ожидание = battle_wait.НовСражениеОжидание(конт, бот)
  36. сам.действие = battle_worker.НовСражениеИсполнитель(конт, бот)
  37. // сам.shotTimeFull.Set(8000) // 8000 msec
  38. return сам
  39. }
  40. func (сам *АренаДуэль) Пуск() {
  41. go сам.пуск()
  42. }
  43. // запускает в работу дуэль
  44. func (сам *АренаДуэль) пуск() {
  45. for {
  46. select {
  47. case <-сам.бот.Контекст().Done():
  48. return
  49. default:
  50. сам.регистрация.Зарегистрироваться()
  51. сам.ожидание.Ожидать()
  52. сам.действие.Пуск()
  53. time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
  54. }
  55. }
  56. }
  57. // ЕслиНачало -- возвращает признак начала сражения (для браузера)
  58. func (сам *АренаДуэль) ЕслиНачало() ИСтатПарам {
  59. return сам.действие.Тревога()
  60. }