| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // package scene_net -- сетевая сцена
- package scene_net
- import (
- "fmt"
- "log"
- "strings"
- "sync"
- // "time"
- "wartank/pkg/types"
- )
- // СекцияСеть -- базовый тип для сетевых сцен
- type СценаСеть struct {
- types.ИБотСеть
- клиент types.ИВебВоркер
- секция types.ИСценаСтр
- стрУрл string
- блок sync.Mutex
- }
- // НовСекцияСеть -- возвращает новый *СекцияСеть
- func НовСекцияСеть(сцена types.ИСценаСтр, стрУрл string) (*СценаСеть, error) {
- log.Printf("НовСекцияСеть(): url=%q\n", стрУрл)
- { // Предусловия
- if сцена == nil {
- return nil, fmt.Errorf("НовСекцияСеть(): ISection == nil")
- }
- if стрУрл == "" {
- return nil, fmt.Errorf("НовСекцияСеть(): strUrl is empty")
- }
- }
- сам := &СценаСеть{
- ИБотСеть: сцена.Бот().Сеть(),
- секция: сцена,
- стрУрл: стрУрл,
- клиент: сцена.Бот().Сеть().ВебВоркер(),
- }
- return сам, nil
- }
- // Обновить -- обновляет список строк
- func (сам *СценаСеть) Обновить() error {
- if сам == nil {
- return fmt.Errorf("СценаСеть.Обновить(): нет объекта СценаСеть")
- }
- сам.блок.Lock()
- defer сам.блок.Unlock()
- // FIXME: попытка разобраться, что за фигня творится
- // time.Sleep(time.Millisecond * 500)
- log.Printf("СценаСеть.Обновить(): bot=%s\tsection=%v\n", сам.секция.Бот().Имя(), сам.секция.Имя())
- if сам.секция.Имя() == "Арсенал" {
- log.Printf("СекцияСеть.Обновить(): арсенал\n")
- }
- lstString, err := сам.клиент.Получ(сам.стрУрл)
- if err != nil {
- return fmt.Errorf("СценаСеть.Обновить(): in make request, err=\n\t%w", err)
- }
- if err := сам.секция.СтрОбновить(lstString); err != nil {
- return fmt.Errorf("СценаСеть.Обновить(): in update ISection, err=\n\t%w", err)
- }
- return nil
- }
- // 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, err = сам.клиент.Получ(strLink)
- if err != nil {
- return nil, fmt.Errorf("СценаСеть.Get(): err=\n\t%v", err)
- }
- return lstString, nil
- }
|