// package section -- типовая секция работы части игры (банк, арсенал и т.п.) package section import ( "fmt" "log" "sync" "wartank/pkg/alias" "wartank/pkg/components/lst_string" "wartank/pkg/components/section/down_time" "wartank/pkg/components/section/section_mode" "wartank/pkg/components/section/zone" "wartank/pkg/types" ) // Секция -- секция игры type Секция struct { *zone.Зона времяОстат types.ИВремяОстат // Обратный отсчёт до окончания работы режима режим types.ИРежимРаботы // Объект режима работы списСтр *lst_string.LstString // Список строк из сети для анализа секции блок sync.RWMutex } // НовСекция -- возвращает новую секцию игры func НовСекция(бот types.ИБот, зонаИмя, стрКонтроль string) (*Секция, error) { log.Printf("НовСекция(): стрКонтроль=%q\n", стрКонтроль) zone, err := zone.НовЗона(бот, зонаИмя) if err != nil { return nil, fmt.Errorf("НовСекция(): in create IZone, err=\n\t%w", err) } sf := &Секция{ Зона: zone, времяОстат: down_time.НовВремОбрат(zone, 5), режим: section_mode.NewSectionMode(), } sf.списСтр, err = lst_string.NewLstString(стрКонтроль) if err != nil { return nil, fmt.Errorf("НовСекция(): in create *LstString, err=\n\t%w", err) } return sf, nil } // СтрОбновить -- обновляет список строк секции по требованию func (sf *Секция) СтрОбновить(lstString []string) error { if err := sf.списСтр.Set(lstString); err != nil { return fmt.Errorf("Section.СтрОбновить(): при установке lstString, err=\n\t%w", err) } return nil } // СписПолучить -- возвращает список строк секции func (sf *Секция) СписПолучить() []string { return sf.списСтр.Get() } // ОбратВремяУст -- устанавливает новое значение обратного счётчика времени func (сам *Секция) ОбратВремяУст(время alias.Время) error { ош := сам.времяОстат.Уст(время) if ош != nil { return fmt.Errorf("Секция.ОбратВремяУст(): ош=\n\t%w", ош) } return nil } // Уст -- устанавливает новое значение обратного счётчика времени func (сам *Секция) Уст(времяСек alias.Время) error { if ош := сам.времяОстат.Уст(времяСек); ош != nil { return fmt.Errorf("Секция.ParseCountDown(): err=\n\t%w", ош) } // if err := sf.countDown.Set(sec); err != nil { // // } return nil } // ВремяОпрос -- объект оставшегося времени func (сам *Секция) ВремяОпрос() types.ИВремяОстат { сам.блок.RLock() defer сам.блок.RUnlock() return сам.времяОстат } // РежимТекущ -- текущий режим работы func (сам *Секция) РежимТекущ() types.ИРежимРаботы { return сам.режим }