package warbot_net import ( "context" "fmt" "net/http" "wartank/pkg/components/safebool" "wartank/pkg/components/sectionnet/netclient" "wartank/pkg/types" "wartank/server/serv_bots/warbot/warbot_net/bot_net_conn" "wartank/server/serv_bots/warbot/warbot_net/bot_net_login" ) /* Веб-клиент для выполнения запросов на сервер */ // WarBotNet -- веб-клиент для выполнения запросов на веб-сервер type WarBotNet struct { bot types.IBot botNetConn *bot_net_conn.BotNetConn login *bot_net_login.BotNetLogin isOnline *safebool.SafeBool net *netclient.NetClient ctx context.Context fnCancel func() } // NewWarBotNet -- возвращает новый *NetClient func NewWarBotNet(bot types.IBot) (*WarBotNet, error) { fmt.Printf("NewWarBotNet()\n") if bot == nil { return nil, fmt.Errorf("NewWarBotNet(): IBot == nil") } ctx, fnCancel := context.WithCancel(bot.Ctx()) sf := &WarBotNet{ bot: bot, botNetConn: bot_net_conn.NewBotNetConn(), isOnline: safebool.NewSafeBool(), ctx: ctx, fnCancel: fnCancel, } sf.net = netclient.NewNetClient(sf) { // Подключаем сетевой логин var err error sf.login, err = bot_net_login.NewBotNetLogin(sf) if err != nil { return nil, fmt.Errorf("NewWarBotNet(): in create BotNetLogin, err=\n\t%w", err) } } sf.isOnline.Set() _ = types.IBotNet(sf) return sf, nil } // Bot -- возвращает ссылку на своего бота func (sf *WarBotNet) Bot() types.IBot { return sf.bot } // Ctx -- контекст сети бота func (sf *WarBotNet) Ctx() context.Context { return sf.ctx } // CancelBotNet -- отменяет контекст сети бота func (sf *WarBotNet) CancelBotNet() { sf.fnCancel() } // IsOnline -- возвращает признак нахождения в онлайне func (sf *WarBotNet) IsOnline() *safebool.SafeBool { return sf.isOnline } // Net -- возвращает исполнитель запросов func (sf *WarBotNet) Net() types.INetClient { return sf.net } // Conn -- возвращает HTTP-коннект func (sf *WarBotNet) Conn() *http.Client { return sf.botNetConn.Client() } // Cookie -- возвращает куки для HTTP-коннект func (sf *WarBotNet) Cookie() types.IBotCookie { return sf.botNetConn.Cookie() }