arena.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // package arena -- типовая арена работы части игры (банк, арсенал и т.п.)
  2. package arena
  3. import (
  4. "log"
  5. "strings"
  6. . "gitp78su.ipnodns.ru/svi/kern"
  7. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  8. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  9. "wartank/app/lev0/alias"
  10. "wartank/app/lev0/cons"
  11. . "wartank/app/lev0/types"
  12. "wartank/app/lev1"
  13. "wartank/app/lev2/arena/arena_context"
  14. "wartank/app/lev2/arena/arena_net"
  15. "wartank/app/lev2/arena/arena_string"
  16. )
  17. // АренаКонфиг -- конфигурация арены
  18. type АренаКонфиг struct {
  19. Конт_ ILocalCtx
  20. АренаИмя_ alias.ААренаИмя
  21. СтрКонтроль_ string // Контрольная строка для арены
  22. СтрУрл_ string // Адрес арены
  23. }
  24. // Контролирует правильность параметров
  25. func (сам *АренаКонфиг) контроль() {
  26. Hassert(сам.Конт_ != nil, "АренаКонфиг.СтрКонтроль(): конт ==nil")
  27. Hassert(сам.АренаИмя_ != "", "АренаКонфиг.СтрКонтроль(): СценаИмя_ == \"\"")
  28. Hassert(сам.СтрУрл_ != "", "АренаКонфиг.СтрКонтроль(): СтрУрл_ == \"\"")
  29. }
  30. // Арена -- арена игры
  31. type Арена struct {
  32. ИАренаКонтекст
  33. списСтр *arena_string.АренаСтроки // Список строк из сети для анализа секции
  34. конф АренаКонфиг
  35. уровень ИСтатПарам
  36. сеть ИАренаСеть
  37. лог ILogBuf
  38. }
  39. // НовАрена -- возвращает новую арену игры
  40. func НовАрена(конт ILocalCtx, конф АренаКонфиг) ИАрена {
  41. лог := NewLogBuf()
  42. лог.Debug("НовАрена(): стрКонтроль=%q\n", конф.СтрКонтроль_)
  43. конф.контроль()
  44. аренаКонтекст := arena_context.НовАренаКонтекст(конт, конф.АренаИмя_)
  45. сам := &Арена{
  46. ИАренаКонтекст: аренаКонтекст,
  47. уровень: lev1.НовСтатПарам("уровень"),
  48. списСтр: arena_string.НовАренаСтроки(конт, конф.СтрКонтроль_),
  49. конф: конф,
  50. лог: лог,
  51. }
  52. сам.сеть = arena_net.НовАренаСеть_(конт, сам, конф.СтрУрл_) //"https://wartank.ru/polygon")
  53. return сам
  54. }
  55. // Пуск -- запускает арену
  56. func (сам *Арена) Пуск() {
  57. сам.Обновить()
  58. log.Printf("Пуск(): сам=%v\tстатус=%v", сам.конф.АренаИмя_, сам.Состояние().Получ())
  59. }
  60. // Обновить -- обновляет арену
  61. func (сам *Арена) Обновить() {
  62. сам.сеть.Обновить()
  63. списСтр := сам.СписПолучить()
  64. if len(списСтр) == 0 {
  65. списСтр = сам.сеть.ВебВоркер().Получ(сам.конф.СтрУрл_)
  66. }
  67. сам.СтрОбновить(списСтр)
  68. }
  69. // СтрОбновить -- обновляет список строк секции по требованию
  70. func (сам *Арена) СтрОбновить(lstString []string) {
  71. err := сам.списСтр.Set(lstString)
  72. if err == nil {
  73. return
  74. }
  75. еслиБаза := strings.Contains(err.Error(), "<title>База</title>")
  76. еслиАпгрейд := сам.Состояние().Получ() == cons.РежимАпгрейд
  77. еслиАпгрейдПлат := сам.Состояние().Получ() == cons.РежимАпгрейдПлатный
  78. if еслиБаза || еслиАпгрейд || еслиАпгрейдПлат {
  79. return
  80. }
  81. Hassert(err == nil, "Арена.СтрОбновить(): при установке lstString, err=\n\t%v", err)
  82. }
  83. // Уровень -- возвращает уровень арены
  84. func (сам *Арена) Уровень() ИСтатПарам {
  85. return сам.уровень
  86. }
  87. // СписПолучить -- возвращает список строк секции
  88. func (сам *Арена) СписПолучить() []string {
  89. return сам.списСтр.Получ()
  90. }
  91. // Сеть -- возвращает объект сети
  92. func (сам *Арена) Сеть() ИАренаСеть {
  93. return сам.сеть
  94. }