| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // package section_net -- сетевая секция
- package section_net
- import (
- "fmt"
- "log"
- "strings"
- "sync"
- // "time"
- "wartank/pkg/types"
- )
- /*
- Базовый тип для сетевых секций
- */
- // СекцияСеть -- базовый тип для сетевых секций
- type СекцияСеть struct {
- клиент 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 (сам *СекцияСеть) ОбновитьСеть() (err error) {
- if сам == nil {
- return
- }
- сам.блок.Lock()
- defer сам.блок.Unlock()
- // FIXME: попытка разобраться, что за фигня творится
- // time.Sleep(time.Millisecond * 500)
- log.Printf("СекцияСеть.ОбновитьСеть(): bot=%s\tsection=%v\n", сам.секция.Бот().Имя(), сам.секция.Имя())
- if сам.секция.Имя() == "Арсенал" {
- log.Printf("СекцияСеть.ОбновитьСеть(): арсенал\n")
- }
- lstString, err := сам.клиент.Get(сам.стрУрл)
- 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 (sf *СекцияСеть) Get(strLink string) (lstString []string, err error) {
- sf.блок.Lock()
- defer sf.блок.Unlock()
- // log._rintf("INFO СекцияСеть.Get(): link=%v\n", sf.strUrl)
- if !strings.Contains(strLink, sf.стрУрл) {
- return nil, fmt.Errorf("СекцияСеть.Get(): strLink(%v) не содержит strUrl(%v)", strLink, sf.стрУрл)
- }
- lstString, err = sf.клиент.Get(strLink)
- if err != nil {
- return nil, fmt.Errorf("СекцияСеть.Get(): err=\n\t%v", err)
- }
- return lstString, nil
- }
- // Клиент -- возвращает хранимого клиента
- func (сам *СекцияСеть) Клиент() types.ИСетьКлиент {
- return сам.клиент
- }
|