sectionnet.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // package sectionnet -- сетевая секция
  2. package sectionnet
  3. import (
  4. "fmt"
  5. "log"
  6. "strings"
  7. "sync"
  8. // "time"
  9. "wartank/pkg/types"
  10. )
  11. /*
  12. Базовый тип для сетевых секций
  13. */
  14. // SectionNet -- базовый тип для сетевых секций
  15. type SectionNet struct {
  16. client types.INetClient
  17. section types.ИСценаСтр
  18. strUrl string
  19. block sync.Mutex
  20. }
  21. // NewSectionNet -- возвращает новый *SectionNet
  22. func NewSectionNet(section types.ИСценаСтр, strUrl string) (*SectionNet, error) {
  23. log.Printf("NewSectionNet(): url=%q\n", strUrl)
  24. { // Предусловия
  25. if section == nil {
  26. return nil, fmt.Errorf("NewSectionNet(): ISection == nil")
  27. }
  28. if strUrl == "" {
  29. return nil, fmt.Errorf("NewSectionNet(): strUrl is empty")
  30. }
  31. }
  32. sf := &SectionNet{
  33. section: section,
  34. strUrl: strUrl,
  35. client: section.Бот().Сеть().КлиентСеть(),
  36. }
  37. return sf, nil
  38. }
  39. // Обновляет список строк
  40. func (sf *SectionNet) UpdateLst() (err error) {
  41. if sf == nil {
  42. return
  43. }
  44. sf.block.Lock()
  45. defer sf.block.Unlock()
  46. // FIXME: попытка разобраться, что за фигня творится
  47. // time.Sleep(time.Millisecond * 500)
  48. log.Printf("SectionNet.UpdateLst(): bot=%s\tsection=%v\n", sf.section.Бот().Имя(), sf.section.Имя())
  49. lstString, err := sf.client.Get(sf.strUrl)
  50. if err != nil {
  51. return fmt.Errorf("SectionNet.UpdateLst(): in make request, err=\n\t%w", err)
  52. }
  53. if err := sf.section.СтрОбновить(lstString); err != nil {
  54. return fmt.Errorf("SectionNet.UpdateLst(): in update ISection, err=\n\t%w", err)
  55. }
  56. return nil
  57. }
  58. // Get -- выполняет GET-запрос по указанному URL
  59. func (sf *SectionNet) Get(strLink string) (lstString []string, err error) {
  60. sf.block.Lock()
  61. defer sf.block.Unlock()
  62. // log._rintf("INFO SectionNet.Get(): link=%v\n", sf.strUrl)
  63. if !strings.Contains(strLink, sf.strUrl) {
  64. return nil, fmt.Errorf("SectionNet.Get(): strLink(%v) не содержит strUrl(%v)", strLink, sf.strUrl)
  65. }
  66. lstString, err = sf.client.Get(strLink)
  67. if err != nil {
  68. return nil, fmt.Errorf("SectionNet.Get(): err=\n\t%v", err)
  69. }
  70. return lstString, nil
  71. }