web_gui.go 6.2 KB

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