// 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/login", сам.логин) сам.файбер.Get("/gui/list_bot", сам.кукиПроверить, сам.списокБотов) сам.файбер.Get("/gui/add_bot", сам.кукиПроверить, сам.гетБотНов) сам.файбер.Get("/gui/bot/:number/state", сам.кукиПроверить, сам.состояниеБота) return сам, nil } // Показывает состояние бота по имени func (сам *ВебГуи) состояниеБота(кнт *fiber.Ctx) error { log.Printf("ВебГуи.состояниеБота()\n") стрНомер := кнт.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 { log.Printf("ВебГуи.гетБотНов()\n") return кнт.Render("add_bot", fiber.Map{ "Title": "WarTank", }) } // Возвращает страницу со списком ботов func (сам *ВебГуи) списокБотов(кнт *fiber.Ctx) error { log.Printf("ВебГуи.списокБотов()\n") списокБотов := сам.серв.ServBots().ListBot() списокБот := make(map[alias.БотНомер]string, 0) for _, бот := range списокБотов { списокБот[бот.Номер()] = бот.Имя() } return кнт.Render("list_bot", fiber.Map{ "Title": "WarTank", "bots": списокБот, }) } // Возвращает индексную страницу func (сам *ВебГуи) индекс(кнт *fiber.Ctx) error { log.Printf("ВебГуи.индекс()\n") имя := кнт.Cookies("login") if имя != "svi" { return кнт.Redirect("/gui/login", http.StatusSeeOther) } return кнт.Redirect("/gui/list_bot", http.StatusSeeOther) } // Возвращает страницу логина func (сам *ВебГуи) логин(кнт *fiber.Ctx) error { log.Printf("ВебГуи.логин()\n") return кнт.Render("login", fiber.Map{ "Title": "WarTank", "err": "Неправильный логин", }) } // Проверка на куки func (sf *ВебГуи) кукиПроверить(кнт *fiber.Ctx) error { log.Printf("ВебГуи.кукиПроверить()\n") имя := кнт.Cookies("login") if имя != "svi" { return кнт.Redirect("/gui/login", http.StatusSeeOther) } return кнт.Next() }