section_net.go 2.9 KB

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