arena.go 3.9 KB

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