arena_net.go 2.7 KB

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