serv_bots.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // package serv_bots -- словарь ботов сервера
  2. package serv_bots
  3. import (
  4. "fmt"
  5. "wartank/pkg/alias"
  6. "wartank/pkg/types"
  7. "wartank/server/serv_bots/dict_warbot"
  8. "wartank/server/serv_bots/warbot"
  9. )
  10. // БотоФерма -- словарь ботов на сервере
  11. type БотоФерма struct {
  12. серв types.ИСервер
  13. хран types.ИХранилище
  14. dictBot *dict_warbot.DictWarBot
  15. }
  16. // НовБотоФерма -- возвращает новый словарь серверных ботов
  17. func НовБотоФерма(серв types.ИСервер) (*БотоФерма, error) {
  18. if серв == nil {
  19. return nil, fmt.Errorf("НовБотоФерма(): ИСервер == nil")
  20. }
  21. сам := &БотоФерма{
  22. серв: серв,
  23. хран: серв.Хранилище(),
  24. }
  25. var ош error
  26. сам.dictBot, ош = dict_warbot.NewDictWarBot(серв)
  27. if ош != nil {
  28. return nil, fmt.Errorf("НовБотоФерма(): in create DictWarBot, err=\n\t%w", ош)
  29. }
  30. return сам, nil
  31. }
  32. // Get -- возвращает боевого бота по имени
  33. func (сам *БотоФерма) Get(botNumber alias.БотНомер) types.ИБот {
  34. bot := сам.dictBot.Get(botNumber)
  35. return bot
  36. }
  37. // BotStart -- запускает бота в работу по его имени
  38. func (сам *БотоФерма) BotStart(botNumber alias.БотНомер) error {
  39. bot := сам.dictBot.Get(botNumber)
  40. if bot == nil {
  41. return fmt.Errorf("ServBots.BotStart(): bot(%v) not found", botNumber)
  42. }
  43. bot.Пуск()
  44. return nil
  45. }
  46. // ListBot -- возвращает список существующих ботов
  47. func (сам *БотоФерма) ListBot() []types.ИБот {
  48. lst := сам.dictBot.ListBot()
  49. return lst
  50. }
  51. // НовБот -- добавляет нового бота на ферму
  52. func (сам *БотоФерма) НовБот(логин, пароль string, еслиАвто bool) error {
  53. { // Существует ли такой бот
  54. for _, бот := range сам.dictBot.ListBot() {
  55. if бот.Имя() == логин {
  56. return nil
  57. }
  58. }
  59. }
  60. номер := alias.БотНомер(len(сам.dictBot.ListBot()) + 1)
  61. фнНомерПровер := func() bool {
  62. for _, бот := range сам.dictBot.ListBot() {
  63. if бот.Номер() == номер {
  64. return false
  65. }
  66. }
  67. return true
  68. }
  69. for !фнНомерПровер() {
  70. номер++
  71. }
  72. { // Нет такого бота, надо его создать
  73. bot, err := warbot.НовВарБот(сам.серв, номер, логин, пароль, еслиАвто)
  74. if err != nil {
  75. return fmt.Errorf("БотоФерма.НовБот(): in create bot %q, err=\n\t%w", логин, err)
  76. }
  77. сам.dictBot.Add(bot)
  78. }
  79. return nil
  80. }