serv_bots.go 2.1 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. // ServBots -- словарь ботов на сервере
  10. type ServBots struct {
  11. server types.ИСервер
  12. store types.IStore
  13. dictBot *dict_warbot.DictWarBot
  14. }
  15. // NewServBots -- возвращает новый словарь серверных ботов
  16. func NewServBots(server types.ИСервер) (*ServBots, error) {
  17. if server == nil {
  18. return nil, fmt.Errorf("NewServBots(): IServer == nil")
  19. }
  20. sf := &ServBots{
  21. server: server,
  22. store: server.Store(),
  23. }
  24. var err error
  25. sf.dictBot, err = dict_warbot.NewDictWarBot(server)
  26. if err != nil {
  27. return nil, fmt.Errorf("NewServBots(): in create DictWarBot, err=\n\t%w", err)
  28. }
  29. return sf, nil
  30. }
  31. // Get -- возвращает боевого бота по имени
  32. func (sf *ServBots) Get(name string) types.ИБот {
  33. bot := sf.dictBot.Get(name)
  34. return bot
  35. }
  36. // BotStart -- запускает бота в работу по его имени
  37. func (sf *ServBots) 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 *ServBots) ListBot() []types.ИБот {
  50. lst := sf.dictBot.ListBot()
  51. return lst
  52. }
  53. // NewBot -- добавляет нового бота на ферму
  54. func (sf *ServBots) NewBot(login, pass string) error {
  55. { // Существует ли такой бот
  56. bot := sf.dictBot.Get(login)
  57. if bot != nil {
  58. return nil
  59. }
  60. }
  61. { // Нет такого бота, надо его создать
  62. bot, err := warbot.НовВарБот(sf.server, login, pass)
  63. if err != nil {
  64. return fmt.Errorf("ServBots.NewBot(): in create bot %q, err=\n\t%w", login, err)
  65. }
  66. sf.dictBot.Add(bot)
  67. }
  68. return nil
  69. }