// package arena -- типовая арена работы части игры (банк, арсенал и т.п.) package arena import ( "log" . "gitp78su.ipnodns.ru/svi/kern" . "gitp78su.ipnodns.ru/svi/kern/kc/helpers" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" "wartank/app/lev0/alias" . "wartank/app/lev0/types" "wartank/app/lev1" "wartank/app/lev2/arena/arena_context" "wartank/app/lev2/arena/arena_net" "wartank/app/lev2/arena/arena_string" ) // АренаКонфиг -- конфигурация арены type АренаКонфиг struct { Конт_ ILocalCtx АренаИмя_ alias.ААренаИмя СтрКонтроль_ string // Контрольная строка для арены СтрУрл_ string // Адрес арены } // Контролирует правильность параметров func (сам *АренаКонфиг) контроль() { Hassert(сам.Конт_ != nil, "АренаКонфиг.СтрКонтроль(): конт ==nil") Hassert(сам.АренаИмя_ != "", "АренаКонфиг.СтрКонтроль(): СценаИмя_ == \"\"") Hassert(сам.СтрУрл_ != "", "АренаКонфиг.СтрКонтроль(): СтрУрл_ == \"\"") } // Арена -- арена игры type Арена struct { ИАренаКонтекст списСтр *arena_string.АренаСтроки // Список строк из сети для анализа секции конф АренаКонфиг уровень ИСтатПарам сеть ИАренаСеть лог ILogBuf } // НовАрена -- возвращает новую арену игры func НовАрена(конт ILocalCtx, конф АренаКонфиг) ИАрена { лог := NewLogBuf() лог.Debug("НовАрена(): стрКонтроль=%q\n", конф.СтрКонтроль_) конф.контроль() аренаКонтекст := arena_context.НовАренаКонтекст(конт, конф.АренаИмя_) сам := &Арена{ ИАренаКонтекст: аренаКонтекст, уровень: lev1.НовСтатПарам("уровень"), списСтр: arena_string.НовАренаСтроки(конт, конф.СтрКонтроль_), конф: конф, лог: лог, } сам.сеть = arena_net.НовАренаСеть_(конт, сам, конф.СтрУрл_) //"https://wartank.ru/polygon") return сам } // Пуск -- запускает арену func (сам *Арена) Пуск() { сам.Обновить() log.Printf("Пуск(): сам=%v\tстатус=%v", сам.конф.АренаИмя_, сам.Состояние().Получ()) } // Обновить -- обновляет арену func (сам *Арена) Обновить() { сам.сеть.Обновить() списСтр := сам.СписПолучить() if len(списСтр) == 0 { списСтр = сам.сеть.ВебВоркер().Получ(сам.конф.СтрУрл_) } сам.СтрОбновить(списСтр) } // СтрОбновить -- обновляет список строк секции по требованию func (сам *Арена) СтрОбновить(lstString []string) { сам.списСтр.Set(lstString) } // Уровень -- возвращает уровень арены func (сам *Арена) Уровень() ИСтатПарам { return сам.уровень } // СписПолучить -- возвращает список строк секции func (сам *Арена) СписПолучить() []string { lstString := сам.списСтр.Получ() if len(lstString) == 0 { сам.Обновить() lstString = сам.СписПолучить() } return lstString } // Сеть -- возвращает объект сети func (сам *Арена) Сеть() ИАренаСеть { return сам.сеть }