warbot_net.go 3.1 KB

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