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