| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // package sectionnet -- сетевая секция
- package sectionnet
- import (
- "fmt"
- "log"
- "strings"
- "sync"
- // "time"
- "wartank/pkg/types"
- )
- /*
- Базовый тип для сетевых секций
- */
- // SectionNet -- базовый тип для сетевых секций
- type SectionNet struct {
- клиент types.ИСетьКлиент
- section types.ИСценаСтр
- strUrl string
- block sync.Mutex
- }
- // NewSectionNet -- возвращает новый *SectionNet
- func NewSectionNet(section types.ИСценаСтр, strUrl string) (*SectionNet, error) {
- log.Printf("NewSectionNet(): url=%q\n", strUrl)
- { // Предусловия
- if section == nil {
- return nil, fmt.Errorf("NewSectionNet(): ISection == nil")
- }
- if strUrl == "" {
- return nil, fmt.Errorf("NewSectionNet(): strUrl is empty")
- }
- }
- sf := &SectionNet{
- section: section,
- strUrl: strUrl,
- клиент: section.Бот().Сеть().КлиентСеть(),
- }
- return sf, nil
- }
- // Обновляет список строк
- func (sf *SectionNet) UpdateLst() (err error) {
- if sf == nil {
- return
- }
- sf.block.Lock()
- defer sf.block.Unlock()
- // FIXME: попытка разобраться, что за фигня творится
- // time.Sleep(time.Millisecond * 500)
- log.Printf("SectionNet.UpdateLst(): bot=%s\tsection=%v\n", sf.section.Бот().Имя(), sf.section.Имя())
- lstString, err := sf.клиент.Get(sf.strUrl)
- if err != nil {
- return fmt.Errorf("SectionNet.UpdateLst(): in make request, err=\n\t%w", err)
- }
- if err := sf.section.СтрОбновить(lstString); err != nil {
- return fmt.Errorf("SectionNet.UpdateLst(): in update ISection, err=\n\t%w", err)
- }
- return nil
- }
- // Get -- выполняет GET-запрос по указанному URL
- func (sf *SectionNet) Get(strLink string) (lstString []string, err error) {
- sf.block.Lock()
- defer sf.block.Unlock()
- // log._rintf("INFO SectionNet.Get(): link=%v\n", sf.strUrl)
- if !strings.Contains(strLink, sf.strUrl) {
- return nil, fmt.Errorf("SectionNet.Get(): strLink(%v) не содержит strUrl(%v)", strLink, sf.strUrl)
- }
- lstString, err = sf.клиент.Get(strLink)
- if err != nil {
- return nil, fmt.Errorf("SectionNet.Get(): err=\n\t%v", err)
- }
- return lstString, nil
- }
- // Клиент -- возвращает хранимого клиента
- func (сам *SectionNet) Клиент() types.ИСетьКлиент {
- return сам.клиент
- }
|