warbot_net.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package warbot_net
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "wartank/pkg/components/safebool"
  8. "wartank/pkg/components/sectionnet/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. // WarBotNet -- веб-клиент для выполнения запросов на веб-сервер
  17. type WarBotNet struct {
  18. bot types.ИБот
  19. botNetConn *bot_net_conn.BotNetConn
  20. login *bot_net_login.BotNetLogin
  21. isOnline *safebool.SafeBool
  22. net *netclient.NetClient
  23. ctx context.Context
  24. fnCancel func()
  25. }
  26. // NewWarBotNet -- возвращает новый *NetClient
  27. func NewWarBotNet(bot types.ИБот) (*WarBotNet, error) {
  28. if bot == nil {
  29. return nil, fmt.Errorf("NewWarBotNet(): IBot == nil")
  30. }
  31. log.Printf("NewWarBotNet(): name=%q\n", bot.Имя())
  32. ctx, fnCancel := context.WithCancel(bot.Кнт())
  33. sf := &WarBotNet{
  34. bot: bot,
  35. botNetConn: bot_net_conn.NewBotNetConn(),
  36. isOnline: safebool.NewSafeBool(),
  37. ctx: ctx,
  38. fnCancel: fnCancel,
  39. }
  40. sf.net = netclient.NewNetClient(sf)
  41. { // Подключаем сетевой логин
  42. var err error
  43. sf.login, err = bot_net_login.NewBotNetLogin(sf)
  44. if err != nil {
  45. return nil, fmt.Errorf("NewWarBotNet(): in create BotNetLogin, err=\n\t%w", err)
  46. }
  47. }
  48. sf.isOnline.Уст()
  49. _ = types.ИБотСеть(sf)
  50. return sf, nil
  51. }
  52. // Бот -- возвращает ссылку на своего бота
  53. func (sf *WarBotNet) Бот() types.ИБот {
  54. return sf.bot
  55. }
  56. // Кнт -- контекст сети бота
  57. func (sf *WarBotNet) Кнт() context.Context {
  58. return sf.ctx
  59. }
  60. // Отмена -- отменяет контекст сети бота
  61. func (sf *WarBotNet) Отмена() {
  62. sf.fnCancel()
  63. }
  64. // ЕслиОнлайн -- возвращает признак нахождения в онлайне
  65. func (sf *WarBotNet) ЕслиОнлайн() *safebool.SafeBool {
  66. return sf.isOnline
  67. }
  68. // КлиентСеть -- возвращает исполнитель запросов
  69. func (sf *WarBotNet) КлиентСеть() types.INetClient {
  70. return sf.net
  71. }
  72. // Коннект -- возвращает HTTP-коннект
  73. func (sf *WarBotNet) Коннект() *http.Client {
  74. return sf.botNetConn.Client()
  75. }
  76. // Куки -- возвращает куки для HTTP-коннект
  77. func (sf *WarBotNet) Куки() types.ИБотКуки {
  78. return sf.botNetConn.Cookie()
  79. }