web_gui.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // package web_gui -- веб-сервер для графики
  2. package web_gui
  3. import (
  4. "fmt"
  5. "log"
  6. "net/url"
  7. "github.com/gofiber/fiber/v2"
  8. "wartank/pkg/types"
  9. )
  10. // ВебГип -- веб-сервер для графики
  11. type ВебГуи struct {
  12. серв types.ИСервер
  13. файбер *fiber.App
  14. }
  15. // НовВебГуи -- возвращает новый веб-сервер для графики
  16. func НовВебГуи(вебСервер types.ИВебСервер) (*ВебГуи, error) {
  17. if вебСервер == nil {
  18. return nil, fmt.Errorf("НовВебГуи(): ИВебСервер==nil")
  19. }
  20. сам := &ВебГуи{
  21. серв: вебСервер.Сервер(),
  22. файбер: вебСервер.Файбер(),
  23. }
  24. сам.файбер.Get("/", сам.индекс)
  25. сам.файбер.Get("/gui/list_bot", сам.списокБотов)
  26. сам.файбер.Get("/gui/add_bot", сам.гетБотНов)
  27. сам.файбер.Get("/gui/bot/:name/state", сам.состояниеБота)
  28. return сам, nil
  29. }
  30. // Показывает состояние бота по имени
  31. func (сам *ВебГуи) состояниеБота(кнт *fiber.Ctx) error {
  32. имя := кнт.Params("name")
  33. имя, ош := url.QueryUnescape(имя)
  34. if ош != nil {
  35. return кнт.Render("list_bot", fiber.Map{
  36. "Title": "WarTank",
  37. "err": fmt.Sprintf("ВебГуи.состояниеБота(): ошибка декодирования имени бота: %v", ош.Error()),
  38. })
  39. }
  40. if имя == "" {
  41. return кнт.Render("list_bot", fiber.Map{
  42. "Title": "WarTank",
  43. "err": "Не задано имя бота",
  44. })
  45. }
  46. log.Printf("ВебГуи.состояниеБота(): имя=%s\n", имя)
  47. бот := сам.серв.ServBots().Get(имя)
  48. if бот == nil {
  49. return кнт.Render("list_bot", fiber.Map{
  50. "Title": "WarTank",
  51. "err": "Бот не найден",
  52. })
  53. }
  54. return кнт.Render("state_bot", fiber.Map{
  55. "Title": "WarTank",
  56. "имя": имя,
  57. "топливо": бот.Ангар().Топливо().Получ(),
  58. "золото": бот.Ангар().Золото().Получ(),
  59. "серебро": бот.Ангар().СереброВсего().Получ(),
  60. "слава": бот.Ангар().Конвой().Слава().Получ(),
  61. "атака": бот.Танк().ТанкСтат().Атака().Получ(),
  62. "броня": бот.Танк().ТанкСтат().Броня().Получ(),
  63. "точность": бот.Танк().ТанкСтат().Точность().Получ(),
  64. "прочность": бот.Танк().ТанкСтат().Прочность().Получ(),
  65. "мощь": бот.Танк().ТанкСтат().Мощь().Получ(),
  66. "шахта_уровень": бот.Ангар().База().Шахта().Уровень().Получ(),
  67. "шахта_режим": бот.Ангар().База().Шахта().СценаРежим().Режим(),
  68. "шахта_сделать_кол": бот.Ангар().База().Шахта().ПродуктКолСейчас(),
  69. "шахта_сделать_назв": бот.Ангар().База().Шахта().ПродуктИмяСейчас(),
  70. "шахта_сделать_время": бот.Ангар().База().Шахта().ПродуктВремяСейчас(),
  71. "полигон_уровень": fmt.Sprintf("%v", бот.Ангар().База().Полигон().Уровень().Получ()),
  72. "полигон_режим": fmt.Sprintf("%v", бот.Ангар().База().Полигон().СценаРежим().Режим()),
  73. "полигон_сделать_кол": fmt.Sprintf("%v", бот.Ангар().База().Полигон().ПродуктКолСейчас()),
  74. "полигон_сделать_назв": бот.Ангар().База().Полигон().ПродуктИмяСейчас(),
  75. "полигон_сделать_время": бот.Ангар().База().Полигон().ПродуктВремяСейчас(),
  76. "оружейная_режим": бот.Ангар().База().Арсенал().СценаРежим().Режим(),
  77. "оружейная_работа": бот.Ангар().База().Арсенал().СценаРежим().Работа(),
  78. "оружейная_время": бот.Ангар().База().Арсенал().ВремяОстат().String(),
  79. "оружейная_ремки": бот.Ангар().База().Арсенал().Ремки().Получ(),
  80. "оружейная_кумул": бот.Ангар().База().Арсенал().Кумулятивы().Получ(),
  81. })
  82. }
  83. // Показывает страницу добавления бота
  84. func (сам *ВебГуи) гетБотНов(кнт *fiber.Ctx) error {
  85. имя := кнт.Cookies("login")
  86. if имя != "svi" {
  87. return кнт.Render("index", fiber.Map{
  88. "Title": "WarTank",
  89. "err": "Не выполнен вход",
  90. })
  91. }
  92. log.Printf("ВебГуи.гетБотНов(): логин=%s\n", имя)
  93. return кнт.Render("add_bot", fiber.Map{
  94. "Title": "WarTank",
  95. })
  96. }
  97. // Возвращает страницу со списком ботов
  98. func (сам *ВебГуи) списокБотов(кнт *fiber.Ctx) error {
  99. имя := кнт.Cookies("login")
  100. if имя != "svi" {
  101. return кнт.Render("index", fiber.Map{
  102. "Title": "WarTank",
  103. "err": "Не выполнен вход",
  104. })
  105. }
  106. log.Printf("ВебГуи.списокБотов(): логин=%s\n", имя)
  107. списокБотов := сам.серв.ServBots().ListBot()
  108. списокИмёнБотов := make([]string, 0)
  109. for _, бот := range списокБотов {
  110. списокИмёнБотов = append(списокИмёнБотов, бот.Имя())
  111. }
  112. return кнт.Render("list_bot", fiber.Map{
  113. "Title": "WarTank",
  114. "bots": списокИмёнБотов,
  115. })
  116. }
  117. // Возвращает индексную страницу
  118. func (сам *ВебГуи) индекс(кнт *fiber.Ctx) error {
  119. имя := кнт.Cookies("login")
  120. if имя == "svi" {
  121. return кнт.Redirect("/gui/list_bot")
  122. }
  123. log.Printf("ВебГуи.индекс(): логин=%s\n", имя)
  124. return кнт.Render("index", fiber.Map{
  125. "Title": "WarTank",
  126. })
  127. }