// package web_gui -- веб-сервер для графики package web_gui import ( "fmt" "log" "net/url" "github.com/gofiber/fiber/v2" "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/:name/state", сам.состояниеБота) return сам, nil } // Показывает состояние бота по имени func (сам *ВебГуи) состояниеБота(кнт *fiber.Ctx) error { имя := кнт.Params("name") имя, ош := url.QueryUnescape(имя) if ош != nil { return кнт.Render("list_bot", fiber.Map{ "Title": "WarTank", "err": fmt.Sprintf("ВебГуи.состояниеБота(): ошибка декодирования имени бота: %v", ош.Error()), }) } if имя == "" { return кнт.Render("list_bot", fiber.Map{ "Title": "WarTank", "err": "Не задано имя бота", }) } log.Printf("ВебГуи.состояниеБота(): имя=%s\n", имя) бот := сам.серв.ServBots().Get(имя) if бот == nil { return кнт.Render("list_bot", fiber.Map{ "Title": "WarTank", "err": "Бот не найден", }) } return кнт.Render("state_bot", fiber.Map{ "Title": "WarTank", "имя": имя, "топливо": бот.Ангар().Топливо().Получ(), "золото": бот.Ангар().Золото().Получ(), "серебро": бот.Ангар().СереброВсего().Получ(), "слава": бот.Ангар().Конвой().Слава().Получ(), "атака": бот.Танк().ТанкСтат().Атака().Получ(), "броня": бот.Танк().ТанкСтат().Броня().Получ(), "точность": бот.Танк().ТанкСтат().Точность().Получ(), "прочность": бот.Танк().ТанкСтат().Прочность().Получ(), "мощь": бот.Танк().ТанкСтат().Мощь().Получ(), "шахта_уровень": бот.Ангар().База().Шахта().Уровень().Получ(), "шахта_режим": бот.Ангар().База().Шахта().СценаРежим().Режим(), "шахта_сделать_кол": бот.Ангар().База().Шахта().ПродуктКолСейчас(), "шахта_сделать_назв": бот.Ангар().База().Шахта().ПродуктИмяСейчас(), "шахта_сделать_время": бот.Ангар().База().Шахта().ПродуктВремяСейчас(), "полигон_уровень": fmt.Sprintf("%v", бот.Ангар().База().Полигон().Уровень().Получ()), "полигон_режим": fmt.Sprintf("%v", бот.Ангар().База().Полигон().СценаРежим().Режим()), "полигон_сделать_кол": fmt.Sprintf("%v", бот.Ангар().База().Полигон().ПродуктКолСейчас()), "полигон_сделать_назв": бот.Ангар().База().Полигон().ПродуктИмяСейчас(), "полигон_сделать_время": бот.Ангар().База().Полигон().ПродуктВремяСейчас(), "оружейная_режим": бот.Ангар().База().Арсенал().СценаРежим().Режим(), "оружейная_работа": бот.Ангар().База().Арсенал().СценаРежим().Работа(), "оружейная_время": бот.Ангар().База().Арсенал().ВремяОстат().String(), "оружейная_ремки": бот.Ангар().База().Арсенал().Ремки().Получ(), "оружейная_кумул": бот.Ангар().База().Арсенал().Кумулятивы().Получ(), }) } // Показывает страницу добавления бота func (сам *ВебГуи) гетБотНов(кнт *fiber.Ctx) error { имя := кнт.Cookies("login") if имя != "svi" { return кнт.Render("index", fiber.Map{ "Title": "WarTank", "err": "Не выполнен вход", }) } log.Printf("ВебГуи.гетБотНов(): логин=%s\n", имя) return кнт.Render("add_bot", fiber.Map{ "Title": "WarTank", }) } // Возвращает страницу со списком ботов func (сам *ВебГуи) списокБотов(кнт *fiber.Ctx) error { имя := кнт.Cookies("login") if имя != "svi" { return кнт.Render("index", fiber.Map{ "Title": "WarTank", "err": "Не выполнен вход", }) } log.Printf("ВебГуи.списокБотов(): логин=%s\n", имя) списокБотов := сам.серв.ServBots().ListBot() списокИмёнБотов := make([]string, 0) for _, бот := range списокБотов { списокИмёнБотов = append(списокИмёнБотов, бот.Имя()) } return кнт.Render("list_bot", fiber.Map{ "Title": "WarTank", "bots": списокИмёнБотов, }) } // Возвращает индексную страницу func (сам *ВебГуи) индекс(кнт *fiber.Ctx) error { имя := кнт.Cookies("login") if имя == "svi" { return кнт.Redirect("/gui/list_bot") } log.Printf("ВебГуи.индекс(): логин=%s\n", имя) return кнт.Render("index", fiber.Map{ "Title": "WarTank", }) }