web_gui.go 5.8 KB

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