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