package warbot_net import ( "context" "fmt" "log" "net/http" "wartank/pkg/components/safe_bool" "wartank/pkg/components/scene_net/netclient" "wartank/pkg/types" "wartank/server/serv_bots/warbot/warbot_net/bot_net_conn" "wartank/server/serv_bots/warbot/warbot_net/bot_net_login" ) /* Веб-клиент для выполнения запросов на сервер */ // ВарБотСеть -- веб-клиент для выполнения запросов на веб-сервер type ВарБотСеть struct { бот types.ИБот сокет *bot_net_conn.БотСетьСокет логин bot_net_login.БотСетьЛогин еслиОнлайн *safe_bool.БезопБул сеть *netclient.NetClient ctx context.Context фнОтмена func() } // НовВарБотСеть -- возвращает новый коннект к сети бота func НовВарБотСеть(бот types.ИБот) (*ВарБотСеть, error) { if бот == nil { return nil, fmt.Errorf("НовВарБотСеть(): IBot == nil") } log.Printf("НовВарБотСеть(): имя=%q\n", бот.Имя()) ctx, фнОтмена := context.WithCancel(бот.Кнт()) сам := &ВарБотСеть{ бот: бот, сокет: bot_net_conn.НовБотСетьСокет(), еслиОнлайн: safe_bool.НовБезопБул(), ctx: ctx, фнОтмена: фнОтмена, } сам.сеть = netclient.NewNetClient(сам) { // Подключаем сетевой логин var err error сам.логин, err = bot_net_login.НовБотСетьЛогин(сам) if err != nil { return nil, fmt.Errorf("НовВарБотСеть(): при создании BotNetLogin, err=\n\t%w", err) } } сам.еслиОнлайн.Уст() _ = types.ИБотСеть(сам) return сам, nil } // Бот -- возвращает ссылку на своего бота func (сам *ВарБотСеть) Бот() types.ИБот { return сам.бот } // Кнт -- контекст сети бота func (сам *ВарБотСеть) Кнт() context.Context { return сам.ctx } // Отмена -- отменяет контекст сети бота func (сам *ВарБотСеть) Отмена() { сам.фнОтмена() } // ЕслиОнлайн -- возвращает признак нахождения в онлайне func (сам *ВарБотСеть) ЕслиОнлайн() *safe_bool.БезопБул { return сам.еслиОнлайн } // КлиентСеть -- возвращает исполнитель запросов func (сам *ВарБотСеть) КлиентСеть() types.ИСетьКлиент { return сам.сеть } // Коннект -- возвращает HTTP-коннект func (сам *ВарБотСеть) Коннект() *http.Client { return сам.сокет.Клиент() } // Куки -- возвращает куки для HTTP-коннект func (сам *ВарБотСеть) Куки() types.ИБотКуки { return сам.сокет.Куки() }