arena_net.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // package arena_net -- сетевая арена
  2. package arena_net
  3. import (
  4. "fmt"
  5. "strings"
  6. "sync"
  7. . "wartank/app/lev0/types"
  8. "wartank/kernel"
  9. . "wartank/kernel/kernel_types"
  10. )
  11. // АренаСеть -- базовый тип для сетевых арен
  12. type АренаСеть struct {
  13. ИБотСеть
  14. клиент ИХттпВоркер
  15. арена ИАрена
  16. стрУрл string
  17. блок sync.Mutex
  18. лог ИЯдроЛог
  19. }
  20. // НовАренаСеть -- возвращает новый *АренаСеть
  21. func НовАренаСеть_(конт ИБотКонтекст, арена ИАрена, стрУрл string) *АренаСеть {
  22. лог := kernel.НовЛог("АренаСеть")
  23. лог.Инфо("НовАренаСеть(): strUrl=%q\n", стрУрл)
  24. лог.Паника(арена == nil, "НовАренаСеть(): ИСценаСтр == nil")
  25. лог.Паника(стрУрл == "", "НовАренаСеть(): стрУрл пустой\n")
  26. сам := &АренаСеть{
  27. ИБотСеть: арена.Бот().Сеть(),
  28. арена: арена,
  29. стрУрл: стрУрл,
  30. клиент: арена.Бот().Сеть().ВебВоркер(),
  31. лог: лог,
  32. }
  33. _ = ИАренаСеть(сам)
  34. return сам
  35. }
  36. // Обновить -- обновляет список строк
  37. func (сам *АренаСеть) Обновить() {
  38. сам.блок.Lock()
  39. defer сам.блок.Unlock()
  40. // FIXME: попытка разобраться, что за фигня творится
  41. // time.Sleep(time.Millisecond * 500)
  42. сам.лог.Отладка("Обновить(): бот=%s\tсцена=%v\n", сам.арена.Бот().Имя(), сам.арена.Имя())
  43. lstString := сам.клиент.Получ(сам.стрУрл)
  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 = сам.клиент.Получ(strLink)
  57. return lstString, nil
  58. }