arena_base.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // package arena_base -- база в игре
  2. package arena_base
  3. import (
  4. "fmt"
  5. "log"
  6. "sync"
  7. "time"
  8. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  9. . "wartank/app/lev0/types"
  10. "wartank/app/lev2/arena"
  11. )
  12. /*
  13. Объект базы в игре.
  14. */
  15. const (
  16. // времОжидПлат = "01:00" // Время ожидания платного ускорения
  17. // времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
  18. )
  19. // База -- объект базы
  20. type АренаБаза struct {
  21. ИАрена
  22. бот ИБот
  23. блок sync.Mutex
  24. }
  25. // НовБаза -- возвращает новую базу бота
  26. func НовБаза(конт ILocalCtx) ИАренаБаза {
  27. бот := конт.Get("бот").Val().(ИБот)
  28. log.Printf("НовБаза(): %q\n", бот.Имя())
  29. сам := &АренаБаза{
  30. бот: бот,
  31. }
  32. аренаКонфиг := arena.АренаКонфиг{
  33. Бот_: бот,
  34. АренаИмя_: "База",
  35. СтрКонтроль_: `<title>База</title>`,
  36. ФнПуск_: сам.пуск,
  37. СтрУрл_: "https://wartank.ru/buildings",
  38. }
  39. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  40. конт.Set("база", сам, "База бота")
  41. return сам
  42. }
  43. // Запускает базу в обработку
  44. func (сам *АренаБаза) Пуск() {
  45. log.Printf("Base.Run()\n")
  46. if err := сам.runComponent(); err != nil {
  47. panic(fmt.Errorf("Base.Run(): run, err=\n\t%w", err))
  48. }
  49. go сам.пуск()
  50. }
  51. // Собственная работа
  52. func (сам *АренаБаза) пуск() {
  53. фнЦикл := func() {
  54. defer time.Sleep(time.Minute * 2)
  55. сам.Обновить()
  56. }
  57. for {
  58. select {
  59. case <-сам.Контекст().Done():
  60. return
  61. // case <-сам.ВремяОпрос().КаналСиг():
  62. // фнЦикл()
  63. default:
  64. log.Printf("База.пуск()\n")
  65. фнЦикл()
  66. }
  67. }
  68. }
  69. // Запускает компоненты
  70. func (сам *АренаБаза) runComponent() error {
  71. log.Printf("Base.runComponent()\n")
  72. сам.блок.Lock()
  73. defer сам.блок.Unlock()
  74. return nil
  75. }