serv_bots.go 2.4 KB

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