web_gui.go 6.2 KB

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