// 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", "имя": имя, "топливо": бот.Ангар().Топливо().Получ(), "золото": бот.Ангар().Золото().Получ(), "слава": бот.Ангар().Конвой().Слава().Получ(), "атака": бот.Танк().ТанкСтат().Атака(), }) } // Показывает страницу добавления бота 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 { return кнт.Render("index", fiber.Map{ "Title": "WarTank", }) }