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