| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // package mod_http -- http-движок для архитектуры
- package engine_http
- import (
- _ "embed"
- "fmt"
- "time"
- "github.com/gofiber/fiber/v2"
- "gitp78su.ipnodns.ru/svi/kern/v3"
- "gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
- "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/cons"
- "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/arch_doc"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
- "gitp78su.ipnodns.ru/svi/goarch/lev1/view_size"
- "gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http/http_api"
- )
- //go:embed index.html
- var indexHtml []byte
- // CanvasSize -- размер хоста
- type CanvasSize struct {
- SizeX_ int `form:"w"`
- SizeY_ int `form:"h"`
- }
- func (sf *CanvasSize) String() string {
- return fmt.Sprintf("w:%v; h:%v", sf.SizeX_, sf.SizeY_)
- }
- // EngineHttp -- http-движок для архитектуры
- type EngineHttp struct {
- // fibApp *fiber.App
- kCtx ktypes.IKernelCtx
- log ktypes.ILogBuf
- diaMode string // Режим диаграммы
- canvSize CanvasSize // Размер холста
- size types.IViewSize // Размер холста в его координатах
- pos types.IViewCoord // Координаты холста
- archDoc *arch_doc.ArchDoc // Документ архитектуры
- httpApi *http_api.HttpApi
- }
- // NewEngineHttp -- возвращает новый движок HTTP
- func NewEngineHttp() *EngineHttp {
- optTerm := log_buf.OptIsTerm(true)
- optPref := log_buf.OptPrefix("EngineHttp")
- log := log_buf.NewLogBuf(optTerm, optPref)
- sf := &EngineHttp{
- kCtx: kern.GetKernelCtx(),
- log: log,
- diaMode: cons.ModeUseCase,
- size: view_size.NewViewSize(800, 600),
- pos: view_coord.NewViewCoord(0, 0),
- archDoc: arch_doc.GetArchDoc(),
- httpApi: http_api.NewHttpApi(),
- }
- sHttp := kern.GetKernelServerHttp()
- fibApp := sHttp.Fiber()
- fibApp.Static("/static", "./static", fiber.Static{
- Compress: true,
- Browse: true,
- CacheDuration: time.Second * 10,
- })
- fibApp.Get("/", sf.getIndex)
- fibApp.Get("/api/use_case", sf.postSetModeUseCase)
- fibApp.Post("/api/canvas/size/set", sf.postSetCanvasSize)
- return sf
- }
- // Устанавливает размер холста
- func (sf *EngineHttp) postSetCanvasSize(ctx *fiber.Ctx) error {
- err := ctx.BodyParser(&sf.canvSize)
- if err != nil {
- sf.log.Err("postSetCanvasSize(): on body parser, err=\n\t%v", err)
- }
- var (
- w alias.SizeX
- h alias.SizeY
- )
- if sf.canvSize.SizeX_ > 0 {
- w = alias.SizeX(sf.canvSize.SizeX_ - 10)
- }
- if sf.canvSize.SizeY_ > 0 {
- h = alias.SizeY(sf.canvSize.SizeY_ - 10)
- }
- sf.size = view_size.NewViewSize(w, h)
- return ctx.SendString(sf.size.String())
- }
- // Возвращает картинку архитектуры
- func (sf *EngineHttp) postSetModeUseCase(ctx *fiber.Ctx) error {
- sf.diaMode = cons.ModeUseCase
- return ctx.SendString("[mode='" + sf.diaMode + "']")
- }
- // Возвращает главную страницу сервиса
- func (sf *EngineHttp) getIndex(ctx *fiber.Ctx) error {
- ctx.Response().Header.Set("Content-Type", "text/html")
- return ctx.Send(indexHtml)
- }
|