arena.go 3.9 KB

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