battle.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // package battle -- объект сражения
  2. package battle
  3. import (
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "wartank/pkg/section"
  8. "wartank/pkg/types"
  9. "wartank/server/serv_bots/warbot/angar/battle/battle_register"
  10. "wartank/server/serv_bots/warbot/angar/battle/battle_wait"
  11. "wartank/server/serv_bots/warbot/angar/battle/battle_worker"
  12. )
  13. // Сражение -- объект сражения
  14. type Сражение struct {
  15. *section.Секция
  16. бот types.ИБот
  17. клиент *http.Client
  18. регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
  19. ожидание *battle_wait.СхваткаОжидание // Ождатель начала сражения
  20. действие *battle_worker.СхваткаИсполнитель // Исполнитель сражения
  21. }
  22. // НовСражение -- возвращает новый *Battle
  23. func НовСражение(бот types.ИБот) (*Сражение, error) {
  24. секция, ош := section.НовСекция(бот, "Группа сражения", `<span>до начала `)
  25. if ош != nil {
  26. return nil, fmt.Errorf("НовСражение(): in create *Section, err=\n\t%w", ош)
  27. }
  28. сам := &Сражение{
  29. Секция: секция,
  30. бот: бот,
  31. клиент: бот.Сеть().Коннект(),
  32. }
  33. {
  34. сам.регистрация, ош = battle_register.НовСражениеРегистрация(бот)
  35. if ош != nil {
  36. return nil, fmt.Errorf("НовСражение(): при создании регистратора на сражения, err=\n\t%w", ош)
  37. }
  38. сам.ожидание, ош = battle_wait.НовСражениеОжидание(бот)
  39. if ош != nil {
  40. return nil, fmt.Errorf("НовСражение(): при создании ожидателя сражения, err=\n\t%w", ош)
  41. }
  42. сам.действие, ош = battle_worker.НовСражениеИсполнитель(бот)
  43. if ош != nil {
  44. return nil, fmt.Errorf("НовСражение(): при создании исполнителя сражения, err=\n\t%w", ош)
  45. }
  46. }
  47. // сам.shotTimeFull.Set(8000) // 8000 msec
  48. return сам, nil
  49. }
  50. func (сам *Сражение) Пуск() error {
  51. go сам.пуск()
  52. return nil
  53. }
  54. // запускает в работу сражение
  55. func (сам *Сражение) пуск() {
  56. for {
  57. select {
  58. case <-сам.бот.Кнт().Done():
  59. return
  60. default:
  61. сам.регистрация.Зарегистрироваться()
  62. сам.ожидание.Ожидать()
  63. сам.действие.Танковать()
  64. time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
  65. }
  66. }
  67. }
  68. // ЕслиНачало -- возвращает признак начала сражения (для браузера)
  69. func (сам *Сражение) ЕслиНачало() types.ИСтатПарам {
  70. return сам.действие.Тревога()
  71. }