web_gui.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. func (сам *ВебГуи) гетБотНов(кнт *fiber.Ctx) error {
  65. имя := кнт.Cookies("login")
  66. if имя != "svi" {
  67. return кнт.Render("index", fiber.Map{
  68. "Title": "WarTank",
  69. "err": "Не выполнен вход",
  70. })
  71. }
  72. log.Printf("ВебГуи.гетБотНов(): логин=%s\n", имя)
  73. return кнт.Render("add_bot", fiber.Map{
  74. "Title": "WarTank",
  75. })
  76. }
  77. // Возвращает страницу со списком ботов
  78. func (сам *ВебГуи) списокБотов(кнт *fiber.Ctx) error {
  79. имя := кнт.Cookies("login")
  80. if имя != "svi" {
  81. return кнт.Render("index", fiber.Map{
  82. "Title": "WarTank",
  83. "err": "Не выполнен вход",
  84. })
  85. }
  86. log.Printf("ВебГуи.списокБотов(): логин=%s\n", имя)
  87. списокБотов := сам.серв.ServBots().ListBot()
  88. списокИмёнБотов := make([]string, 0)
  89. for _, бот := range списокБотов {
  90. списокИмёнБотов = append(списокИмёнБотов, бот.Имя())
  91. }
  92. return кнт.Render("list_bot", fiber.Map{
  93. "Title": "WarTank",
  94. "bots": списокИмёнБотов,
  95. })
  96. }
  97. // Возвращает индексную страницу
  98. func (сам *ВебГуи) индекс(кнт *fiber.Ctx) error {
  99. return кнт.Render("index", fiber.Map{
  100. "Title": "WarTank",
  101. })
  102. }