// package arena_net -- сетевая арена package arena_net import ( "fmt" "strings" "sync" "wartank/pkg/components/kernel/logger" "wartank/pkg/types" ) // АренаСеть -- базовый тип для сетевых арен type АренаСеть struct { types.ИБотСеть клиент types.ИХттпВоркер сцена types.ИСценаСтр стрУрл string блок sync.Mutex лог types.ИЛоггер } // НовАренаСеть -- возвращает новый *АренаСеть func НовАренаСеть(сцена types.ИСценаСтр, стрУрл string) *АренаСеть { лог := logger.НовЛоггер("АренаСеть") лог.Инфо("НовАренаСеть(): strUrl=%q\n", стрУрл) лог.Паника(сцена == nil, "НовАренаСеть(): ИСценаСтр == nil") лог.Паника(стрУрл == "", "НовАренаСеть(): стрУрл пустой\n") сам := &АренаСеть{ ИБотСеть: сцена.Бот().Сеть(), сцена: сцена, стрУрл: стрУрл, клиент: сцена.Бот().Сеть().ВебВоркер(), лог: лог, } _ = types.ИАренаСеть(сам) return сам } // Обновить -- обновляет список строк func (сам *АренаСеть) Обновить() { сам.блок.Lock() defer сам.блок.Unlock() // FIXME: попытка разобраться, что за фигня творится // time.Sleep(time.Millisecond * 500) сам.лог.Отладка("Обновить(): бот=%s\tсцена=%v\n", сам.сцена.Бот().Имя(), сам.сцена.Имя()) lstString := сам.клиент.Получ(сам.стрУрл) if ош := сам.сцена.СтрОбновить(lstString); ош != nil { сам.лог.Ошибка("Обновить(): при обновлении строк сцены, ош=\n\t%v\n", ош) } } // Get -- выполняет GET-запрос по указанному URL func (сам *АренаСеть) Get(strLink string) (lstString []string, err error) { сам.блок.Lock() defer сам.блок.Unlock() // log._rintf("INFO АренаСеть.Get(): link=%v\n", сам.strUrl) if !strings.Contains(strLink, сам.стрУрл) { return nil, fmt.Errorf("АренаСеть.Get(): strLink(%v) не содержит strUrl(%v)", strLink, сам.стрУрл) } lstString = сам.клиент.Получ(strLink) return lstString, nil }