warbot_net.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package warbot_net
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "wartank/pkg/components/safe_bool"
  7. "wartank/pkg/components/scene_net/web_worker"
  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.ИБот) (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. сам.вебВоркер = web_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. return сам, nil
  49. }
  50. // Бот -- возвращает ссылку на своего бота
  51. func (сам *ВарБотСеть) Бот() types.ИБот {
  52. return сам.бот
  53. }
  54. // Кнт -- контекст сети бота
  55. func (сам *ВарБотСеть) Кнт() context.Context {
  56. return сам.ctx
  57. }
  58. // Отмена -- отменяет контекст сети бота
  59. func (сам *ВарБотСеть) Отмена() {
  60. сам.фнОтмена()
  61. }
  62. // ЕслиОнлайн -- возвращает признак нахождения в онлайне
  63. func (сам *ВарБотСеть) ЕслиОнлайн() *safe_bool.БезопБул {
  64. return сам.еслиОнлайн
  65. }
  66. // ВебВоркер -- возвращает веб-воркер бота
  67. func (сам *ВарБотСеть) ВебВоркер() types.ИВебВоркер {
  68. return сам.вебВоркер
  69. }
  70. // Куки -- возвращает куки для HTTP-коннект
  71. func (сам *ВарБотСеть) Куки() types.ИБотКуки {
  72. return сам.вебСокет.Куки()
  73. }