// package serv_web -- веб-сервер для графики package serv_web import ( "fmt" "github.com/gofiber/fiber/v2" . "gitp78su.ipnodns.ru/svi/kern" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" . "wartank/app/lev0/alias" . "wartank/app/lev0/types" "wartank/app/lev3/serv_web/web_api" "wartank/app/lev3/serv_web/web_gui" ) type СервВеб struct { конт IKernelCtx серв ИПриложение лог ILogBuf } // НовСервВеб -- возвращает новый веб-сервер func НовСервВеб() *СервВеб { конт := GetKernelCtx() лог := NewLogBuf() лог.Info("НовСервВеб()\n") сам := &СервВеб{ конт: конт, серв: конт.Get("мод_сервер").Val().(ИПриложение), лог: лог, } файбер := конт.Get("fiberApp").Val().(*fiber.App) файбер.Get("/list_bot/get", сам.getListBot) файбер.Post("/list_bot/add", сам.постБотНов) файбер.Post("/bot/stat", сам.постБотСтат) _ = web_api.НовВебАпи() _ = web_gui.НовВебГуи(сам.конт) return сам } type ПостБотСтат struct { Номер АБотНомер `form:"bot_number"` } // постБотСтат -- возвращает статистику бота, JSON-API func (сам *СервВеб) постБотСтат(кнт *fiber.Ctx) error { ботСт := &ПостБотСтат{} if err := кнт.BodyParser(ботСт); err != nil { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотСтат(): при парсинге тела запроса, ош=\n\t%" + err.Error(), }) } номер := ботСт.Номер ботоФерма := сам.серв.ServBots() бот := ботоФерма.Get(номер) if бот == nil { return кнт.JSON(fiber.Map{ "error": fmt.Sprintf("СервВеб.постБотСтат(): бот c именем %q не существует", номер), }) } диктБот := map[string]string{} диктБот["isAuto"] = fmt.Sprint(бот.Автозапуск().Get()) диктБот["isWork"] = fmt.Sprint(бот.ЕслиРабота()) ангар := бот.КонтБот().Get("ангар").Val().(ИАренаАнгар) топливо := ангар.Топливо().Получ() if топливо == 0 { ангар.Обновить() топливо = ангар.Топливо().Получ() } диктБот["топливо"] = fmt.Sprint(топливо) диктБот["золото"] = fmt.Sprint(ангар.Золото().Получ()) диктБот["серебро"] = fmt.Sprint(бот.КонтБот().Get("серебро").Val().(int)) слава := бот.КонтБот().Get("слава").Val().(int) if слава == 0 { ангар.Обновить() слава = бот.КонтБот().Get("слава").Val().(int) } диктБот["слава"] = fmt.Sprint(слава) диктБот["прогресс"] = fmt.Sprintf("%v%%", ангар.Прогресс().Получ()) диктБот["уровень"] = fmt.Sprintf("%v", ангар.Уровень().Получ()) диктБот["атака"] = fmt.Sprintf("%v", бот.Стата().Атака().Получ()) диктБот["броня"] = fmt.Sprintf("%v", бот.Стата().Броня().Получ()) диктБот["точность"] = fmt.Sprintf("%v", бот.Стата().Точность().Получ()) диктБот["прочность"] = fmt.Sprintf("%v", бот.Стата().Прочность().Получ()) диктБот["мощь"] = fmt.Sprintf("%v", бот.Стата().Мощь().Получ()) шахта := бот.КонтБот().Get("шахта").(ИАренаШахта) диктБот["шахта_уровень"] = шахта.Уровень().ЗначСтр() диктБот["шахта_режим"] = string(шахта.АренаСостояние().Состояние()) диктБот["шахта_сделать_кол"] = шахта.ПродуктСейчас().ЗначСтр() диктБот["шахта_сделать_назв"] = шахта.ПродуктСейчас().Имя() диктБот["шахта_сделать_время"] = шахта.ПродуктВремяСейчас() полигон := бот.КонтБот().Get("полигон").(ИАренаПолигон) диктБот["полигон_уровень"] = полигон.Уровень().ЗначСтр() диктБот["полигон_режим"] = string(полигон.АренаСостояние().Состояние()) диктБот["полигон_сделать_кол"] = полигон.ПродуктСейчас().ЗначСтр() диктБот["полигон_сделать_назв"] = полигон.ПродуктСейчас().Имя() диктБот["полигон_сделать_время"] = полигон.ПродуктВремяСейчас() return кнт.JSON(диктБот) } type ПостБотНов struct { Логин string `form:"login"` Пароль string `form:"pass"` ЕслиАвто string `form:"is_auto"` } // постБотНов -- добавляет бота на бото-ферму, JSON-API func (сам *СервВеб) постБотНов(кнт *fiber.Ctx) error { бот := &ПостБотНов{} if err := кнт.BodyParser(бот); err != nil { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотНов(): при парсинге тела запроса, ош=\n\t%" + err.Error(), }) } if бот.Логин == "" { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотНов(): пустой логин", }) } if бот.Пароль == "" { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотНов(): пустой пароль", }) } if бот.ЕслиАвто == "" { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотНов(): пустой еслиАвто", }) } var еслиАвто bool if бот.ЕслиАвто == "true" { еслиАвто = true } ботоФерма := сам.серв.ServBots() ош := ботоФерма.НовБот(бот.Логин, бот.Пароль, еслиАвто) if ош != nil { return кнт.JSON(fiber.Map{ "error": "СервВеб.постБотНов(): при создании бота %q, ош=\n\t%" + ош.Error(), }) } return nil } // getListBot -- возвращает список ботов, JSON-API func (сам *СервВеб) getListBot(кнт *fiber.Ctx) error { списБот := сам.серв.ServBots().ListBot() рез := make([]map[string]string, 0) for _, бот := range списБот { _бот := map[string]string{} _бот["name"] = бот.Имя() _бот["isAuto"] = fmt.Sprint(бот.Автозапуск().Get()) _бот["isWork"] = fmt.Sprint(бот.ЕслиРабота()) ангар := бот.КонтБот().Get("ангар").Val().(ИАренаАнгар) _бот["gold"] = ангар.Золото().ЗначСтр() _бот["fuel"] = ангар.Топливо().ЗначСтр() рез = append(рез, _бот) } return кнт.JSON(рез) }