serv_bots.go 2.7 KB

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