arena_net.go 2.5 KB

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