farm_bots.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // package farm_bots -- бото-ферма
  2. package farm_bots
  3. import (
  4. "fmt"
  5. "log"
  6. . "gitp78su.ipnodns.ru/svi/kern"
  7. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  8. . "wartank/app/lev0/alias"
  9. . "wartank/app/lev0/types"
  10. "wartank/app/lev3/bot"
  11. "wartank/app/lev3/farm_bots/dict_bot"
  12. )
  13. // БотоФерма -- бото-ферма
  14. type БотоФерма struct {
  15. конт IKernelCtx
  16. // прилож ИПриложение
  17. хран IKernelStoreKv
  18. словБот *dict_bot.СловарьБотов
  19. }
  20. // НовБотоФерма -- возвращает новую бото-ферму
  21. func НовБотоФерма() *БотоФерма {
  22. конт := GetKernelCtx()
  23. log.Println("НовБотоФерма()")
  24. // приложение := конт.Получ("приложение").(ИПриложение)
  25. сам := &БотоФерма{
  26. конт: конт,
  27. // прилож: приложение,
  28. хран: конт.Get("kernStoreKV").Val().(IKernelStoreKv),
  29. }
  30. сам.словБот = dict_bot.НовСловарьБотов(конт)
  31. конт.Set("ботоФерма", сам, "БотоФерма")
  32. _ = ИБотоФерма(сам)
  33. return сам
  34. }
  35. // Get -- возвращает боевого бота по имени
  36. func (сам *БотоФерма) Get(botNumber АБотНомер) ИБот {
  37. bot := сам.словБот.Get(botNumber)
  38. return bot
  39. }
  40. // BotStart -- запускает бота в работу по его имени
  41. func (сам *БотоФерма) BotStart(botNumber АБотНомер) Result[bool] {
  42. bot := сам.словБот.Get(botNumber)
  43. if bot == nil {
  44. err := fmt.Errorf("ServBots.BotStart(): bot(%v) not found", botNumber)
  45. return NewErr[bool](err)
  46. }
  47. bot.Пуск()
  48. return NewOk(true)
  49. }
  50. // ListBot -- возвращает список существующих ботов
  51. func (сам *БотоФерма) ListBot() []ИБот {
  52. lst := сам.словБот.ListBot()
  53. return lst
  54. }
  55. // НовБот -- добавляет нового бота на ферму
  56. func (сам *БотоФерма) НовБот(логин, пароль string, еслиАвто bool) Result[bool] {
  57. { // Существует ли такой бот
  58. for _, бот := range сам.словБот.ListBot() {
  59. if бот.Имя() == логин {
  60. err := fmt.Errorf("БотоФерма.НовБот(): логин(%v) уже существует", логин)
  61. return NewErr[bool](err)
  62. }
  63. }
  64. }
  65. номер := АБотНомер(len(сам.словБот.ListBot()) + 1)
  66. фнНомерПровер := func() bool {
  67. for _, бот := range сам.словБот.ListBot() {
  68. if бот.Номер() == номер {
  69. return false
  70. }
  71. }
  72. return true
  73. }
  74. for !фнНомерПровер() {
  75. номер++
  76. }
  77. // Нет такого бота, надо его создать
  78. бот := bot.НовВарБот(сам.конт, номер, логин, пароль, еслиАвто)
  79. сам.словБот.Add(бот)
  80. return NewOk(true)
  81. }