warbot_net.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package warbot_net
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "wartank/pkg/components/arena_net/http_worker"
  7. "wartank/pkg/components/safe_bool"
  8. "wartank/pkg/types"
  9. "wartank/server/serv_bots/warbot/warbot_net/bot_net_login"
  10. "wartank/server/serv_bots/warbot/warbot_net/bot_web_conn"
  11. )
  12. /*
  13. Веб-клиент для выполнения запросов на сервер
  14. */
  15. // ВарБотСеть -- веб-клиент для выполнения запросов на веб-сервер
  16. type ВарБотСеть struct {
  17. бот types.ИБот
  18. вебСокет *bot_web_conn.БотВебСокет
  19. логин *bot_net_login.БотСетьЛогин
  20. еслиОнлайн *safe_bool.БезопБул
  21. вебВоркер types.ИХттпВоркер
  22. ctx context.Context
  23. фнОтмена func()
  24. }
  25. // НовВарБотСеть -- возвращает новый коннект к сети бота
  26. func НовВарБотСеть(бот types.ИБот) (*ВарБотСеть, error) {
  27. if бот == nil {
  28. return nil, fmt.Errorf("НовВарБотСеть(): IBot == nil")
  29. }
  30. log.Printf("НовВарБотСеть(): имя=%q\n", бот.Имя())
  31. ctx, фнОтмена := context.WithCancel(бот.Контекст())
  32. сам := &ВарБотСеть{
  33. бот: бот,
  34. вебСокет: bot_web_conn.НовБотВебСокет(),
  35. еслиОнлайн: safe_bool.НовБезопБул(),
  36. ctx: ctx,
  37. фнОтмена: фнОтмена,
  38. }
  39. сам.вебВоркер = http_worker.НовХттпВоркер(сам, сам.вебСокет.ВебСокет())
  40. { // Подключаем сетевой логин
  41. var err error
  42. сам.логин, err = bot_net_login.НовБотСетьЛогин(сам, сам.вебСокет.ВебСокет())
  43. if err != nil {
  44. return nil, fmt.Errorf("НовВарБотСеть(): при создании BotNetLogin, err=\n\t%w", err)
  45. }
  46. }
  47. сам.еслиОнлайн.Уст()
  48. _ = types.ИБотСеть(сам)
  49. return сам, nil
  50. }
  51. // Бот -- возвращает ссылку на своего бота
  52. func (сам *ВарБотСеть) Бот() types.ИБот {
  53. return сам.бот
  54. }
  55. // Контекст -- контекст сети бота
  56. func (сам *ВарБотСеть) Контекст() context.Context {
  57. return сам.ctx
  58. }
  59. // Отмена -- отменяет контекст сети бота
  60. func (сам *ВарБотСеть) Отмена() {
  61. сам.фнОтмена()
  62. }
  63. // ЕслиОнлайн -- возвращает признак нахождения в онлайне
  64. func (сам *ВарБотСеть) ЕслиОнлайн() *safe_bool.БезопБул {
  65. return сам.еслиОнлайн
  66. }
  67. // ВебВоркер -- возвращает веб-воркер бота
  68. func (сам *ВарБотСеть) ВебВоркер() types.ИХттпВоркер {
  69. return сам.вебВоркер
  70. }
  71. // Куки -- возвращает куки для HTTP-коннект
  72. func (сам *ВарБотСеть) Куки() types.ИБотКуки {
  73. return сам.вебСокет.Куки()
  74. }