web_gui.go 6.9 KB

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