battle.go 2.7 KB

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