serv_bots.go 2.8 KB

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