// package arena_battle -- объект сражения package arena_battle import ( "time" . "wartank/app/lev0/types" "wartank/app/lev2/arena" "wartank/app/lev2/arena_battle/battle_register" "wartank/app/lev2/arena_battle/battle_wait" "wartank/app/lev2/arena_battle/battle_worker" ) // АренаСражение -- объект сражения type АренаСражение struct { ИАрена бот ИБот клиент ИХттпВоркер регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение ожидание *battle_wait.СхваткаОжидание // Ожидатель начала сражения действие *battle_worker.СхваткаИсполнитель // Исполнитель сражения } // НовСражение -- возвращает новый *Battle func НовСражение(конт ИБотКонтекст, бот ИБот) *АренаСражение { сам := &АренаСражение{ бот: бот, клиент: бот.Сеть().ВебВоркер(), } аренаКонфиг := arena.АренаКонфиг{ Бот_: бот, АренаИмя_: "Арена сражения", СтрКонтроль_: "до начала ", ФнПуск_: сам.пуск, СтрУрл_: "https://wartank.ru/pve", } сам.ИАрена = arena.НовАрена(конт, аренаКонфиг) сам.регистрация = battle_register.НовСражениеРегистрация(конт, бот) сам.ожидание = battle_wait.НовСражениеОжидание(конт, бот) сам.действие = battle_worker.НовСражениеИсполнитель(конт, бот) // сам.shotTimeFull.Set(8000) // 8000 msec return сам } func (сам *АренаСражение) Пуск() { go сам.пуск() } // запускает в работу сражение func (сам *АренаСражение) пуск() { for { select { case <-сам.бот.Контекст().Done(): return default: сам.регистрация.Зарегистрироваться() сам.ожидание.Ожидать() сам.действие.Пуск() time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами } } } // ЕслиНачало -- возвращает признак начала сражения (для браузера) func (сам *АренаСражение) ЕслиНачало() ИСтатПарам { return сам.действие.Тревога() }