| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // 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 {
- ИАрена
- конт ILocalCtx
- клиент ИХттпВоркер
- регистрация *death_register.СхваткаРегистрация // Регистратор на сражение
- ожидание *death_wait.СражениеОжидание // Ожидатель начала схватки
- действие *death_worker.СхваткаИсполнитель // Исполнитель схватки
- }
- // НовСражение -- возвращает новый *Battle
- func НовСхватка(конт IKernelCtx) *АренаСхватка {
- бот := конт.Get("бот").Val().(ИБот)
- сам := &АренаСхватка{
- конт: конт,
- клиент: бот.Сеть().ВебВоркер(),
- }
- аренаКонфиг := arena.АренаКонфиг{
- Конт_: конт,
- АренаИмя_: "Арена схватки",
- СтрКонтроль_: `<span>до начала `,
- СтрУрл_: "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 сам.действие.Тревога()
- }
|