| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // package web_gui -- веб-сервер для графики
- package web_gui
- import (
- "fmt"
- "log"
- "net/http"
- "strconv"
- "github.com/gofiber/fiber/v2"
- "wartank/pkg/alias"
- "wartank/pkg/types"
- )
- // ВебГип -- веб-сервер для графики
- type ВебГуи struct {
- серв types.ИСервер
- файбер *fiber.App
- }
- // НовВебГуи -- возвращает новый веб-сервер для графики
- func НовВебГуи(вебСервер types.ИВебСервер) (*ВебГуи, error) {
- if вебСервер == nil {
- return nil, fmt.Errorf("НовВебГуи(): ИВебСервер==nil")
- }
- сам := &ВебГуи{
- серв: вебСервер.Сервер(),
- файбер: вебСервер.Файбер(),
- }
- сам.файбер.Get("/", сам.индекс)
- сам.файбер.Get("/gui/list_bot", сам.списокБотов)
- сам.файбер.Get("/gui/add_bot", сам.гетБотНов)
- сам.файбер.Get("/gui/bot/:number/state", сам.состояниеБота)
- return сам, nil
- }
- // Показывает состояние бота по имени
- func (сам *ВебГуи) состояниеБота(кнт *fiber.Ctx) error {
- имя := кнт.Cookies("login")
- if имя != "svi" {
- return кнт.Redirect("/", http.StatusSeeOther)
- }
- стрНомер := кнт.Params("number")
- иНомер, ош := strconv.Atoi(стрНомер)
- if ош != nil {
- return кнт.Render("list_bot", fiber.Map{
- "Title": "WarTank",
- "err": fmt.Sprintf("ВебГуи.состояниеБота(): ошибка декодирования имени бота: %v", ош.Error()),
- })
- }
- ботНомер := alias.БотНомер(иНомер)
- log.Printf("ВебГуи.состояниеБота(): имя=%s\n", стрНомер)
- бот := сам.серв.ServBots().Get(ботНомер)
- if бот == nil {
- return кнт.Render("list_bot", fiber.Map{
- "Title": "WarTank",
- "err": "Бот не найден",
- })
- }
- уровень := бот.Ангар().База().Шахта().Уровень()
- стрУровень := fmt.Sprint(уровень.Получ())
- return кнт.Render("state_bot", fiber.Map{
- "Title": "WarTank",
- "имя": бот.Имя(),
- "number": бот.Номер(),
- "топливо": бот.Ангар().Топливо().Получ(),
- "золото": бот.Ангар().Золото().Получ(),
- "серебро": бот.Ангар().СереброВсего().Получ(),
- "слава": бот.Ангар().Конвой().Слава().Получ(),
- "атака": бот.Танк().ТанкСтат().Атака().Получ(),
- "броня": бот.Танк().ТанкСтат().Броня().Получ(),
- "точность": бот.Танк().ТанкСтат().Точность().Получ(),
- "прочность": бот.Танк().ТанкСтат().Прочность().Получ(),
- "мощь": бот.Танк().ТанкСтат().Мощь().Получ(),
- "шахта_уровень": стрУровень,
- "шахта_режим": бот.Ангар().База().Шахта().СценаРежим().Режим(),
- "шахта_сделать_кол": бот.Ангар().База().Шахта().ПродуктКолСейчас(),
- "шахта_сделать_назв": бот.Ангар().База().Шахта().ПродуктИмяСейчас(),
- "шахта_сделать_время": бот.Ангар().База().Шахта().ПродуктВремяСейчас(),
- "полигон_уровень": fmt.Sprintf("%v", бот.Ангар().База().Полигон().Уровень().Получ()),
- "полигон_режим": fmt.Sprintf("%v", бот.Ангар().База().Полигон().СценаРежим().Режим()),
- "полигон_сделать_кол": fmt.Sprintf("%v", бот.Ангар().База().Полигон().ПродуктКолСейчас()),
- "полигон_сделать_назв": бот.Ангар().База().Полигон().ПродуктИмяСейчас(),
- "полигон_сделать_время": бот.Ангар().База().Полигон().ПродуктВремяСейчас(),
- "оружейная_режим": бот.Ангар().База().Арсенал().СценаРежим().Режим(),
- "оружейная_работа": бот.Ангар().База().Арсенал().СценаРежим().Работа(),
- "оружейная_время": бот.Ангар().База().Арсенал().ВремяОстат().String(),
- "оружейная_ремки": бот.Ангар().База().Арсенал().Ремки().Получ(),
- "оружейная_кумул": бот.Ангар().База().Арсенал().Кумулятивы().Получ(),
- })
- }
- // Показывает страницу добавления бота
- func (сам *ВебГуи) гетБотНов(кнт *fiber.Ctx) error {
- имя := кнт.Cookies("login")
- if имя != "svi" {
- return кнт.Redirect("/", http.StatusSeeOther)
- }
- log.Printf("ВебГуи.гетБотНов(): логин=%s\n", имя)
- return кнт.Render("add_bot", fiber.Map{
- "Title": "WarTank",
- })
- }
- // Возвращает страницу со списком ботов
- func (сам *ВебГуи) списокБотов(кнт *fiber.Ctx) error {
- имя := кнт.Cookies("login")
- if имя != "svi" {
- return кнт.Redirect("/", http.StatusSeeOther)
- }
- log.Printf("ВебГуи.списокБотов(): логин=%s\n", имя)
- списокБотов := сам.серв.ServBots().ListBot()
- списокБот := make(map[alias.БотНомер]string, 0)
- for _, бот := range списокБотов {
- списокБот[бот.Номер()] = бот.Имя()
- }
- return кнт.Render("list_bot", fiber.Map{
- "Title": "WarTank",
- "bots": списокБот,
- })
- }
- // Возвращает индексную страницу
- func (сам *ВебГуи) индекс(кнт *fiber.Ctx) error {
- имя := кнт.Cookies("login")
- if имя != "svi" {
- return кнт.Render("index", fiber.Map{
- "Title": "WarTank",
- "err": "Неправильный логин",
- })
- }
- return кнт.Redirect("/gui/list_bot", http.StatusSeeOther)
- }
|