| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // package death_match -- объект схватки
- package death_match
- import (
- "fmt"
- "net/http"
- "time"
- "wartank/pkg/section"
- "wartank/pkg/types"
- "wartank/server/serv_bots/warbot/angar/battle/battle_register"
- "wartank/server/serv_bots/warbot/angar/battle/battle_wait"
- "wartank/server/serv_bots/warbot/angar/battle/battle_worker"
- )
- // Сражение -- объект схватки
- type Схватка struct {
- *section.Секция
- бот types.ИБот
- клиент *http.Client
- регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
- ожидание *battle_wait.СхваткаОжидание // Ождатель начала схватки
- действие *battle_worker.СхваткаИсполнитель // Исполнитель схватки
- }
- // НовСражение -- возвращает новый *Battle
- func НовСхватка(бот types.ИБот) (*Схватка, error) {
- секция, ош := section.НовСекция(бот, "Группа схватки", `<span>до начала `)
- if ош != nil {
- return nil, fmt.Errorf("НовСражение(): in create *Section, err=\n\t%w", ош)
- }
- сам := &Схватка{
- Секция: секция,
- бот: бот,
- клиент: бот.Сеть().Коннект(),
- }
- {
- сам.регистрация, ош = battle_register.НовСражениеРегистрация(бот)
- if ош != nil {
- return nil, fmt.Errorf("НовСражение(): при создании регистратора на схватки, err=\n\t%w", ош)
- }
- сам.ожидание, ош = battle_wait.НовСражениеОжидание(бот)
- if ош != nil {
- return nil, fmt.Errorf("НовСражение(): при создании ожидателя схватки, err=\n\t%w", ош)
- }
- сам.действие, ош = battle_worker.НовСражениеИсполнитель(бот)
- if ош != nil {
- return nil, fmt.Errorf("НовСражение(): при создании исполнителя схватки, err=\n\t%w", ош)
- }
- }
- // сам.shotTimeFull.Set(8000) // 8000 msec
- return сам, nil
- }
- func (сам *Схватка) Пуск() error {
- go сам.пуск()
- return nil
- }
- // запускает в работу сражение
- func (сам *Схватка) пуск() {
- for {
- select {
- case <-сам.бот.Кнт().Done():
- return
- default:
- сам.регистрация.Зарегистрироваться()
- сам.ожидание.Ожидать()
- сам.действие.Танковать()
- time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
- }
- }
- }
- // ЕслиНачало -- возвращает признак начала схватки (для браузера)
- func (сам *Схватка) ЕслиНачало() types.ИСтатПарам {
- return сам.действие.Тревога()
- }
|