// package serv_bots -- словарь ботов сервера package serv_bots import ( "fmt" "wartank/pkg/alias" "wartank/pkg/types" "wartank/server/serv_bots/dict_warbot" "wartank/server/serv_bots/warbot" ) // БотоФерма -- словарь ботов на сервере type БотоФерма struct { серв types.ИСервер хран types.ИХранилище dictBot *dict_warbot.DictWarBot } // НовБотоФерма -- возвращает новый словарь серверных ботов func НовБотоФерма(серв types.ИСервер) (*БотоФерма, error) { if серв == nil { return nil, fmt.Errorf("НовБотоФерма(): ИСервер == nil") } сам := &БотоФерма{ серв: серв, хран: серв.Хранилище(), } var ош error сам.dictBot, ош = dict_warbot.NewDictWarBot(серв) if ош != nil { return nil, fmt.Errorf("НовБотоФерма(): in create DictWarBot, err=\n\t%w", ош) } return сам, nil } // Get -- возвращает боевого бота по имени func (сам *БотоФерма) Get(botNumber alias.БотНомер) types.ИБот { bot := сам.dictBot.Get(botNumber) return bot } // BotStart -- запускает бота в работу по его имени func (сам *БотоФерма) BotStart(botNumber alias.БотНомер) error { bot := сам.dictBot.Get(botNumber) if bot == nil { return fmt.Errorf("ServBots.BotStart(): bot(%v) not found", botNumber) } bot.Пуск() return nil } // ListBot -- возвращает список существующих ботов func (сам *БотоФерма) ListBot() []types.ИБот { lst := сам.dictBot.ListBot() return lst } // НовБот -- добавляет нового бота на ферму func (сам *БотоФерма) НовБот(логин, пароль string, еслиАвто bool) error { { // Существует ли такой бот for _, бот := range сам.dictBot.ListBot() { if бот.Имя() == логин { return nil } } } номер := alias.БотНомер(len(сам.dictBot.ListBot()) + 1) фнНомерПровер := func() bool { for _, бот := range сам.dictBot.ListBot() { if бот.Номер() == номер { return false } } return true } for !фнНомерПровер() { номер++ } { // Нет такого бота, надо его создать bot, err := warbot.НовВарБот(сам.серв, номер, логин, пароль, еслиАвто) if err != nil { return fmt.Errorf("БотоФерма.НовБот(): in create bot %q, err=\n\t%w", логин, err) } сам.dictBot.Add(bot) } return nil }