// 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 }