| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // package arena -- типовая арена работы части игры (банк, арсенал и т.п.)
- package arena
- import (
- "fmt"
- "log"
- "sync"
- "wartank/pkg/alias"
- "wartank/pkg/arena/arena_context"
- "wartank/pkg/arena/arena_string"
- "wartank/pkg/arena/down_time"
- "wartank/pkg/types"
- )
- // Арена -- арена игры
- type Арена struct {
- types.ИАренаКонтекст
- времяОстат types.ИВремяОстат // Обратный отсчёт до окончания работы режима
- списСтр *arena_string.АренаСтроки // Список строк из сети для анализа секции
- блок sync.RWMutex
- }
- // НовАрена -- возвращает новую арену игры
- func НовАрена(бот types.ИБот, сценаИмя alias.АренаИмя, стрКонтроль string) *Арена {
- log.Printf("НовАрена(): стрКонтроль=%q\n", стрКонтроль)
- аренаКонтекст := arena_context.НовАренаКонтекст(бот, сценаИмя)
- сам := &Арена{
- ИАренаКонтекст: аренаКонтекст,
- времяОстат: down_time.НовВремОбрат(аренаКонтекст, 5),
- списСтр: arena_string.НовАренаСтроки(стрКонтроль),
- }
- _ = types.ИАрена(сам)
- return сам
- }
- // СтрОбновить -- обновляет список строк секции по требованию
- func (сам *Арена) СтрОбновить(lstString []string) error {
- if err := сам.списСтр.Set(lstString); err != nil {
- return fmt.Errorf("Арена.СтрОбновить(): при установке lstString, err=\n\t%w", err)
- }
- return nil
- }
- // СписПолучить -- возвращает список строк секции
- func (сам *Арена) СписПолучить() []string {
- return сам.списСтр.Get()
- }
- // ОбратВремяУст -- устанавливает новое значение обратного счётчика времени
- func (сам *Арена) ОбратВремяУст(времяСек alias.Время) error {
- ош := сам.времяОстат.Уст(времяСек)
- if ош != nil {
- return fmt.Errorf("Арена.ОбратВремяУст(): ош=\n\t%w", ош)
- }
- return nil
- }
- // ВремяОстат -- объект оставшегося времени
- func (сам *Арена) ВремяОстат() types.ИВремяОстат {
- сам.блок.RLock()
- defer сам.блок.RUnlock()
- return сам.времяОстат
- }
|