serv_bots.go 2.6 KB

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