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