// 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.НовСекция(бот, "Группа схватки", `до начала `) 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 сам.действие.Тревога() }